feat: 实现后端和管理后台基础架构
## 后端架构 (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/
This commit is contained in:
174
backend/Makefile
Normal file
174
backend/Makefile
Normal file
@ -0,0 +1,174 @@
|
||||
.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"
|
||||
Reference in New Issue
Block a user