## 后端架构 (Go + Gin + GORM) - ✅ 完整的分层架构 (API/Service/Repository) - ✅ PostgreSQL数据库设计和迁移脚本 - ✅ JWT认证系统和权限控制 - ✅ 用户、照片、分类、标签等核心模型 - ✅ 中间件系统 (认证、CORS、日志) - ✅ 配置管理和环境变量支持 - ✅ 结构化日志和错误处理 - ✅ Makefile构建和部署脚本 ## 管理后台架构 (React + TypeScript) - ✅ Vite + React 18 + TypeScript现代化架构 - ✅ 路由系统和状态管理 (Zustand + TanStack Query) - ✅ 基于Radix UI的组件库基础 - ✅ 认证流程和权限控制 - ✅ 响应式设计和主题系统 ## 数据库设计 - ✅ 用户表 (角色权限、认证信息) - ✅ 照片表 (元数据、EXIF、状态管理) - ✅ 分类表 (层级结构、封面图片) - ✅ 标签表 (使用统计、标签云) - ✅ 关联表 (照片-标签多对多) ## 技术特点 - 🚀 高性能: Gin框架 + GORM ORM - 🔐 安全: JWT认证 + 密码加密 + 权限控制 - 📊 监控: 结构化日志 + 健康检查 - 🎨 现代化: React 18 + TypeScript + Vite - 📱 响应式: Tailwind CSS + Radix UI 参考文档: docs/development/saved-docs/
174 lines
4.4 KiB
Makefile
174 lines
4.4 KiB
Makefile
.PHONY: build run test clean install dev docker-build docker-run docker-stop migrate
|
|
|
|
# 应用配置
|
|
APP_NAME := photography-backend
|
|
VERSION := 1.0.0
|
|
BUILD_TIME := $(shell date +%Y%m%d_%H%M%S)
|
|
LDFLAGS := -X main.Version=$(VERSION) -X main.BuildTime=$(BUILD_TIME)
|
|
|
|
# 构建相关
|
|
BUILD_DIR := bin
|
|
MAIN_FILE := cmd/server/main.go
|
|
|
|
# 数据库配置
|
|
DB_URL := postgres://postgres:password@localhost:5432/photography?sslmode=disable
|
|
MIGRATION_DIR := migrations
|
|
|
|
# 安装依赖
|
|
install:
|
|
@echo "Installing dependencies..."
|
|
go mod download
|
|
go mod tidy
|
|
|
|
# 构建应用
|
|
build:
|
|
@echo "Building $(APP_NAME)..."
|
|
mkdir -p $(BUILD_DIR)
|
|
CGO_ENABLED=0 go build -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME) $(MAIN_FILE)
|
|
|
|
# 运行应用
|
|
run:
|
|
@echo "Running $(APP_NAME)..."
|
|
go run $(MAIN_FILE)
|
|
|
|
# 开发模式运行
|
|
dev:
|
|
@echo "Running in development mode..."
|
|
air -c .air.toml || go run $(MAIN_FILE)
|
|
|
|
# 运行测试
|
|
test:
|
|
@echo "Running tests..."
|
|
go test -v ./...
|
|
|
|
# 运行测试(带覆盖率)
|
|
test-coverage:
|
|
@echo "Running tests with coverage..."
|
|
go test -v -coverprofile=coverage.out ./...
|
|
go tool cover -html=coverage.out -o coverage.html
|
|
|
|
# 代码检查
|
|
lint:
|
|
@echo "Running linter..."
|
|
golangci-lint run
|
|
|
|
# 格式化代码
|
|
fmt:
|
|
@echo "Formatting code..."
|
|
go fmt ./...
|
|
|
|
# 清理构建文件
|
|
clean:
|
|
@echo "Cleaning build files..."
|
|
rm -rf $(BUILD_DIR)
|
|
rm -f coverage.out coverage.html
|
|
|
|
# 数据库迁移
|
|
migrate-up:
|
|
@echo "Running database migrations..."
|
|
migrate -path $(MIGRATION_DIR) -database "$(DB_URL)" up
|
|
|
|
migrate-down:
|
|
@echo "Rolling back database migrations..."
|
|
migrate -path $(MIGRATION_DIR) -database "$(DB_URL)" down
|
|
|
|
migrate-force:
|
|
@echo "Forcing migration version..."
|
|
migrate -path $(MIGRATION_DIR) -database "$(DB_URL)" force $(VERSION)
|
|
|
|
# 创建新的迁移文件
|
|
migrate-create:
|
|
@echo "Creating new migration: $(NAME)"
|
|
migrate create -ext sql -dir $(MIGRATION_DIR) -seq $(NAME)
|
|
|
|
# Docker 相关
|
|
docker-build:
|
|
@echo "Building Docker image..."
|
|
docker build -t $(APP_NAME):$(VERSION) .
|
|
docker tag $(APP_NAME):$(VERSION) $(APP_NAME):latest
|
|
|
|
docker-run:
|
|
@echo "Running Docker container..."
|
|
docker-compose up -d
|
|
|
|
docker-stop:
|
|
@echo "Stopping Docker containers..."
|
|
docker-compose down
|
|
|
|
docker-logs:
|
|
@echo "Showing Docker logs..."
|
|
docker-compose logs -f
|
|
|
|
# 开发环境
|
|
dev-up:
|
|
@echo "Starting development environment..."
|
|
docker-compose -f docker-compose.dev.yml up -d
|
|
|
|
dev-down:
|
|
@echo "Stopping development environment..."
|
|
docker-compose -f docker-compose.dev.yml down
|
|
|
|
# 生产环境
|
|
prod-up:
|
|
@echo "Starting production environment..."
|
|
docker-compose -f docker-compose.prod.yml up -d
|
|
|
|
prod-down:
|
|
@echo "Stopping production environment..."
|
|
docker-compose -f docker-compose.prod.yml down
|
|
|
|
# 数据库备份
|
|
backup-db:
|
|
@echo "Backing up database..."
|
|
docker exec photography-postgres pg_dump -U postgres photography > backup_$(shell date +%Y%m%d_%H%M%S).sql
|
|
|
|
# 工具安装
|
|
install-tools:
|
|
@echo "Installing development tools..."
|
|
go install github.com/cosmtrek/air@latest
|
|
go install github.com/golang-migrate/migrate/v4/cmd/migrate@latest
|
|
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
|
|
|
# 初始化项目
|
|
init: install-tools install
|
|
@echo "Initializing project..."
|
|
mkdir -p logs uploads
|
|
|
|
# 检查依赖更新
|
|
mod-update:
|
|
@echo "Checking for module updates..."
|
|
go list -u -m all
|
|
|
|
# 生成 API 文档
|
|
docs:
|
|
@echo "Generating API documentation..."
|
|
swag init -g cmd/server/main.go -o docs/swagger
|
|
|
|
# 全面检查
|
|
check: fmt lint test
|
|
@echo "All checks passed!"
|
|
|
|
# 构建发布版本
|
|
release: clean build
|
|
@echo "Building release version..."
|
|
tar -czf $(BUILD_DIR)/$(APP_NAME)-$(VERSION)-$(BUILD_TIME).tar.gz -C $(BUILD_DIR) $(APP_NAME)
|
|
|
|
# 帮助信息
|
|
help:
|
|
@echo "Available commands:"
|
|
@echo " install - Install dependencies"
|
|
@echo " build - Build the application"
|
|
@echo " run - Run the application"
|
|
@echo " dev - Run in development mode"
|
|
@echo " test - Run tests"
|
|
@echo " lint - Run linter"
|
|
@echo " fmt - Format code"
|
|
@echo " clean - Clean build files"
|
|
@echo " migrate-up - Run database migrations"
|
|
@echo " migrate-down - Rollback database migrations"
|
|
@echo " docker-build - Build Docker image"
|
|
@echo " docker-run - Run Docker container"
|
|
@echo " docker-stop - Stop Docker containers"
|
|
@echo " dev-up - Start development environment"
|
|
@echo " prod-up - Start production environment"
|
|
@echo " help - Show this help message"
|