# 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