Files
ai_dianshang/README.md
2025-11-17 13:32:54 +08:00

1511 lines
45 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 电商微信小程序
数据库mysql 127.0.0.1:3306 root JKjk20011115 ai_dianshang
redis 127.0.0.1:6379
## 项目概述
本项目是一个功能完整的电商微信小程序,提供商品展示、购物车、订单管理、用户管理等核心电商功能。
## 项目结构
```
dianshang/
├── server/ # 后端服务
│ ├── cmd/ # 命令行工具
│ │ ├── migrate/ # 数据库迁移工具
│ │ └── server/ # 服务启动入口
│ ├── configs/ # 配置文件
│ ├── internal/ # 内部代码
│ │ ├── config/ # 配置管理
│ │ ├── handler/ # HTTP处理器
│ │ ├── middleware/ # 中间件
│ │ ├── model/ # 数据模型
│ │ ├── repository/ # 数据访问层
│ │ ├── router/ # 路由配置
│ │ ├── service/ # 业务逻辑层
│ │ └── utils/ # 工具函数
│ ├── migrations/ # 数据库迁移文件
│ ├── go.mod # Go模块文件
│ └── go.sum # Go依赖锁定文件
└── README.md # 项目说明文档
```
## 技术栈
### 后端技术栈
- **后端框架**: Gin
- **数据库**: MySQL 8.0+
- **缓存**: Redis
- **ORM**: GORM
- **配置管理**: Viper
- **日志**: Logrus + Lumberjack
- **JWT**: golang-jwt/jwt
- **密码加密**: bcrypt
## 环境要求
- Go 1.21+
- MySQL 8.0+
- Redis 6.0+
## 快速开始
### 1. 克隆项目
```bash
git clone <repository-url>
cd dianshang
```
### 2. 安装依赖
```bash
cd server
go mod download
```
### 3. 配置数据库
创建 MySQL 数据库:
```sql
CREATE DATABASE dianshang CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
### 4. 配置文件
修改 `server/configs/config.yaml` 中的数据库和Redis连接信息
```yaml
server:
port: 8080
mode: debug
database:
driver: mysql
host: localhost
port: 3306
username: root
password: your_password
dbname: dianshang
charset: utf8mb4
parseTime: true
loc: Local
redis:
host: localhost
port: 6379
password: ""
db: 0
jwt:
secret: your_jwt_secret_key
expire: 168h
log:
level: info
filename: logs/app.log
maxSize: 100
maxAge: 30
maxBackups: 5
wechat:
appId: your_wechat_app_id
appSecret: your_wechat_app_secret
```
### 5. 数据库迁移
运行数据库迁移:
```bash
# 仅迁移表结构
go run cmd/migrate/main.go
# 迁移表结构并初始化示例数据
go run cmd/migrate/main.go --seed
```
或者直接执行SQL文件
```bash
mysql -u root -p dianshang < migrations/init.sql
```
### 6. 启动服务
```bash
go run cmd/server/main.go
```
服务将在 `http://localhost:8080` 启动。
## API 文档
### 用户相关接口
#### 用户登录
```
POST /api/users/login
Content-Type: application/json
{
"code": "微信登录code"
}
```
#### 获取用户信息
```
GET /api/users/profile
Authorization: Bearer <token>
```
#### 更新用户信息
```
PUT /api/users/profile
Authorization: Bearer <token>
Content-Type: application/json
{
"nickname": "昵称",
"avatar": "头像URL",
"gender": 1,
"phone": "手机号",
"email": "邮箱"
}
```
#### 地址管理
```
GET /api/users/addresses # 获取地址列表
POST /api/users/addresses # 创建地址
PUT /api/users/addresses/:id # 更新地址
DELETE /api/users/addresses/:id # 删除地址
PUT /api/users/addresses/:id/default # 设置默认地址
```
### 商品相关接口
#### 获取商品列表
```
GET /api/products?page=1&limit=10&category_id=1&keyword=搜索关键词&min_price=100&max_price=1000
```
#### 获取商品详情
```
GET /api/products/:id
```
#### 获取商品分类
```
GET /api/products/categories
```
#### 商品搜索
```
GET /api/products/search?keyword=关键词&page=1&limit=10
```
#### 热门商品
```
GET /api/products/hot
```
#### 推荐商品
```
GET /api/products/recommend
```
#### 商品评价
```
GET /api/products/:id/reviews # 获取商品评价
POST /api/products/:id/reviews # 创建评价
```
### 购物车相关接口
#### 获取购物车
```
GET /api/cart
Authorization: Bearer <token>
```
#### 添加商品到购物车
```
POST /api/cart
Authorization: Bearer <token>
Content-Type: application/json
{
"product_id": 1,
"quantity": 2
}
```
#### 更新购物车商品
```
PUT /api/cart/:id
Authorization: Bearer <token>
Content-Type: application/json
{
"quantity": 3
}
```
#### 删除购物车商品
```
DELETE /api/cart/:id
Authorization: Bearer <token>
```
#### 清空购物车
```
DELETE /api/cart
Authorization: Bearer <token>
```
#### 获取购物车数量
```
GET /api/cart/count
Authorization: Bearer <token>
```
### 订单相关接口
#### 创建订单
```
POST /api/orders
Authorization: Bearer <token>
Content-Type: application/json
{
"address_id": 1,
"items": [
{
"product_id": 1,
"quantity": 2
}
],
"remark": "备注"
}
```
#### 获取订单列表
```
GET /api/orders?page=1&limit=10&status=1
Authorization: Bearer <token>
```
#### 获取订单详情
```
GET /api/orders/:id
Authorization: Bearer <token>
```
#### 支付订单
```
POST /api/orders/:id/pay
Authorization: Bearer <token>
Content-Type: application/json
{
"payment_method": 1
}
```
#### 取消订单
```
POST /api/orders/:id/cancel
Authorization: Bearer <token>
```
#### 确认收货
```
POST /api/orders/:id/receive
Authorization: Bearer <token>
```
### 管理后台接口
#### 用户管理
```
GET /api/admin/users # 获取用户列表
GET /api/admin/users/:id # 获取用户详情
PUT /api/admin/users/:id/status # 更新用户状态
```
#### 商品管理
```
GET /api/admin/products # 获取商品列表
POST /api/admin/products # 创建商品
PUT /api/admin/products/:id # 更新商品
DELETE /api/admin/products/:id # 删除商品
```
#### 分类管理
```
GET /api/admin/categories # 获取分类列表
POST /api/admin/categories # 创建分类
PUT /api/admin/categories/:id # 更新分类
DELETE /api/admin/categories/:id # 删除分类
```
#### 订单管理
```
GET /api/admin/orders # 获取订单列表
GET /api/admin/orders/:id # 获取订单详情
POST /api/admin/orders/:id/ship # 发货
```
#### 数据统计
```
GET /api/admin/statistics # 获取统计数据
GET /api/admin/statistics/daily # 获取每日统计
```
## 部署说明
### Docker 部署
1. 创建 Dockerfile
```dockerfile
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o main cmd/server/main.go
FROM alpine:latest
RUN apk --no-cache add ca-certificates tzdata
WORKDIR /root/
COPY --from=builder /app/main .
COPY --from=builder /app/configs ./configs
EXPOSE 8080
CMD ["./main"]
```
2. 构建镜像:
```bash
cd server
docker build -t dianshang-server .
```
3. 运行容器:
```bash
docker run -d \
--name dianshang-server \
-p 8080:8080 \
-v $(pwd)/configs:/root/configs \
-v $(pwd)/logs:/root/logs \
dianshang-server
```
### 生产环境部署
1. 编译二进制文件:
```bash
cd server
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o dianshang cmd/server/main.go
```
2. 上传到服务器并运行:
```bash
# 上传文件
scp dianshang user@server:/path/to/app/
scp -r configs user@server:/path/to/app/
# 在服务器上运行
chmod +x dianshang
./dianshang
```
3. 使用 systemd 管理服务:
创建 `/etc/systemd/system/dianshang.service`
```ini
[Unit]
Description=Dianshang Server
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/path/to/app
ExecStart=/path/to/app/dianshang
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
```
启动服务:
```bash
sudo systemctl daemon-reload
sudo systemctl enable dianshang
sudo systemctl start dianshang
```
### Nginx 反向代理
配置 Nginx
```nginx
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
## 开发指南
### 代码规范
- 使用 `gofmt` 格式化代码
- 遵循 Go 官方编码规范
- 使用有意义的变量和函数名
- 添加必要的注释
### 测试
运行测试:
```bash
go test ./...
```
### 日志
日志文件位置:`logs/app.log`
日志级别:
- `debug`: 调试信息
- `info`: 一般信息
- `warn`: 警告信息
- `error`: 错误信息
## 常见问题
### 1. 数据库连接失败
检查数据库配置是否正确,确保 MySQL 服务正在运行。
### 2. Redis 连接失败
检查 Redis 配置是否正确,确保 Redis 服务正在运行。
### 3. JWT Token 验证失败
检查 JWT 密钥配置是否正确,确保客户端正确传递 Authorization 头。
## 贡献指南
1. Fork 项目
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 打开 Pull Request
## 许可证
本项目采用 MIT 许可证。详情请参阅 [LICENSE](LICENSE) 文件。
## 业务需求
### 1. 用户管理
- **用户注册/登录**: 支持微信授权登录
- **用户信息管理**: 个人资料、收货地址管理
- **用户等级**: 普通用户、VIP用户等级体系
- **积分系统**: 购物积分、积分兑换
### 2. 商品管理
- **商品分类**: 多级分类展示
- **商品详情**: 商品图片、描述、规格、价格
- **商品搜索**: 关键词搜索、分类筛选
- **商品收藏**: 用户收藏商品功能
- **商品评价**: 用户评价和评分系统
### 3. 购物车功能
- **添加商品**: 选择规格、数量添加到购物车
- **购物车管理**: 修改数量、删除商品
- **批量操作**: 全选、批量删除
### 4. 订单管理
- **下单流程**: 选择地址、支付方式、确认订单
- **订单状态**: 待支付、待发货、待收货、已完成、已取消
- **订单详情**: 查看订单信息、物流跟踪
- **退款/退货**: 申请退款退货流程
### 5. 支付功能
- **微信支付**: 集成微信支付API
- **支付状态**: 支付成功/失败处理
- **退款处理**: 自动/手动退款
### 6. 营销功能
- **优惠券**: 满减券、折扣券
- **秒杀活动**: 限时抢购
- **拼团**: 多人拼团优惠
- **推荐系统**: 个性化商品推荐
### 7. 管理后台
- **商品管理**: 商品增删改查、库存管理
- **订单管理**: 订单处理、发货管理
- **用户管理**: 用户信息查看、权限管理
- **数据统计**: 销售数据、用户数据分析
## 数据表结构
### 用户相关表
#### users (用户表)
```sql
CREATE TABLE `users` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`openid` VARCHAR(100) NOT NULL COMMENT '微信openid',
`unionid` VARCHAR(100) DEFAULT NULL COMMENT '微信unionid',
`nickname` VARCHAR(50) DEFAULT NULL COMMENT '昵称',
`avatar_url` VARCHAR(255) DEFAULT NULL COMMENT '头像URL',
`gender` TINYINT UNSIGNED DEFAULT 0 COMMENT '性别 0-未知 1-男 2-女',
`phone` VARCHAR(20) DEFAULT NULL COMMENT '手机号',
`email` VARCHAR(100) DEFAULT NULL COMMENT '邮箱',
`birthday` DATE DEFAULT NULL COMMENT '生日',
`level` TINYINT UNSIGNED DEFAULT 1 COMMENT '用户等级',
`points` INT UNSIGNED DEFAULT 0 COMMENT '积分',
`status` TINYINT UNSIGNED DEFAULT 1 COMMENT '状态 0-禁用 1-正常',
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`deleted_at` DATETIME(3) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_users_openid` (`openid`),
KEY `idx_users_deleted_at` (`deleted_at`),
KEY `idx_users_phone` (`phone`),
KEY `idx_users_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
```
#### user_addresses (用户地址表)
```sql
CREATE TABLE `user_addresses` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` BIGINT UNSIGNED NOT NULL,
`name` VARCHAR(50) NOT NULL COMMENT '收货人姓名',
`phone` VARCHAR(20) NOT NULL COMMENT '收货人电话',
`province` VARCHAR(50) NOT NULL COMMENT '省份',
`city` VARCHAR(50) NOT NULL COMMENT '城市',
`district` VARCHAR(50) NOT NULL COMMENT '区县',
`detail` VARCHAR(255) NOT NULL COMMENT '详细地址',
`is_default` TINYINT UNSIGNED DEFAULT 0 COMMENT '是否默认地址',
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`deleted_at` DATETIME(3) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_user_addresses_user_id` (`user_id`),
KEY `idx_user_addresses_deleted_at` (`deleted_at`),
KEY `idx_user_addresses_is_default` (`is_default`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户地址表';
```
### 商品相关表
#### categories (商品分类表)
```sql
CREATE TABLE `categories` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL COMMENT '分类名称',
`parent_id` BIGINT UNSIGNED DEFAULT 0 COMMENT '父分类ID',
`level` TINYINT UNSIGNED DEFAULT 1 COMMENT '分类级别',
`sort_order` INT DEFAULT 0 COMMENT '排序',
`icon` VARCHAR(255) DEFAULT NULL COMMENT '分类图标',
`status` TINYINT UNSIGNED DEFAULT 1 COMMENT '状态 0-禁用 1-启用',
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`deleted_at` DATETIME(3) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_categories_parent_id` (`parent_id`),
KEY `idx_categories_status` (`status`),
KEY `idx_categories_sort_order` (`sort_order`),
KEY `idx_categories_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品分类表';
```
#### products (商品表)
```sql
CREATE TABLE `products` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL COMMENT '商品名称',
`category_id` BIGINT UNSIGNED NOT NULL COMMENT '分类ID',
`brand` VARCHAR(100) DEFAULT NULL COMMENT '品牌',
`description` TEXT COMMENT '商品描述',
`main_image` VARCHAR(255) DEFAULT NULL COMMENT '主图',
`price` DECIMAL(10,2) NOT NULL COMMENT '价格',
`original_price` DECIMAL(10,2) DEFAULT NULL COMMENT '原价',
`stock` INT UNSIGNED DEFAULT 0 COMMENT '库存',
`sales` INT UNSIGNED DEFAULT 0 COMMENT '销量',
`status` TINYINT UNSIGNED DEFAULT 1 COMMENT '状态 0-下架 1-上架',
`sort_order` INT DEFAULT 0 COMMENT '排序',
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`deleted_at` DATETIME(3) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_products_category_id` (`category_id`),
KEY `idx_products_status` (`status`),
KEY `idx_products_sort_order` (`sort_order`),
KEY `idx_products_deleted_at` (`deleted_at`),
KEY `idx_products_price` (`price`),
KEY `idx_products_sales` (`sales`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品表';
```
#### product_images (商品图片表)
```sql
CREATE TABLE `product_images` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`product_id` BIGINT UNSIGNED NOT NULL,
`image_url` VARCHAR(255) NOT NULL COMMENT '图片URL',
`sort_order` INT DEFAULT 0 COMMENT '排序',
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`deleted_at` DATETIME(3) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_product_images_product_id` (`product_id`),
KEY `idx_product_images_sort_order` (`sort_order`),
KEY `idx_product_images_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品图片表';
```
#### product_specs (商品规格表)
```sql
CREATE TABLE `product_specs` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`product_id` BIGINT UNSIGNED NOT NULL,
`spec_name` VARCHAR(50) NOT NULL COMMENT '规格名称',
`spec_value` VARCHAR(100) NOT NULL COMMENT '规格值',
`price` DECIMAL(10,2) DEFAULT NULL COMMENT '规格价格',
`stock` INT UNSIGNED DEFAULT 0 COMMENT '规格库存',
`sku_code` VARCHAR(100) DEFAULT NULL COMMENT 'SKU编码',
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`deleted_at` DATETIME(3) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_product_specs_product_id` (`product_id`),
KEY `idx_product_specs_sku_code` (`sku_code`),
KEY `idx_product_specs_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品规格表';
```
### 购物车和订单相关表
#### carts (购物车表)
```sql
CREATE TABLE `carts` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` BIGINT UNSIGNED NOT NULL,
`product_id` BIGINT UNSIGNED NOT NULL,
`spec_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '规格ID',
`quantity` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '数量',
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`deleted_at` DATETIME(3) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_carts_user_id` (`user_id`),
KEY `idx_carts_product_id` (`product_id`),
KEY `idx_carts_spec_id` (`spec_id`),
KEY `idx_carts_deleted_at` (`deleted_at`),
UNIQUE KEY `uk_carts_user_product_spec` (`user_id`, `product_id`, `spec_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='购物车表';
```
#### orders (订单表)
```sql
CREATE TABLE `orders` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`order_no` VARCHAR(50) NOT NULL COMMENT '订单号',
`user_id` BIGINT UNSIGNED NOT NULL,
`total_amount` DECIMAL(10,2) NOT NULL COMMENT '订单总金额',
`discount_amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '优惠金额',
`shipping_fee` DECIMAL(10,2) DEFAULT 0.00 COMMENT '运费',
`actual_amount` DECIMAL(10,2) NOT NULL COMMENT '实付金额',
`status` TINYINT UNSIGNED DEFAULT 1 COMMENT '订单状态 1-待支付 2-待发货 3-待收货 4-已完成 5-已取消',
`payment_method` TINYINT UNSIGNED DEFAULT NULL COMMENT '支付方式 1-微信支付',
`payment_status` TINYINT UNSIGNED DEFAULT 0 COMMENT '支付状态 0-未支付 1-已支付',
`shipping_name` VARCHAR(50) DEFAULT NULL COMMENT '收货人姓名',
`shipping_phone` VARCHAR(20) DEFAULT NULL COMMENT '收货人电话',
`shipping_address` VARCHAR(500) DEFAULT NULL COMMENT '收货地址',
`remark` TEXT COMMENT '订单备注',
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`deleted_at` DATETIME(3) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_orders_order_no` (`order_no`),
KEY `idx_orders_user_id` (`user_id`),
KEY `idx_orders_status` (`status`),
KEY `idx_orders_payment_status` (`payment_status`),
KEY `idx_orders_created_at` (`created_at`),
KEY `idx_orders_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单表';
```
#### order_items (订单商品表)
```sql
CREATE TABLE `order_items` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`order_id` BIGINT UNSIGNED NOT NULL,
`product_id` BIGINT UNSIGNED NOT NULL,
`spec_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '规格ID',
`product_name` VARCHAR(255) NOT NULL COMMENT '商品名称',
`spec_name` VARCHAR(100) DEFAULT NULL COMMENT '规格名称',
`price` DECIMAL(10,2) NOT NULL COMMENT '商品价格',
`quantity` INT UNSIGNED NOT NULL COMMENT '购买数量',
`total_amount` DECIMAL(10,2) NOT NULL COMMENT '小计金额',
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`deleted_at` DATETIME(3) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_order_items_order_id` (`order_id`),
KEY `idx_order_items_product_id` (`product_id`),
KEY `idx_order_items_spec_id` (`spec_id`),
KEY `idx_order_items_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单商品表';
```
### 营销相关表
#### coupons (优惠券表)
```sql
CREATE TABLE coupons (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL COMMENT '优惠券名称',
type TINYINT NOT NULL COMMENT '类型 1-满减券 2-折扣券',
value DECIMAL(10,2) NOT NULL COMMENT '优惠值',
min_amount DECIMAL(10,2) DEFAULT 0 COMMENT '最低消费金额',
total_count INT NOT NULL COMMENT '发放总数',
used_count INT DEFAULT 0 COMMENT '已使用数量',
start_time TIMESTAMP NOT NULL COMMENT '开始时间',
end_time TIMESTAMP NOT NULL COMMENT '结束时间',
status TINYINT DEFAULT 1 COMMENT '状态 0-禁用 1-启用',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
```
#### user_coupons (用户优惠券表)
```sql
CREATE TABLE user_coupons (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
coupon_id INT NOT NULL,
status TINYINT DEFAULT 0 COMMENT '状态 0-未使用 1-已使用 2-已过期',
used_at TIMESTAMP NULL COMMENT '使用时间',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (coupon_id) REFERENCES coupons(id)
);
```
### 评价相关表
#### product_reviews (商品评价表)
```sql
CREATE TABLE product_reviews (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
product_id INT NOT NULL,
order_id INT NOT NULL,
rating TINYINT NOT NULL COMMENT '评分 1-5星',
content TEXT COMMENT '评价内容',
images VARCHAR(1000) COMMENT '评价图片JSON格式',
is_anonymous TINYINT DEFAULT 0 COMMENT '是否匿名评价',
reply_content TEXT COMMENT '商家回复',
reply_time TIMESTAMP NULL COMMENT '回复时间',
status TINYINT DEFAULT 1 COMMENT '状态 0-隐藏 1-显示',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (product_id) REFERENCES products(id),
FOREIGN KEY (order_id) REFERENCES orders(id)
);
```
### 公共业务表
#### system_logs (系统日志表)
```sql
CREATE TABLE system_logs (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id INT COMMENT '用户ID',
module VARCHAR(50) NOT NULL COMMENT '模块名称',
action VARCHAR(50) NOT NULL COMMENT '操作类型',
method VARCHAR(10) COMMENT '请求方法',
url VARCHAR(500) COMMENT '请求URL',
ip VARCHAR(50) COMMENT 'IP地址',
user_agent VARCHAR(500) COMMENT '用户代理',
request_data TEXT COMMENT '请求参数',
response_data TEXT COMMENT '响应数据',
status_code INT COMMENT '状态码',
execution_time INT COMMENT '执行时间(毫秒)',
error_message TEXT COMMENT '错误信息',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user_id (user_id),
INDEX idx_module_action (module, action),
INDEX idx_created_at (created_at)
);
```
#### system_configs (系统配置表)
```sql
CREATE TABLE system_configs (
id INT PRIMARY KEY AUTO_INCREMENT,
config_key VARCHAR(100) UNIQUE NOT NULL COMMENT '配置键',
config_value TEXT COMMENT '配置值',
config_type VARCHAR(20) DEFAULT 'string' COMMENT '配置类型',
description VARCHAR(255) COMMENT '配置描述',
is_public TINYINT DEFAULT 0 COMMENT '是否公开配置',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
```
#### notifications (通知消息表)
```sql
CREATE TABLE notifications (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT COMMENT '用户ID为空表示系统通知',
type VARCHAR(50) NOT NULL COMMENT '通知类型',
title VARCHAR(255) NOT NULL COMMENT '通知标题',
content TEXT NOT NULL COMMENT '通知内容',
data JSON COMMENT '附加数据',
is_read TINYINT DEFAULT 0 COMMENT '是否已读',
read_at TIMESTAMP NULL COMMENT '阅读时间',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
INDEX idx_user_read (user_id, is_read),
INDEX idx_created_at (created_at)
);
```
#### file_uploads (文件上传记录表)
```sql
CREATE TABLE file_uploads (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT COMMENT '上传用户ID',
original_name VARCHAR(255) NOT NULL COMMENT '原始文件名',
file_name VARCHAR(255) NOT NULL COMMENT '存储文件名',
file_path VARCHAR(500) NOT NULL COMMENT '文件路径',
file_size BIGINT NOT NULL COMMENT '文件大小(字节)',
mime_type VARCHAR(100) COMMENT '文件类型',
file_hash VARCHAR(64) COMMENT '文件哈希值',
usage_type VARCHAR(50) COMMENT '使用类型',
status TINYINT DEFAULT 1 COMMENT '状态 0-删除 1-正常',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
INDEX idx_file_hash (file_hash),
INDEX idx_usage_type (usage_type)
);
```
#### admin_users (管理员用户表)
```sql
CREATE TABLE admin_users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL COMMENT '用户名',
password VARCHAR(255) NOT NULL COMMENT '密码',
real_name VARCHAR(50) COMMENT '真实姓名',
email VARCHAR(100) COMMENT '邮箱',
phone VARCHAR(20) COMMENT '手机号',
avatar VARCHAR(255) COMMENT '头像',
role_id INT COMMENT '角色ID',
last_login_at TIMESTAMP NULL COMMENT '最后登录时间',
last_login_ip VARCHAR(50) COMMENT '最后登录IP',
status TINYINT DEFAULT 1 COMMENT '状态 0-禁用 1-正常',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
```
#### admin_roles (管理员角色表)
```sql
CREATE TABLE admin_roles (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL COMMENT '角色名称',
description VARCHAR(255) COMMENT '角色描述',
permissions JSON COMMENT '权限列表',
status TINYINT DEFAULT 1 COMMENT '状态 0-禁用 1-启用',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
```
#### operation_logs (操作日志表)
```sql
CREATE TABLE operation_logs (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
admin_id INT COMMENT '管理员ID',
module VARCHAR(50) NOT NULL COMMENT '操作模块',
operation VARCHAR(100) NOT NULL COMMENT '操作描述',
target_type VARCHAR(50) COMMENT '操作对象类型',
target_id INT COMMENT '操作对象ID',
old_data JSON COMMENT '操作前数据',
new_data JSON COMMENT '操作后数据',
ip VARCHAR(50) COMMENT 'IP地址',
user_agent VARCHAR(500) COMMENT '用户代理',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (admin_id) REFERENCES admin_users(id),
INDEX idx_admin_id (admin_id),
INDEX idx_module (module),
INDEX idx_created_at (created_at)
);
```
#### data_statistics (数据统计表)
```sql
CREATE TABLE data_statistics (
id INT PRIMARY KEY AUTO_INCREMENT,
stat_date DATE NOT NULL COMMENT '统计日期',
stat_type VARCHAR(50) NOT NULL COMMENT '统计类型',
stat_key VARCHAR(100) NOT NULL COMMENT '统计键',
stat_value DECIMAL(15,2) DEFAULT 0 COMMENT '统计值',
extra_data JSON COMMENT '额外数据',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_date_type_key (stat_date, stat_type, stat_key),
INDEX idx_stat_date (stat_date),
INDEX idx_stat_type (stat_type)
);
```
## 系统API接口
### 1. 用户相关接口
#### 用户认证
- `POST /api/auth/login` - 微信登录
- `POST /api/auth/refresh` - 刷新token
- `POST /api/auth/logout` - 退出登录
#### 用户信息管理
- `GET /api/user/profile` - 获取用户信息
- `PUT /api/user/profile` - 更新用户信息
- `DELETE /api/user/account` - 注销用户账户
- `GET /api/user/points` - 获取用户积分记录
- `POST /api/user/points/exchange` - 积分兑换
#### 用户地址管理
- `GET /api/user/addresses` - 获取用户地址列表
- `GET /api/user/addresses/{id}` - 获取单个地址详情
- `POST /api/user/addresses` - 添加收货地址
- `PUT /api/user/addresses/{id}` - 更新收货地址
- `DELETE /api/user/addresses/{id}` - 删除收货地址
- `PUT /api/user/addresses/{id}/default` - 设置默认地址
### 2. 商品相关接口
#### 商品分类管理
- `GET /api/categories` - 获取商品分类列表
- `GET /api/categories/{id}` - 获取分类详情
- `GET /api/categories/{id}/products` - 获取分类下的商品
- `POST /api/categories` - 创建商品分类(管理员)
- `PUT /api/categories/{id}` - 更新商品分类(管理员)
- `DELETE /api/categories/{id}` - 删除商品分类(管理员)
- `PUT /api/categories/{id}/sort` - 调整分类排序(管理员)
#### 商品信息管理
- `GET /api/products` - 获取商品列表(支持分页、搜索、筛选)
- `GET /api/products/{id}` - 获取商品详情
- `POST /api/products` - 创建商品(管理员)
- `PUT /api/products/{id}` - 更新商品(管理员)
- `DELETE /api/products/{id}` - 删除商品(管理员)
- `PUT /api/products/{id}/status` - 修改商品状态(管理员)
- `GET /api/products/search` - 商品搜索
- `GET /api/products/recommend` - 推荐商品
#### 商品规格管理
- `GET /api/products/{id}/specs` - 获取商品规格列表
- `GET /api/products/specs/{id}` - 获取单个规格详情
- `POST /api/products/{id}/specs` - 添加商品规格(管理员)
- `PUT /api/products/specs/{id}` - 更新商品规格(管理员)
- `DELETE /api/products/specs/{id}` - 删除商品规格(管理员)
#### 商品图片管理
- `GET /api/products/{id}/images` - 获取商品图片列表
- `POST /api/products/{id}/images` - 添加商品图片(管理员)
- `PUT /api/products/images/{id}` - 更新图片信息(管理员)
- `DELETE /api/products/images/{id}` - 删除商品图片(管理员)
- `PUT /api/products/images/{id}/sort` - 调整图片排序(管理员)
### 3. 购物车相关接口
#### 购物车管理
- `GET /api/cart` - 获取购物车列表
- `GET /api/cart/count` - 获取购物车商品数量
- `POST /api/cart` - 添加商品到购物车
- `PUT /api/cart/{id}` - 更新购物车商品数量
- `DELETE /api/cart/{id}` - 删除购物车商品
- `DELETE /api/cart/batch` - 批量删除购物车商品
- `DELETE /api/cart/clear` - 清空购物车
- `POST /api/cart/batch` - 批量添加商品到购物车
### 4. 订单相关接口
#### 订单管理
- `GET /api/orders` - 获取订单列表
- `GET /api/orders/{id}` - 获取订单详情
- `POST /api/orders` - 创建订单
- `PUT /api/orders/{id}` - 更新订单信息(管理员)
- `DELETE /api/orders/{id}` - 删除订单(管理员)
- `PUT /api/orders/{id}/cancel` - 取消订单
- `PUT /api/orders/{id}/confirm` - 确认收货
- `GET /api/orders/{id}/logistics` - 获取物流信息
#### 订单商品管理
- `GET /api/orders/{id}/items` - 获取订单商品列表
- `GET /api/order-items/{id}` - 获取订单商品详情
- `POST /api/orders/{id}/items` - 添加订单商品(管理员)
- `PUT /api/order-items/{id}` - 更新订单商品(管理员)
- `DELETE /api/order-items/{id}` - 删除订单商品(管理员)
#### 支付相关
- `POST /api/orders/{id}/pay` - 发起支付
- `POST /api/orders/pay/callback` - 支付回调
- `GET /api/orders/{id}/payment-status` - 获取支付状态
- `POST /api/orders/{id}/refund` - 申请退款
- `GET /api/orders/{id}/refund-status` - 获取退款状态
### 5. 营销相关接口
#### 优惠券管理
- `GET /api/coupons` - 获取可领取优惠券列表
- `GET /api/coupons/{id}` - 获取优惠券详情
- `POST /api/coupons` - 创建优惠券(管理员)
- `PUT /api/coupons/{id}` - 更新优惠券(管理员)
- `DELETE /api/coupons/{id}` - 删除优惠券(管理员)
- `PUT /api/coupons/{id}/status` - 修改优惠券状态(管理员)
- `POST /api/coupons/{id}/receive` - 领取优惠券
- `GET /api/orders/available-coupons` - 获取订单可用优惠券
#### 用户优惠券管理
- `GET /api/user/coupons` - 获取用户优惠券列表
- `GET /api/user/coupons/{id}` - 获取用户优惠券详情
- `PUT /api/user/coupons/{id}/use` - 使用优惠券
- `DELETE /api/user/coupons/{id}` - 删除用户优惠券
#### 活动管理
- `GET /api/activities/seckill` - 获取秒杀活动列表
- `GET /api/activities/seckill/{id}` - 获取秒杀活动详情
- `POST /api/activities/seckill` - 创建秒杀活动(管理员)
- `PUT /api/activities/seckill/{id}` - 更新秒杀活动(管理员)
- `DELETE /api/activities/seckill/{id}` - 删除秒杀活动(管理员)
- `POST /api/activities/seckill/{id}/join` - 参与秒杀
- `GET /api/activities/group-buy` - 获取拼团活动列表
- `GET /api/activities/group-buy/{id}` - 获取拼团活动详情
- `POST /api/activities/group-buy` - 创建拼团活动(管理员)
- `PUT /api/activities/group-buy/{id}` - 更新拼团活动(管理员)
- `DELETE /api/activities/group-buy/{id}` - 删除拼团活动(管理员)
- `POST /api/activities/group-buy/{id}/join` - 参与拼团
### 6. 评价相关接口
#### 商品评价管理
- `GET /api/products/{id}/reviews` - 获取商品评价列表
- `GET /api/reviews/{id}` - 获取评价详情
- `POST /api/orders/{id}/review` - 提交订单评价
- `PUT /api/reviews/{id}` - 更新评价(用户本人)
- `DELETE /api/reviews/{id}` - 删除评价(用户本人或管理员)
- `POST /api/reviews/{id}/reply` - 商家回复评价(管理员)
- `PUT /api/reviews/{id}/status` - 修改评价状态(管理员)
- `GET /api/user/reviews` - 获取用户评价列表
### 7. 收藏相关接口
- `GET /api/user/favorites` - 获取用户收藏列表
- `POST /api/products/{id}/favorite` - 收藏商品
- `DELETE /api/products/{id}/favorite` - 取消收藏
### 8. 通知相关接口
#### 用户通知管理
- `GET /api/notifications` - 获取用户通知列表
- `GET /api/notifications/{id}` - 获取通知详情
- `PUT /api/notifications/{id}/read` - 标记通知为已读
- `PUT /api/notifications/read-all` - 标记所有通知为已读
- `DELETE /api/notifications/{id}` - 删除通知
- `GET /api/notifications/unread-count` - 获取未读通知数量
#### 系统通知管理(管理员)
- `GET /api/admin/notifications` - 获取所有通知列表
- `POST /api/admin/notifications` - 创建系统通知
- `PUT /api/admin/notifications/{id}` - 更新通知
- `DELETE /api/admin/notifications/{id}` - 删除通知
- `POST /api/admin/notifications/broadcast` - 广播通知给所有用户
### 9. 文件上传接口
#### 文件管理
- `POST /api/upload/image` - 上传图片
- `POST /api/upload/file` - 上传文件
- `GET /api/upload/policy` - 获取上传策略如阿里云OSS签名
- `GET /api/files` - 获取文件列表(管理员)
- `GET /api/files/{id}` - 获取文件详情
- `DELETE /api/files/{id}` - 删除文件
- `GET /api/files/statistics` - 获取文件统计信息(管理员)
### 10. 系统配置接口
#### 配置管理
- `GET /api/config/public` - 获取公开配置
- `GET /api/config/app` - 获取应用配置
- `GET /api/admin/configs` - 获取所有系统配置(管理员)
- `GET /api/admin/configs/{key}` - 获取指定配置(管理员)
- `POST /api/admin/configs` - 创建系统配置(管理员)
- `PUT /api/admin/configs/{key}` - 更新系统配置(管理员)
- `DELETE /api/admin/configs/{key}` - 删除系统配置(管理员)
### 12. 日志相关接口
#### 系统日志管理
- `GET /api/admin/logs/system` - 获取系统日志列表(管理员)
- `GET /api/admin/logs/system/{id}` - 获取系统日志详情(管理员)
- `DELETE /api/admin/logs/system/{id}` - 删除系统日志(管理员)
- `DELETE /api/admin/logs/system/batch` - 批量删除系统日志(管理员)
- `GET /api/admin/logs/system/statistics` - 获取日志统计(管理员)
#### 操作日志管理
- `GET /api/admin/logs/operation` - 获取操作日志列表(管理员)
- `GET /api/admin/logs/operation/{id}` - 获取操作日志详情(管理员)
- `DELETE /api/admin/logs/operation/{id}` - 删除操作日志(管理员)
- `DELETE /api/admin/logs/operation/batch` - 批量删除操作日志(管理员)
### 13. 数据统计接口
#### 统计数据管理
- `GET /api/admin/statistics/data` - 获取统计数据列表(管理员)
- `GET /api/admin/statistics/data/{id}` - 获取统计数据详情(管理员)
- `POST /api/admin/statistics/data` - 创建统计数据(管理员)
- `PUT /api/admin/statistics/data/{id}` - 更新统计数据(管理员)
- `DELETE /api/admin/statistics/data/{id}` - 删除统计数据(管理员)
- `POST /api/admin/statistics/calculate` - 手动触发统计计算(管理员)
### 11. 管理后台接口
#### 管理员认证
- `POST /api/admin/login` - 管理员登录
- `POST /api/admin/logout` - 管理员退出
- `GET /api/admin/profile` - 获取管理员信息
#### 用户管理
- `GET /api/admin/users` - 获取用户列表
- `GET /api/admin/users/{id}` - 获取用户详情
- `PUT /api/admin/users/{id}/status` - 修改用户状态
#### 商品管理
- `GET /api/admin/products` - 获取商品列表
- `POST /api/admin/products` - 添加商品
- `PUT /api/admin/products/{id}` - 更新商品
- `DELETE /api/admin/products/{id}` - 删除商品
- `PUT /api/admin/products/{id}/status` - 修改商品状态
#### 订单管理
- `GET /api/admin/orders` - 获取订单列表
- `GET /api/admin/orders/{id}` - 获取订单详情
- `PUT /api/admin/orders/{id}/ship` - 订单发货
- `PUT /api/admin/orders/{id}/status` - 修改订单状态
#### 数据统计
- `GET /api/admin/statistics/overview` - 获取概览数据
- `GET /api/admin/statistics/sales` - 获取销售统计
- `GET /api/admin/statistics/users` - 获取用户统计
- `GET /api/admin/statistics/products` - 获取商品统计
#### 系统管理
- `GET /api/admin/configs` - 获取系统配置列表
- `PUT /api/admin/configs/{key}` - 更新系统配置
- `GET /api/admin/logs` - 获取系统日志
- `GET /api/admin/operation-logs` - 获取操作日志
## 技术栈
### 前端(小程序)
- **框架**: 微信小程序原生开发 / uni-app
- **UI组件**: Vant Weapp / uView
- **状态管理**: Vuex / Pinia
- **网络请求**: wx.request / axios
### 后端
- **语言**: Go (Golang)
- **Web框架**: Gin / Fiber / Echo
- **ORM框架**: GORM
- **数据库**: MySQL 8.0+
- **缓存**: Redis
- **消息队列**: RabbitMQ / Kafka
- **配置管理**: Viper
- **日志**: Logrus / Zap
- **API文档**: Swagger (gin-swagger)
### 部署
- **服务器**: 阿里云 / 腾讯云
- **容器**: Docker
- **反向代理**: Nginx
- **监控**: Prometheus + Grafana
- **进程管理**: Systemd / Supervisor
## 开发规范
### Go代码规范
- 遵循Go官方代码规范 (gofmt, golint)
- 使用goimports自动管理导入
- 变量命名采用驼峰命名法
- 包名使用小写字母
- 接口名以-er结尾
- 错误处理不能忽略
- 使用context.Context进行超时控制
### GORM模型规范
```go
// 模型定义示例
type User struct {
ID uint `gorm:"primarykey" json:"id"`
OpenID string `gorm:"uniqueIndex;size:100;not null" json:"openid"`
UnionID string `gorm:"size:100" json:"unionid"`
Nickname string `gorm:"size:50" json:"nickname"`
Avatar string `gorm:"size:255" json:"avatar"`
Gender uint8 `gorm:"default:0" json:"gender"`
Phone string `gorm:"size:20;index" json:"phone"`
Email string `gorm:"size:100" json:"email"`
Birthday *time.Time `json:"birthday"`
Points uint `gorm:"default:0" json:"points"`
Level uint8 `gorm:"default:1" json:"level"`
Status uint8 `gorm:"default:1;index" json:"status"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
}
```
### API规范
- RESTful API设计
- 统一的响应格式
```go
type Response struct {
Code int `json:"code"`
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
}
```
- 错误码标准化
- 接口版本控制 (v1, v2)
- 使用Gin中间件进行认证和日志
### 数据库规范
- 表名使用下划线命名
- 字段名使用下划线命名
- 必须有created_at、updated_at和deleted_at字段
- 使用GORM的软删除功能
- 主键使用BIGINT UNSIGNED
- 字符集使用utf8mb4
- 合理添加索引提高查询性能
### 项目结构规范
- cmd/: 应用程序入口
- internal/: 内部应用代码
- pkg/: 可复用的包
- configs/: 配置文件
- migrations/: 数据库迁移文件
## 项目结构
```
dianshang/
├── miniprogram/ # 小程序前端
│ ├── pages/ # 页面文件
│ ├── components/ # 组件文件
│ ├── utils/ # 工具函数
│ ├── api/ # API接口
│ └── app.js # 小程序入口
├── server/ # Go后端服务
│ ├── cmd/ # 应用程序入口
│ │ └── main.go # 主程序入口
│ ├── internal/ # 内部应用代码
│ │ ├── handler/ # HTTP处理器(控制器)
│ │ ├── service/ # 业务逻辑层
│ │ ├── repository/ # 数据访问层
│ │ ├── model/ # 数据模型(GORM)
│ │ ├── middleware/ # 中间件
│ │ ├── config/ # 配置管理
│ │ └── router/ # 路由配置
│ ├── pkg/ # 可复用的包
│ │ ├── utils/ # 工具函数
│ │ ├── logger/ # 日志包
│ │ ├── jwt/ # JWT认证
│ │ └── response/ # 统一响应格式
│ ├── configs/ # 配置文件
│ │ ├── config.yaml # 主配置文件
│ │ └── database.yaml # 数据库配置
│ ├── migrations/ # 数据库迁移文件
│ ├── scripts/ # 脚本文件
│ ├── go.mod # Go模块文件
│ ├── go.sum # 依赖校验文件
│ └── Dockerfile # Docker构建文件
├── docs/ # 项目文档
│ ├── api/ # API文档
│ └── database/ # 数据库文档
└── README.md # 项目说明
```
## 部署说明
### 环境要求
- Go 1.19+
- MySQL 8.0+
- Redis 6.0+
- Nginx
### 部署步骤
1. **克隆项目**
```bash
git clone <repository-url>
cd dianshang
```
2. **安装Go依赖**
```bash
cd server
go mod download
go mod tidy
```
3. **配置环境**
```bash
cp configs/config.yaml.example configs/config.yaml
# 编辑配置文件,配置数据库连接等信息
```
4. **数据库初始化**
```bash
# 运行数据库迁移
go run cmd/main.go migrate
# 或使用migrate工具
migrate -path migrations -database "mysql://user:password@tcp(localhost:3306)/dbname" up
```
5. **编译和启动服务**
```bash
# 开发环境
go run cmd/main.go
# 生产环境编译
go build -o bin/dianshang cmd/main.go
./bin/dianshang
# 或使用Air进行热重载开发
air
```
6. **Docker部署**
```bash
# 构建镜像
docker build -t dianshang-server .
# 运行容器
docker run -d \
--name dianshang-server \
-p 8080:8080 \
-v $(pwd)/configs:/app/configs \
dianshang-server
```
7. **配置Nginx**
```nginx
server {
listen 80;
server_name your-domain.com;
location /api {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location / {
root /path/to/miniprogram/dist;
try_files $uri $uri/ /index.html;
}
}
```
### 生产环境配置示例
**configs/config.yaml**
```yaml
server:
port: 8080
mode: release
database:
driver: mysql
host: localhost
port: 3306
username: root
password: your_password
dbname: dianshang
charset: utf8mb4
parseTime: true
loc: Local
redis:
host: localhost
port: 6379
password: ""
db: 0
jwt:
secret: your_jwt_secret
expire: 7200
log:
level: info
filename: logs/app.log
maxSize: 100
maxAge: 30
maxBackups: 5
```
### 配置文件
- 数据库配置
- 微信小程序配置
- 支付配置
- 第三方服务配置
## 联系方式
- 项目负责人: [姓名]
- 邮箱: [邮箱地址]
- 技术支持: [联系方式]
---
*本文档会根据项目进展持续更新*