Files
ai_dianshang/README.md

1511 lines
45 KiB
Markdown
Raw Permalink Normal View History

2025-11-17 14:11:46 +08:00
# 电商微信小程序
数据库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
```
### 配置文件
- 数据库配置
- 微信小程序配置
- 支付配置
- 第三方服务配置
## 联系方式
- 项目负责人: [姓名]
- 邮箱: [邮箱地址]
- 技术支持: [联系方式]
---
*本文档会根据项目进展持续更新*