mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-24 22:04:56 +00:00
175 lines
5.1 KiB
Markdown
175 lines
5.1 KiB
Markdown
# Storage Backend Default: IndexedDB
|
|
|
|
## Summary
|
|
|
|
The storage system has been updated to **default to IndexedDB** instead of Flask backend. Flask backend is now opt-in only, requiring explicit configuration through UI settings or environment variables.
|
|
|
|
## Changes Made
|
|
|
|
### 1. **Updated Storage Initialization Logic** (`src/lib/unified-storage.ts`)
|
|
|
|
**Previous Behavior:**
|
|
- Checked for Flask backend preference first
|
|
- If `codeforge-prefer-flask` was set in localStorage, attempted Flask connection
|
|
- Fell back to IndexedDB only if Flask failed
|
|
|
|
**New Behavior:**
|
|
- **IndexedDB is now the default** - initialized first unless Flask is explicitly configured
|
|
- Flask backend is only used when:
|
|
- `VITE_FLASK_BACKEND_URL` environment variable is set, OR
|
|
- User explicitly enables Flask backend in UI settings
|
|
- Priority order:
|
|
1. **Flask** (only if explicitly configured)
|
|
2. **IndexedDB** (default)
|
|
3. **SQLite** (if preferred)
|
|
4. **Spark KV** (fallback)
|
|
|
|
### 2. **Environment Variable Support**
|
|
|
|
The Flask backend URL can be configured via environment variable:
|
|
|
|
```bash
|
|
# .env file
|
|
VITE_FLASK_BACKEND_URL=http://localhost:5001
|
|
```
|
|
|
|
Or for production:
|
|
```bash
|
|
VITE_FLASK_BACKEND_URL=https://backend.example.com
|
|
```
|
|
|
|
### 3. **Updated UI Components** (`src/components/StorageSettingsPanel.tsx`)
|
|
|
|
Added Flask backend switching functionality:
|
|
- Input field for Flask backend URL
|
|
- Button to switch to Flask backend
|
|
- Clear indication that IndexedDB is the default
|
|
- Improved descriptions explaining when to use each backend
|
|
|
|
### 4. **Updated Documentation** (`STORAGE.md`)
|
|
|
|
- Reorganized backend priority to show IndexedDB first as default
|
|
- Added clear "Default" label for IndexedDB
|
|
- Documented Flask backend configuration methods
|
|
- Clarified that Flask requires explicit configuration
|
|
|
|
## Usage
|
|
|
|
### Default Behavior (No Configuration)
|
|
|
|
By default, the app will use **IndexedDB** automatically:
|
|
|
|
```typescript
|
|
import { unifiedStorage } from '@/lib/unified-storage'
|
|
|
|
// Uses IndexedDB by default
|
|
await unifiedStorage.set('my-key', myData)
|
|
const data = await unifiedStorage.get('my-key')
|
|
```
|
|
|
|
Console output:
|
|
```
|
|
[Storage] Initializing default IndexedDB backend...
|
|
[Storage] ✓ Using IndexedDB (default)
|
|
```
|
|
|
|
### Enabling Flask Backend
|
|
|
|
#### Method 1: Environment Variable (Recommended for Production)
|
|
|
|
Create a `.env` file:
|
|
```bash
|
|
VITE_FLASK_BACKEND_URL=http://localhost:5001
|
|
```
|
|
|
|
Or set in Docker/Caprover:
|
|
```bash
|
|
docker run -e VITE_FLASK_BACKEND_URL=https://backend.example.com myapp
|
|
```
|
|
|
|
#### Method 2: UI Settings (User Preference)
|
|
|
|
1. Navigate to **Settings → Storage**
|
|
2. Enter Flask backend URL in the input field
|
|
3. Click **"Flask Backend"** button
|
|
4. System will migrate all data from IndexedDB to Flask
|
|
|
|
### Switching Back to IndexedDB
|
|
|
|
In UI Settings:
|
|
1. Navigate to **Settings → Storage**
|
|
2. Click **"IndexedDB (Default)"** button
|
|
3. System will migrate all data back to IndexedDB
|
|
|
|
## Benefits of IndexedDB Default
|
|
|
|
1. **No Setup Required** - Works immediately without backend server
|
|
2. **Offline First** - Full functionality without network connection
|
|
3. **Fast Performance** - Local storage is faster than network requests
|
|
4. **Privacy** - Data stays on user's device by default
|
|
5. **Simpler Deployment** - No backend infrastructure needed for basic usage
|
|
|
|
## When to Use Flask Backend
|
|
|
|
Enable Flask backend when you need:
|
|
- **Cross-device synchronization** - Share data across multiple devices
|
|
- **Centralized data management** - Admin access to all user data
|
|
- **Server-side processing** - Complex queries, analytics, backups
|
|
- **Team collaboration** - Multiple users sharing the same data
|
|
- **Production deployments** - Centralized data storage for SaaS applications
|
|
|
|
## Migration Path
|
|
|
|
The system automatically migrates data when switching backends:
|
|
|
|
```typescript
|
|
// Switch from IndexedDB to Flask
|
|
await switchToFlask('http://localhost:5001')
|
|
|
|
// Switch from Flask back to IndexedDB
|
|
await switchToIndexedDB()
|
|
```
|
|
|
|
All existing data is preserved during migration.
|
|
|
|
## Backwards Compatibility
|
|
|
|
Existing projects with Flask backend configured will continue to use Flask backend:
|
|
- If `codeforge-prefer-flask` is set in localStorage
|
|
- If `VITE_FLASK_BACKEND_URL` is configured
|
|
- Data will not be lost or modified
|
|
|
|
## Testing
|
|
|
|
To verify the default behavior:
|
|
|
|
1. **Clear localStorage** (to remove any preferences):
|
|
```javascript
|
|
localStorage.clear()
|
|
```
|
|
|
|
2. **Reload the app**
|
|
|
|
3. **Check console output**:
|
|
```
|
|
[Storage] Initializing default IndexedDB backend...
|
|
[Storage] ✓ Using IndexedDB (default)
|
|
```
|
|
|
|
4. **Open DevTools → Application → IndexedDB**
|
|
- Should see `CodeForgeDB` database
|
|
- Should see `keyvalue` object store
|
|
|
|
## Files Changed
|
|
|
|
1. `src/lib/unified-storage.ts` - Updated initialization logic
|
|
2. `src/components/StorageSettingsPanel.tsx` - Added Flask backend UI
|
|
3. `STORAGE.md` - Updated documentation
|
|
4. `.env.example` - Already documented VITE_FLASK_BACKEND_URL
|
|
|
|
## Related Documentation
|
|
|
|
- [STORAGE.md](./STORAGE.md) - Complete storage system documentation
|
|
- [FLASK_BACKEND_SETUP.md](./FLASK_BACKEND_SETUP.md) - Flask backend installation guide
|
|
- [.env.example](./.env.example) - Environment variable configuration
|