2.8 KiB
2.8 KiB
Custom Commands Migration - Quick Reference
TL;DR - Ready to Execute
Current Status
✅ Local Testing: Complete - 140 commands migrated successfully
✅ Production API: Working - Tables created, endpoints functional
✅ Migration Script: Ready - Handles conflicts, grace periods, logging
Execute Production Migration (Copy & Paste)
# 1. Copy files to production
scp /mnt/NV2/Development/major-domo/sba_is_fun.db sba-database:/tmp/
scp /mnt/NV2/Development/major-domo/database/migrate_custom_commands.py sba-database:/tmp/
# 2. SSH and prepare
ssh sba-database
docker cp /tmp/sba_is_fun.db sba_database:/usr/src/app/storage/
docker cp /tmp/migrate_custom_commands.py sba_database:/usr/src/app/storage/
# 3. DRY RUN FIRST (always!)
docker exec sba_database python /usr/src/app/storage/migrate_custom_commands.py \
--source /usr/src/app/storage/sba_is_fun.db \
--target /usr/src/app/storage/sba_master.db \
--dry-run
# 4. If dry run looks good, run actual migration
docker exec sba_database python /usr/src/app/storage/migrate_custom_commands.py \
--source /usr/src/app/storage/sba_is_fun.db \
--target /usr/src/app/storage/sba_master.db
# 5. Validate results
curl -s "https://sba.manticorum.com/api/v3/custom_commands/stats"
curl -s "https://sba.manticorum.com/api/v3/custom_commands/by_name/yeli"
Expected Results
- 30 creators migrated
- 140 commands migrated
- All last_used dates preserved or updated to prevent deletion
- Migration tags added to all commands
- API endpoints immediately functional
What Migration Does
- Maps old schema (
creator,command) to new schema (custom_command_creators,custom_commands) - Preserves all data: names, content, timestamps, relationships
- Updates
last_useddates for commands older than 60 days (prevents deletion) - Adds
["migrated"]tag to all migrated commands - Updates creator statistics automatically
- Handles conflicts gracefully (skips existing entries)
Rollback If Needed
# Remove migrated data (keeps any manually created commands)
docker exec sba_database python -c "
import sqlite3
conn = sqlite3.connect('/usr/src/app/storage/sba_master.db')
cursor = conn.cursor()
cursor.execute('DELETE FROM custom_commands WHERE tags LIKE \"%migrated%\"')
cursor.execute('DELETE FROM custom_command_creators WHERE discord_id NOT IN (SELECT DISTINCT creator_discord_id FROM custom_commands WHERE creator_discord_id IS NOT NULL)')
conn.commit()
conn.close()
print('Rollback complete')
"
Key Files
- Migration Script:
/mnt/NV2/Development/major-domo/database/migrate_custom_commands.py - Source DB:
/mnt/NV2/Development/major-domo/sba_is_fun.db - Production API: https://sba.manticorum.com/api/v3/custom_commands
Ready to execute. No additional setup required.