14 KiB
14 KiB
平台搭建设计方案
一、技术选型确认
后端技术栈
- 语言:Go 1.21+ LTS
- Web框架:Gin
- ORM:GORM
- 数据库:MySQL 8.0
- 配置管理:Viper
- 日志:Zap
- JWT:golang-jwt/jwt
- 参数验证:go-playground/validator
- 实时通信:HTTP长轮询(暂不用WebSocket)
前端技术栈
- 框架:Vue 3.4+
- 构建工具:Vite
- 状态管理:Pinia
- HTTP客户端:Axios
- 管理后台UI:Element Plus
- 移动端UI:Vant
- 动画:Canvas 2D
部署环境
- 云服务:阿里云ECS(2核4G)
- Web服务器:Nginx
- 数据库:MySQL 8.0
- 容器化:Docker Compose(开发环境)
二、模块边界划分
后端模块
- api层:HTTP路由和控制器
- model层:数据模型定义
- service层:业务逻辑处理
- repository层:数据访问层
- middleware层:中间件(CORS、Auth、Logger、RateLimit)
- pkg层:工具包(JWT、密码、验证、响应)
- config层:配置管理
前端模块(3个独立项目)
- admin:管理后台
- screen:大屏幕展示
- mobile:移动端H5
三、文件清单与职责
后端文件结构
backend/
├── cmd/
│ └── server/
│ └── main.go # 程序入口,初始化配置、数据库、路由
├── internal/
│ ├── api/
│ │ ├── v1/
│ │ │ ├── auth.go # 认证相关接口
│ │ │ ├── activity.go # 活动管理接口
│ │ │ ├── checkin.go # 签到接口
│ │ │ ├── danmaku.go # 弹幕接口
│ │ │ ├── lottery.go # 抽奖接口
│ │ │ ├── moneygame.go # 数钱游戏接口
│ │ │ └── order.go # 订单接口
│ │ └── router.go # 路由配置
│ ├── model/
│ │ ├── user.go # 用户模型
│ │ ├── activity.go # 活动模型
│ │ ├── checkin.go # 签到模型
│ │ ├── danmaku.go # 弹幕模型
│ │ ├── lottery.go # 抽奖模型
│ │ ├── moneygame.go # 数钱游戏模型
│ │ └── order.go # 订单模型
│ ├── service/
│ │ ├── auth.go # 认证业务逻辑
│ │ ├── activity.go # 活动业务逻辑
│ │ ├── checkin.go # 签到业务逻辑
│ │ ├── danmaku.go # 弹幕业务逻辑
│ │ ├── lottery.go # 抽奖业务逻辑
│ │ ├── moneygame.go # 数钱游戏业务逻辑
│ │ └── order.go # 订单业务逻辑
│ ├── repository/
│ │ ├── user.go # 用户数据访问
│ │ ├── activity.go # 活动数据访问
│ │ ├── checkin.go # 签到数据访问
│ │ ├── danmaku.go # 弹幕数据访问
│ │ ├── lottery.go # 抽奖数据访问
│ │ ├── moneygame.go # 数钱游戏数据访问
│ │ └── order.go # 订单数据访问
│ ├── middleware/
│ │ ├── cors.go # 跨域中间件
│ │ ├── auth.go # 认证中间件
│ │ ├── logger.go # 日志中间件
│ │ └── rate_limit.go # 限流中间件
│ ├── pkg/
│ │ ├── jwt.go # JWT工具
│ │ ├── password.go # 密码加密工具
│ │ ├── validator.go # 参数验证工具
│ │ └── response.go # 统一响应格式
│ └── config/
│ └── config.go # 配置加载和管理
├── config/
│ ├── config.yaml # 开发环境配置
│ └── config.prod.yaml # 生产环境配置
├── scripts/
│ ├── build.sh # 构建脚本
│ └── deploy.sh # 部署脚本
├── go.mod
└── go.sum
前端文件结构(admin示例)
frontend/admin/
├── public/
│ └── favicon.ico
├── src/
│ ├── api/ # API接口定义
│ │ ├── auth.js
│ │ ├── activity.js
│ │ ├── checkin.js
│ │ ├── danmaku.js
│ │ ├── lottery.js
│ │ ├── moneygame.js
│ │ └── order.js
│ ├── assets/ # 静态资源
│ ├── components/ # 公共组件
│ ├── router/ # 路由配置
│ ├── stores/ # Pinia状态管理
│ ├── utils/ # 工具函数
│ ├── views/ # 页面视图
│ │ ├── auth/
│ │ ├── activity/
│ │ ├── checkin/
│ │ ├── lottery/
│ │ └── moneygame/
│ ├── App.vue
│ └── main.js
├── .env.development # 开发环境变量
├── .env.production # 生产环境变量
├── index.html
├── package.json
└── vite.config.js
四、核心数据结构定义
配置结构
type Config struct {
Server ServerConfig
Database DatabaseConfig
JWT JWTConfig
Log LogConfig
}
type ServerConfig struct {
Port string
Mode string // debug/release
}
type DatabaseConfig struct {
Host string
Port string
User string
Password string
DBName string
}
type JWTConfig struct {
Secret string
Expire int // hours
}
type LogConfig struct {
Level string
Output string
}
统一响应格式
type Response struct {
Code int `json:"code"`
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
}
五、核心接口定义
认证接口
POST /api/v1/auth/register- 用户注册POST /api/v1/auth/login- 用户登录
活动接口(需认证)
POST /api/v1/activity- 创建活动GET /api/v1/activity- 获取活动列表GET /api/v1/activity/:id- 获取活动详情PUT /api/v1/activity/:id- 更新活动DELETE /api/v1/activity/:id- 删除活动
签到接口
POST /api/v1/mobile/checkin- 扫码签到(公开)GET /api/v1/activity/:activityId/checkin- 获取签到列表(需认证)GET /api/v1/activity/:activityId/checkin/export- 导出签到列表(需认证)
弹幕接口
POST /api/v1/mobile/danmaku- 发送弹幕(公开)GET /api/v1/mobile/danmaku/:activityId- 获取弹幕列表(公开,长轮询)
抽奖接口
POST /api/v1/activity/:activityId/lottery- 创建抽奖(需认证)GET /api/v1/activity/:activityId/lottery- 获取抽奖列表(需认证)POST /api/v1/activity/:activityId/lottery/:id/draw- 执行抽奖(需认证)GET /api/v1/activity/:activityId/lottery/:id/winners- 获取中奖名单(需认证)
数钱游戏接口
POST /api/v1/activity/:activityId/moneygame- 创建游戏(需认证)GET /api/v1/activity/:activityId/moneygame- 获取游戏列表(需认证)POST /api/v1/activity/:activityId/moneygame/:id/start- 开始游戏(需认证)POST /api/v1/mobile/moneygame/:id/tap- 点击数钱(公开)GET /api/v1/activity/:activityId/moneygame/:id/rank- 获取排名(公开)
订单接口
POST /api/v1/order- 创建订单(需认证)GET /api/v1/order- 获取订单列表(需认证)POST /api/v1/order/:id/pay- 支付订单(需认证)
六、数据库表创建顺序
- users - 用户表(基础表)
- activities - 活动表(依赖users)
- checkins - 签到表(依赖activities)
- danmakus - 弹幕表(依赖activities)
- lotteries - 抽奖表(依赖activities)
- lottery_winners - 中奖记录表(依赖lotteries和checkins)
- money_games - 数钱游戏表(依赖activities)
- money_game_records - 游戏记录表(依赖money_games和checkins)
- orders - 订单表(依赖users和activities)
七、任务拆分
阶段1:后端项目初始化
- 创建backend目录
- 初始化Go模块(go mod init)
- 创建项目目录结构(cmd/internal/config/scripts)
- 安装依赖包(gin, gorm, viper, zap, jwt等)
- 创建配置文件(config.yaml和config.prod.yaml)
- 实现配置加载功能(internal/config/config.go)
- 实现日志初始化功能(使用Zap)
- 实现统一响应格式工具(internal/pkg/response.go)
- 实现JWT工具(internal/pkg/jwt.go)
- 实现密码加密工具(internal/pkg/password.go)
- 实现参数验证工具(internal/pkg/validator.go)
阶段2:数据库初始化
- 创建数据库(live_cloud)
- 实现数据库连接初始化(internal/config/config.go中添加InitDB函数)
- 创建用户模型(internal/model/user.go)
- 创建活动模型(internal/model/activity.go)
- 创建签到模型(internal/model/checkin.go)
- 创建弹幕模型(internal/model/danmaku.go)
- 创建抽奖模型(internal/model/lottery.go)
- 创建中奖记录模型(internal/model/lottery_winner.go)
- 创建数钱游戏模型(internal/model/moneygame.go)
- 创建游戏记录模型(internal/model/moneygame_record.go)
- 创建订单模型(internal/model/order.go)
- 实现数据库自动迁移(在main.go中调用AutoMigrate)
阶段3:中间件开发
- 实现CORS中间件(internal/middleware/cors.go)
- 实现认证中间件(internal/middleware/auth.go)
- 实现日志中间件(internal/middleware/logger.go)
- 实现限流中间件(internal/middleware/rate_limit.go)
阶段4:Repository层开发
- 实现用户Repository(internal/repository/user.go)
- 实现活动Repository(internal/repository/activity.go)
- 实现签到Repository(internal/repository/checkin.go)
- 实现弹幕Repository(internal/repository/danmaku.go)
- 实现抽奖Repository(internal/repository/lottery.go)
- 实现数钱游戏Repository(internal/repository/moneygame.go)
- 实现订单Repository(internal/repository/order.go)
阶段5:Service层开发
- 实现认证Service(internal/service/auth.go)
- 实现活动Service(internal/service/activity.go)
- 实现签到Service(internal/service/checkin.go)
- 实现弹幕Service(internal/service/danmaku.go)
- 实现抽奖Service(internal/service/lottery.go)
- 实现数钱游戏Service(internal/service/moneygame.go)
- 实现订单Service(internal/service/order.go)
阶段6:API层开发
- 实现路由配置(internal/api/router.go)
- 实现认证接口(internal/api/v1/auth.go)
- 实现活动接口(internal/api/v1/activity.go)
- 实现签到接口(internal/api/v1/checkin.go)
- 实现弹幕接口(internal/api/v1/danmaku.go)
- 实现抽奖接口(internal/api/v1/lottery.go)
- 实现数钱游戏接口(internal/api/v1/moneygame.go)
- 实现订单接口(internal/api/v1/order.go)
阶段7:主程序入口
- 实现main.go(cmd/server/main.go)
- 加载配置
- 初始化日志
- 初始化数据库
- 设置路由
- 启动HTTP服务器
阶段8:前端项目初始化(3个独立项目)
- 创建frontend目录
- 初始化admin项目(npm create vite@latest)
- 安装admin依赖(vue-router, pinia, axios, element-plus)
- 创建admin项目目录结构(src/api, src/components, src/router, src/stores, src/views, src/utils)
- 初始化screen项目(npm create vite@latest)
- 安装screen依赖(vue-router, pinia, axios)
- 创建screen项目目录结构
- 初始化mobile项目(npm create vite@latest)
- 安装mobile依赖(vue-router, pinia, axios, vant)
- 创建mobile项目目录结构
阶段9:前端基础配置
- 配置Vite(vite.config.js)
- 配置环境变量(.env.development和.env.production)
- 配置Axios(src/utils/request.js)
- 配置路由(src/router/index.js)
- 配置Pinia(src/stores/index.js)
- 配置Element Plus(admin项目)
- 配置Vant(mobile项目)
阶段10:Docker开发环境
- 创建docker-compose.yml
- 配置MySQL服务
- 创建启动脚本
阶段11:构建和部署脚本
- 创建后端构建脚本(scripts/build.sh)
- 创建后端部署脚本(scripts/deploy.sh)
- 配置前端打包(vite build)
八、配置文件模板
config.yaml(开发环境)
server:
port: "8080"
mode: "debug"
database:
host: "localhost"
port: "3306"
user: "root"
password: "123456"
dbname: "live_cloud"
jwt:
secret: "your-secret-key-change-in-production"
expire: 24
log:
level: "debug"
output: "stdout"
config.prod.yaml(生产环境)
server:
port: "8080"
mode: "release"
database:
host: "your-mysql-host"
port: "3306"
user: "your-mysql-user"
password: "your-mysql-password"
dbname: "live_cloud"
jwt:
secret: "your-production-secret-key"
expire: 24
log:
level: "info"
output: "file"
docker-compose.yml
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: live_cloud_mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: live_cloud
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
九、注意事项
- 编码规范:使用
gofmt格式化Go代码,使用ESLint和Prettier格式化前端代码 - 日志记录:在关键操作处添加日志记录,便于问题排查
- 错误处理:统一错误处理和响应格式
- 参数验证:所有输入参数都需要验证
- 安全防护:
- 密码使用BCrypt加密
- JWT Token有效期控制
- SQL注入防护(使用GORM参数化查询)
- XSS防护(前端输入过滤)
- 性能优化:
- 数据库查询使用索引
- 避免N+1查询
- 合理使用连接池
- 测试:后续需要添加单元测试和集成测试
记录时间:2026年1月31日 状态:待确认