Files
live_cloud/doc/thinking/platform_setup.md

14 KiB
Raw Permalink Blame History

平台搭建设计方案

一、技术选型确认

后端技术栈

  • 语言Go 1.21+ LTS
  • Web框架Gin
  • ORMGORM
  • 数据库MySQL 8.0
  • 配置管理Viper
  • 日志Zap
  • JWTgolang-jwt/jwt
  • 参数验证go-playground/validator
  • 实时通信HTTP长轮询暂不用WebSocket

前端技术栈

  • 框架Vue 3.4+
  • 构建工具Vite
  • 状态管理Pinia
  • HTTP客户端Axios
  • 管理后台UIElement Plus
  • 移动端UIVant
  • 动画Canvas 2D

部署环境

  • 云服务阿里云ECS2核4G
  • Web服务器Nginx
  • 数据库MySQL 8.0
  • 容器化Docker Compose开发环境

二、模块边界划分

后端模块

  1. api层HTTP路由和控制器
  2. model层:数据模型定义
  3. service层:业务逻辑处理
  4. repository层:数据访问层
  5. middleware层中间件CORS、Auth、Logger、RateLimit
  6. pkg层工具包JWT、密码、验证、响应
  7. config层:配置管理

前端模块3个独立项目

  1. admin:管理后台
  2. screen:大屏幕展示
  3. 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 - 支付订单(需认证)

六、数据库表创建顺序

  1. users - 用户表(基础表)
  2. activities - 活动表依赖users
  3. checkins - 签到表依赖activities
  4. danmakus - 弹幕表依赖activities
  5. lotteries - 抽奖表依赖activities
  6. lottery_winners - 中奖记录表依赖lotteries和checkins
  7. money_games - 数钱游戏表依赖activities
  8. money_game_records - 游戏记录表依赖money_games和checkins
  9. orders - 订单表依赖users和activities

七、任务拆分

阶段1后端项目初始化

  1. 创建backend目录
  2. 初始化Go模块go mod init
  3. 创建项目目录结构cmd/internal/config/scripts
  4. 安装依赖包gin, gorm, viper, zap, jwt等
  5. 创建配置文件config.yaml和config.prod.yaml
  6. 实现配置加载功能internal/config/config.go
  7. 实现日志初始化功能使用Zap
  8. 实现统一响应格式工具internal/pkg/response.go
  9. 实现JWT工具internal/pkg/jwt.go
  10. 实现密码加密工具internal/pkg/password.go
  11. 实现参数验证工具internal/pkg/validator.go

阶段2数据库初始化

  1. 创建数据库live_cloud
  2. 实现数据库连接初始化internal/config/config.go中添加InitDB函数
  3. 创建用户模型internal/model/user.go
  4. 创建活动模型internal/model/activity.go
  5. 创建签到模型internal/model/checkin.go
  6. 创建弹幕模型internal/model/danmaku.go
  7. 创建抽奖模型internal/model/lottery.go
  8. 创建中奖记录模型internal/model/lottery_winner.go
  9. 创建数钱游戏模型internal/model/moneygame.go
  10. 创建游戏记录模型internal/model/moneygame_record.go
  11. 创建订单模型internal/model/order.go
  12. 实现数据库自动迁移在main.go中调用AutoMigrate

阶段3中间件开发

  1. 实现CORS中间件internal/middleware/cors.go
  2. 实现认证中间件internal/middleware/auth.go
  3. 实现日志中间件internal/middleware/logger.go
  4. 实现限流中间件internal/middleware/rate_limit.go

阶段4Repository层开发

  1. 实现用户Repositoryinternal/repository/user.go
  2. 实现活动Repositoryinternal/repository/activity.go
  3. 实现签到Repositoryinternal/repository/checkin.go
  4. 实现弹幕Repositoryinternal/repository/danmaku.go
  5. 实现抽奖Repositoryinternal/repository/lottery.go
  6. 实现数钱游戏Repositoryinternal/repository/moneygame.go
  7. 实现订单Repositoryinternal/repository/order.go

阶段5Service层开发

  1. 实现认证Serviceinternal/service/auth.go
  2. 实现活动Serviceinternal/service/activity.go
  3. 实现签到Serviceinternal/service/checkin.go
  4. 实现弹幕Serviceinternal/service/danmaku.go
  5. 实现抽奖Serviceinternal/service/lottery.go
  6. 实现数钱游戏Serviceinternal/service/moneygame.go
  7. 实现订单Serviceinternal/service/order.go

阶段6API层开发

  1. 实现路由配置internal/api/router.go
  2. 实现认证接口internal/api/v1/auth.go
  3. 实现活动接口internal/api/v1/activity.go
  4. 实现签到接口internal/api/v1/checkin.go
  5. 实现弹幕接口internal/api/v1/danmaku.go
  6. 实现抽奖接口internal/api/v1/lottery.go
  7. 实现数钱游戏接口internal/api/v1/moneygame.go
  8. 实现订单接口internal/api/v1/order.go

阶段7主程序入口

  1. 实现main.gocmd/server/main.go
  2. 加载配置
  3. 初始化日志
  4. 初始化数据库
  5. 设置路由
  6. 启动HTTP服务器

阶段8前端项目初始化3个独立项目

  1. 创建frontend目录
  2. 初始化admin项目npm create vite@latest
  3. 安装admin依赖vue-router, pinia, axios, element-plus
  4. 创建admin项目目录结构src/api, src/components, src/router, src/stores, src/views, src/utils
  5. 初始化screen项目npm create vite@latest
  6. 安装screen依赖vue-router, pinia, axios
  7. 创建screen项目目录结构
  8. 初始化mobile项目npm create vite@latest
  9. 安装mobile依赖vue-router, pinia, axios, vant
  10. 创建mobile项目目录结构

阶段9前端基础配置

  1. 配置Vitevite.config.js
  2. 配置环境变量(.env.development和.env.production
  3. 配置Axiossrc/utils/request.js
  4. 配置路由src/router/index.js
  5. 配置Piniasrc/stores/index.js
  6. 配置Element Plusadmin项目
  7. 配置Vantmobile项目

阶段10Docker开发环境

  1. 创建docker-compose.yml
  2. 配置MySQL服务
  3. 创建启动脚本

阶段11构建和部署脚本

  1. 创建后端构建脚本scripts/build.sh
  2. 创建后端部署脚本scripts/deploy.sh
  3. 配置前端打包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:

九、注意事项

  1. 编码规范:使用gofmt格式化Go代码使用ESLint和Prettier格式化前端代码
  2. 日志记录:在关键操作处添加日志记录,便于问题排查
  3. 错误处理:统一错误处理和响应格式
  4. 参数验证:所有输入参数都需要验证
  5. 安全防护
    • 密码使用BCrypt加密
    • JWT Token有效期控制
    • SQL注入防护使用GORM参数化查询
    • XSS防护前端输入过滤
  6. 性能优化
    • 数据库查询使用索引
    • 避免N+1查询
    • 合理使用连接池
  7. 测试:后续需要添加单元测试和集成测试

记录时间2026年1月31日 状态:待确认