Files
photography/backend/Makefile
xujiang 84e778e033 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%
2025-07-11 13:41:52 +08:00

214 lines
6.0 KiB
Makefile

# Photography Backend Makefile
# 默认配置
BINARY_NAME=photography-api
BUILD_DIR=bin
CONFIG_FILE=etc/photographyapi-api.yaml
# 环境变量
export GO111MODULE=on
export GOPROXY=https://goproxy.cn,direct
# 构建
build:
@echo "Building $(BINARY_NAME)..."
@mkdir -p $(BUILD_DIR)
go build -o $(BUILD_DIR)/$(BINARY_NAME) cmd/api/main.go
# 运行
run:
@echo "Running $(BINARY_NAME)..."
@./$(BUILD_DIR)/$(BINARY_NAME) -f $(CONFIG_FILE)
# 开发模式(构建并运行)
dev: build run
# 快速启动(跳过构建)
quick:
@echo "Quick start $(BINARY_NAME)..."
@go run cmd/api/main.go -f $(CONFIG_FILE)
# 安装依赖
install:
@echo "Installing dependencies..."
@go mod tidy
# 代码生成
gen:
@echo "Generating code..."
@goctl api go -api api/desc/photography.api -dir ./ --style=goZero
# 生成模型
gen-model:
@echo "Generating models..."
@goctl model mysql ddl -src internal/model/sql/user.sql -dir internal/model/
@goctl model mysql ddl -src internal/model/sql/photo.sql -dir internal/model/
@goctl model mysql ddl -src internal/model/sql/category.sql -dir internal/model/
# 清理
clean:
@echo "Cleaning..."
@rm -rf $(BUILD_DIR)
@go clean
# 代码检查
lint:
@echo "Running linter..."
@golangci-lint run
# 格式化代码
fmt:
@echo "Formatting code..."
@go fmt ./...
# 运行测试
test:
@echo "Running tests..."
@go test -v ./...
# 创建必要目录
setup:
@echo "Setting up directories..."
@mkdir -p data uploads $(BUILD_DIR)
# 健康检查
status:
@echo "API Status:"
@curl -s http://localhost:8080/api/v1/health || echo "API is not running"
# 种子数据管理
seed:
@echo "Running seed data..."
@./run_seed_data.sh
# 测试种子数据
test-seed:
@echo "Testing seed data..."
@./test_seed_data.sh
# 检查数据库状态
db-status:
@echo "Database Status:"
@if [ -f "./data/photography.db" ]; then \
echo "Database exists"; \
echo "User count: $$(sqlite3 ./data/photography.db 'SELECT COUNT(*) FROM user;')"; \
echo "Category count: $$(sqlite3 ./data/photography.db 'SELECT COUNT(*) FROM category;')"; \
echo "Photo count: $$(sqlite3 ./data/photography.db 'SELECT COUNT(*) FROM photo;')"; \
else \
echo "Database not found"; \
fi
# 重置数据库
db-reset:
@echo "Resetting database..."
@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."
# 显示帮助
help:
@echo "Available commands:"
@echo " build - Build the application"
@echo " run - Run the application"
@echo " dev - Build and run in development mode"
@echo " quick - Quick start without building"
@echo " install - Install dependencies"
@echo " gen - Generate API code"
@echo " gen-model - Generate model code"
@echo " clean - Clean build artifacts"
@echo " lint - Run code linter"
@echo " fmt - Format code"
@echo " test - Run tests"
@echo " setup - Create necessary directories"
@echo " status - Check API status"
@echo " seed - Run seed data script"
@echo " test-seed - Test seed data integrity"
@echo " db-status - Check database status"
@echo " db-reset - Reset database"
@echo " deploy-prep - Prepare for deployment"
@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