Initial commit

This commit is contained in:
Developer
2026-03-17 12:09:43 +08:00
commit 70bedcf241
211 changed files with 31464 additions and 0 deletions

View File

@@ -0,0 +1,234 @@
# 数据库设计文档(用户 / Skill / 积分模块)
## 一、用户模块
### 1.1 users 表
```sql
CREATE TABLE users (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
phone VARCHAR(20) UNIQUE NOT NULL COMMENT '手机号',
password_hash VARCHAR(255) NOT NULL COMMENT '密码哈希(BCrypt)',
nickname VARCHAR(100) COMMENT '昵称',
avatar_url VARCHAR(500) COMMENT '头像URL(腾讯云COS)',
status ENUM('active', 'inactive', 'banned') DEFAULT 'active' COMMENT '状态',
member_level ENUM('normal', 'silver', 'gold', 'diamond') DEFAULT 'normal' COMMENT '会员等级',
growth_value INT DEFAULT 0 COMMENT '成长值',
ban_reason VARCHAR(255) COMMENT '封禁原因',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL COMMENT '软删除时间',
INDEX idx_phone (phone),
INDEX idx_status (status),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
```
> **变更说明**:新增 `ban_reason` 字段,用于管理员封禁用户时记录原因。
### 1.2 user_profiles 表
```sql
CREATE TABLE user_profiles (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '资料ID',
user_id BIGINT NOT NULL UNIQUE COMMENT '用户ID',
real_name VARCHAR(100) COMMENT '真实姓名',
id_card VARCHAR(50) COMMENT '身份证号(加密)',
gender ENUM('male', 'female', 'unknown') DEFAULT 'unknown',
birthday DATE,
city VARCHAR(100),
bio TEXT COMMENT '个人简介',
auth_status ENUM('none', 'pending', 'approved', 'rejected') DEFAULT 'none' COMMENT '实名认证',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
INDEX idx_user_id (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户详细资料表';
```
### 1.3 user_auth 表
```sql
CREATE TABLE user_auth (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL COMMENT '用户ID',
auth_type ENUM('wechat', 'alipay', 'email') NOT NULL COMMENT '授权类型',
auth_id VARCHAR(255) NOT NULL COMMENT '第三方唯一ID',
auth_name VARCHAR(100) COMMENT '第三方昵称',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY unique_auth (auth_type, auth_id),
FOREIGN KEY (user_id) REFERENCES users(id),
INDEX idx_user_id (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='第三方授权表';
```
## 二、Skill模块
### 2.1 skill_categories 表
```sql
CREATE TABLE skill_categories (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL UNIQUE COMMENT '分类名称',
parent_id INT DEFAULT NULL COMMENT '父分类ID(NULL=一级)',
icon_url VARCHAR(500) COMMENT '图标(腾讯云COS)',
sort_order INT DEFAULT 0 COMMENT '排序',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_parent_id (parent_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Skill分类表';
INSERT INTO skill_categories (name, parent_id, sort_order) VALUES
('办公自动化', NULL, 1), ('数据处理', NULL, 2),
('客服助手', NULL, 3), ('内容创作', NULL, 4),
('营销推广', NULL, 5), ('其他', NULL, 99);
```
### 2.2 skills 表
```sql
CREATE TABLE skills (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
creator_id BIGINT NOT NULL COMMENT '创建者ID',
name VARCHAR(200) NOT NULL COMMENT 'Skill名称',
description TEXT COMMENT '详细描述',
cover_image_url VARCHAR(500) COMMENT '封面图(腾讯云COS)',
category_id INT NOT NULL COMMENT '分类ID',
price DECIMAL(10, 2) DEFAULT 0.00 COMMENT '价格(元)',
is_free BOOLEAN DEFAULT FALSE COMMENT '是否免费',
status ENUM('draft','pending','approved','rejected','offline') DEFAULT 'draft' COMMENT '状态',
reject_reason VARCHAR(500) COMMENT '审核拒绝原因',
auditor_id BIGINT COMMENT '审核人ID',
audited_at TIMESTAMP NULL COMMENT '审核时间',
download_count INT DEFAULT 0 COMMENT '下载次数',
rating DECIMAL(3, 2) DEFAULT 0.00 COMMENT '平均评分',
rating_count INT DEFAULT 0 COMMENT '评分人数',
version VARCHAR(50) COMMENT '版本号',
file_size BIGINT COMMENT '文件大小(字节)',
file_url VARCHAR(500) COMMENT '文件(腾讯云COS)',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL COMMENT '软删除',
FOREIGN KEY (creator_id) REFERENCES users(id),
FOREIGN KEY (category_id) REFERENCES skill_categories(id),
INDEX idx_creator_id (creator_id),
INDEX idx_category_id (category_id),
INDEX idx_status (status),
INDEX idx_is_free (is_free),
INDEX idx_created_at (created_at),
INDEX idx_download_count (download_count),
FULLTEXT INDEX ft_search (name, description)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Skill表';
```
> **变更说明**:新增 `auditor_id`、`audited_at` 字段,用于管理后台记录审核操作人和审核时间。
### 2.3 skill_reviews 表
```sql
CREATE TABLE skill_reviews (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
skill_id BIGINT NOT NULL,
user_id BIGINT NOT NULL,
order_id BIGINT COMMENT '关联订单ID',
rating INT NOT NULL COMMENT '评分(1-5)',
content TEXT COMMENT '评价内容',
images JSON COMMENT '图片URL数组(腾讯云COS)',
helpful_count INT DEFAULT 0 COMMENT '有帮助人数',
status ENUM('pending','approved','rejected') DEFAULT 'approved',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (skill_id) REFERENCES skills(id),
FOREIGN KEY (user_id) REFERENCES users(id),
INDEX idx_skill_id (skill_id),
INDEX idx_user_id (user_id),
CONSTRAINT chk_rating CHECK (rating >= 1 AND rating <= 5)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Skill评价表';
```
### 2.4 skill_downloads 表
```sql
CREATE TABLE skill_downloads (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
skill_id BIGINT NOT NULL,
user_id BIGINT NOT NULL,
order_id BIGINT COMMENT '关联订单(免费为NULL)',
download_type ENUM('free','paid','points') NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (skill_id) REFERENCES skills(id),
FOREIGN KEY (user_id) REFERENCES users(id),
UNIQUE KEY uk_user_skill (user_id, skill_id),
INDEX idx_skill_id (skill_id),
INDEX idx_user_id (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Skill获取记录表';
```
## 三、积分模块
### 3.1 user_points 表
```sql
CREATE TABLE user_points (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL UNIQUE,
available_points INT DEFAULT 0 COMMENT '可用积分',
frozen_points INT DEFAULT 0 COMMENT '冻结积分',
total_earned INT DEFAULT 0 COMMENT '累计获取',
total_consumed INT DEFAULT 0 COMMENT '累计消耗',
last_sign_in_date DATE COMMENT '最后签到日期',
sign_in_streak INT DEFAULT 0 COMMENT '连续签到天数',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
INDEX idx_user_id (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户积分账户表';
```
### 3.2 points_records 表
```sql
CREATE TABLE points_records (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
points_type ENUM('earn','consume','freeze','unfreeze','admin_correct') NOT NULL COMMENT '变动类型',
source ENUM(
'register','sign_in','invite','invited','join_community',
'recharge','skill_purchase','review','activity',
'admin_add','admin_deduct','admin_correct','refund'
) NOT NULL COMMENT '来源',
amount INT NOT NULL COMMENT '变动量(正:获得 负:消耗)',
balance INT NOT NULL COMMENT '变动后余额',
description VARCHAR(255) COMMENT '描述',
related_id BIGINT COMMENT '关联业务ID',
related_type VARCHAR(50) COMMENT '关联业务类型',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
INDEX idx_user_id (user_id),
INDEX idx_source (source),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='积分流水表';
```
> **变更说明**`points_type` 新增 `admin_correct``source` 新增 `invited`(被邀请奖励)、`admin_add`、`admin_deduct`、`admin_correct`、`refund`,与代码中的实际使用对齐。
### 3.3 points_rules 表
```sql
CREATE TABLE points_rules (
id INT PRIMARY KEY AUTO_INCREMENT,
rule_name VARCHAR(100) NOT NULL COMMENT '规则名称',
source ENUM('register','sign_in','invite','join_community','recharge','review','activity') NOT NULL UNIQUE,
points_amount INT NOT NULL COMMENT '积分数量',
frequency_limit INT COMMENT '周期内上限(NULL不限)',
frequency_period ENUM('daily','weekly','monthly','unlimited') DEFAULT 'unlimited',
enabled BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='积分规则表';
INSERT INTO points_rules (rule_name, source, points_amount, frequency_limit, frequency_period) VALUES
('新用户注册', 'register', 300, 1, 'unlimited'),
('每日签到', 'sign_in', 10, 1, 'daily'),
('邀请好友', 'invite', 100, NULL, 'unlimited'),
('加入社群', 'join_community', 50, 1, 'unlimited'),
('发表评价', 'review', 5, 3, 'daily');
```