feat: 完成数据库迁移系统开发
- 创建完整的迁移框架 (pkg/migration/) - 版本管理系统,时间戳版本号 (YYYYMMDD_HHMMSS) - 事务安全的上下迁移机制 (Up/Down) - 迁移状态跟踪和记录 (migration_records 表) - 命令行迁移工具 (cmd/migrate/main.go) - 生产环境迁移脚本 (scripts/production-migrate.sh) - 生产环境初始化脚本 (scripts/init-production-db.sh) - 迁移测试脚本 (scripts/test-migration.sh) - Makefile 集成 (migrate-up, migrate-down, migrate-status) - 5个预定义迁移 (基础表、默认数据、元数据、收藏、用户资料) - 自动备份机制、预览模式、详细日志 - 完整文档 (docs/DATABASE_MIGRATION.md) 任务13完成,项目完成率达到42.5%
This commit is contained in:
@ -104,6 +104,74 @@ db-reset:
|
||||
@rm -f ./data/photography.db
|
||||
@echo "Database reset complete. Run 'make quick' to recreate."
|
||||
|
||||
# 数据库迁移相关命令
|
||||
migrate-status:
|
||||
@echo "Checking migration status..."
|
||||
@go run cmd/migrate/main.go -f $(CONFIG_FILE) -c status
|
||||
|
||||
migrate-up:
|
||||
@echo "Running all pending migrations..."
|
||||
@go run cmd/migrate/main.go -f $(CONFIG_FILE) -c up
|
||||
|
||||
migrate-down:
|
||||
@echo "Rolling back migrations..."
|
||||
@if [ -z "$(STEPS)" ]; then \
|
||||
echo "Error: Please specify STEPS=n"; \
|
||||
exit 1; \
|
||||
fi
|
||||
@go run cmd/migrate/main.go -f $(CONFIG_FILE) -c down -s $(STEPS)
|
||||
|
||||
migrate-reset:
|
||||
@echo "WARNING: This will reset the entire database!"
|
||||
@go run cmd/migrate/main.go -f $(CONFIG_FILE) -c reset
|
||||
|
||||
migrate-create:
|
||||
@echo "Creating new migration..."
|
||||
@if [ -z "$(NAME)" ]; then \
|
||||
echo "Error: Please specify NAME=migration_name"; \
|
||||
exit 1; \
|
||||
fi
|
||||
@go run cmd/migrate/main.go -f $(CONFIG_FILE) -c create "$(NAME)"
|
||||
|
||||
migrate-version:
|
||||
@echo "Latest migration version:"
|
||||
@go run cmd/migrate/main.go -f $(CONFIG_FILE) -c version
|
||||
|
||||
# 数据库初始化(全新安装)
|
||||
db-init: setup
|
||||
@echo "Initializing database with migrations..."
|
||||
@go run cmd/migrate/main.go -f $(CONFIG_FILE) -c up
|
||||
@echo "Database initialized successfully!"
|
||||
|
||||
# 数据库迁移(生产环境)
|
||||
db-migrate:
|
||||
@echo "Running production migrations..."
|
||||
@go run cmd/migrate/main.go -f $(CONFIG_FILE) -c migrate
|
||||
|
||||
# 数据库备份
|
||||
db-backup:
|
||||
@echo "Creating database backup..."
|
||||
@mkdir -p data/backups
|
||||
@cp data/photography.db data/backups/photography_$$(date +%Y%m%d_%H%M%S).db
|
||||
@echo "Backup created in data/backups/"
|
||||
|
||||
# 数据库恢复
|
||||
db-restore:
|
||||
@echo "Restoring database from backup..."
|
||||
@if [ -z "$(BACKUP)" ]; then \
|
||||
echo "Error: Please specify BACKUP=filename"; \
|
||||
echo "Available backups:"; \
|
||||
ls -la data/backups/; \
|
||||
exit 1; \
|
||||
fi
|
||||
@if [ -f "data/backups/$(BACKUP)" ]; then \
|
||||
cp "data/backups/$(BACKUP)" data/photography.db; \
|
||||
echo "Database restored from $(BACKUP)"; \
|
||||
else \
|
||||
echo "Error: Backup file not found: $(BACKUP)"; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
# 部署准备
|
||||
deploy-prep: clean install lint test build
|
||||
@echo "Deployment preparation complete."
|
||||
@ -129,6 +197,18 @@ help:
|
||||
@echo " db-status - Check database status"
|
||||
@echo " db-reset - Reset database"
|
||||
@echo " deploy-prep - Prepare for deployment"
|
||||
@echo " help - Show this help message"
|
||||
@echo ""
|
||||
@echo "Database Migration Commands:"
|
||||
@echo " migrate-status - Show migration status"
|
||||
@echo " migrate-up - Apply all pending migrations"
|
||||
@echo " migrate-down STEPS=n - Rollback n migrations"
|
||||
@echo " migrate-reset - Reset database (WARNING: destructive)"
|
||||
@echo " migrate-create NAME=name - Create new migration template"
|
||||
@echo " migrate-version - Show latest migration version"
|
||||
@echo " db-init - Initialize database with migrations"
|
||||
@echo " db-migrate - Run production migrations"
|
||||
@echo " db-backup - Create database backup"
|
||||
@echo " db-restore BACKUP=file - Restore from backup"
|
||||
@echo " help - Show this help message"
|
||||
|
||||
.PHONY: build run dev quick install gen gen-model clean lint fmt test setup status seed test-seed db-status db-reset deploy-prep help
|
||||
Reference in New Issue
Block a user