108 lines
3.1 KiB
Markdown
108 lines
3.1 KiB
Markdown
# Database Migration: MongoDB to SQLite
|
|
|
|
## ✅ Migration Complete!
|
|
|
|
Your Deathwatch roller application has been successfully migrated from MongoDB to SQLite.
|
|
|
|
## What Was Done
|
|
|
|
1. **Data Export**: All player data was exported from MongoDB to a backup file
|
|
2. **SQLite Setup**: Created SQLite database with proper schema
|
|
3. **Data Migration**: Transferred all players and their data to SQLite
|
|
4. **API Update**: Updated server routes to use SQLite instead of MongoDB
|
|
|
|
## Migration Results
|
|
|
|
- **Total players migrated**: 3
|
|
- **Players**: christoffer, claes, phillip
|
|
- **Data preserved**: All player info, requisition points, inventory data
|
|
- **Backup created**: `mongo-backup.json` (safely stores original data)
|
|
|
|
## Files Created/Modified
|
|
|
|
### New Files:
|
|
- `sqlite-db.js` - SQLite database handler
|
|
- `routes/playerRoutes-sqlite.js` - Updated API routes for SQLite
|
|
- `server-sqlite.js` - SQLite server configuration
|
|
- `migrate-to-sqlite.js` - Migration script
|
|
- `switch-db.sh` - Database switching utility
|
|
- `mongo-backup.json` - Complete backup of MongoDB data
|
|
- `sqlite/deathwatch.db` - SQLite database file
|
|
|
|
### Modified Files:
|
|
- `server.js` - Now uses SQLite (MongoDB version backed up as `server-mongo-backup.js`)
|
|
- `package.json` - Added convenience scripts
|
|
|
|
## Usage
|
|
|
|
### Current Status
|
|
- ✅ SQLite is active
|
|
- ✅ Server running on port 3005 (or PORT env variable)
|
|
- ✅ All data migrated successfully
|
|
|
|
### New NPM Scripts
|
|
```bash
|
|
npm run server # Start the server
|
|
npm run db:sqlite # Switch to SQLite (current)
|
|
npm run db:mongo # Switch back to MongoDB
|
|
npm run db:migrate # Re-run migration
|
|
npm run db:export # Export MongoDB data only
|
|
```
|
|
|
|
### Manual Operations
|
|
```bash
|
|
# Switch to SQLite
|
|
cd database && ./switch-db.sh sqlite
|
|
|
|
# Switch to MongoDB
|
|
cd database && ./switch-db.sh mongo
|
|
|
|
# Re-run migration
|
|
cd database && node migrate-to-sqlite.js
|
|
|
|
# Start server
|
|
cd database && node server.js
|
|
```
|
|
|
|
## Benefits of SQLite
|
|
|
|
1. **Simpler Deployment**: No separate database service needed
|
|
2. **Single File Database**: Easy backups and transfers
|
|
3. **Better for Small Apps**: Perfect for gaming groups
|
|
4. **Zero Configuration**: Works out of the box
|
|
5. **ACID Compliant**: Reliable data integrity
|
|
|
|
## Data Structure
|
|
|
|
The SQLite database maintains the same structure as MongoDB:
|
|
- `players` table with JSON columns for `rollerInfo`, `shopInfo`, `tabInfo`
|
|
- All existing player data preserved
|
|
- Password hashing maintained
|
|
- Timestamps added for better tracking
|
|
|
|
## Rollback
|
|
|
|
If you need to go back to MongoDB:
|
|
```bash
|
|
npm run db:mongo
|
|
```
|
|
|
|
This will restore your original MongoDB configuration. Your MongoDB data is unchanged.
|
|
|
|
## File Locations
|
|
|
|
- **SQLite Database**: `database/sqlite/deathwatch.db`
|
|
- **MongoDB Backup**: `database/mongo-backup.json`
|
|
- **Server Logs**: `database/backend.log`
|
|
|
|
## API Compatibility
|
|
|
|
The API endpoints remain exactly the same:
|
|
- `GET /api/players` - List all players
|
|
- `GET /api/players/:name` - Get specific player
|
|
- `PUT /api/players/:name` - Update player
|
|
- `POST /api/players` - Create player
|
|
- `DELETE /api/players/:name` - Delete player
|
|
|
|
Your frontend (React app) requires no changes.
|