wz-golang-server/docs/Task1.md

75 lines
5.1 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.

### 优化后的精准提示词
你需要为基于Golang开发的系统完成PostgreSQL适配改造核心目标是实现MySQL/PostgreSQL双数据源可配置切换并完成指定数据表的全链路代码开发具体要求如下
#### 一、核心改造要求
1. 数据源适配支持通过config.yaml配置文件指定主数据源类型mysql/postgresql实现系统层面的双数据源无缝切换需保证SQL语法、数据类型、函数等的兼容性如自增主键、时间函数、JSON类型等
2. 目录规范在项目根目录的docs/下新建sql文件夹分别创建mysql/和postgresql/子文件夹将t_user、t_platform_user两张表的建表语句按数据源类型分类存放文件名统一为t_user.sql、t_platform_user.sql。
3. 建表语句要求:
- PostgreSQL版本基于提供的建表语句完善保证COMMENT字段+表完整数据类型符合PostgreSQL规范如BIGSERIAL、JSONB、TIMESTAMP等保留联合唯一索引、外键约束
- MySQL版本补充适配版建表语句如自增主键用BIGINT AUTO_INCREMENT、JSON类型用JSON、时间函数适配同样保留完整COMMENT和约束
- 所有建表语句需包含软删除、创建/更新时间的默认值逻辑。
#### 二、代码开发要求
针对t_user、t_platform_user两张表补充PostgreSQL适配后的全链路代码需保证代码兼容双数据源结构如下
1. Entity层定义与数据表字段一一对应的结构体适配PostgreSQL/MySQL的数据类型差异如JSONB对应Golang的map[string]interface{}或自定义结构体添加字段注释tag包含comment
2. Mapper层数据访问层实现两张表的CRUD操作使用兼容双数据源的SQL语法避免数据库专属函数支持通过配置切换数据源
3. Service层封装业务逻辑调用Mapper层完成数据操作对外提供统一的业务接口
4. Controller层暴露HTTP接口如用户信息新增/查询/修改/删除接收请求参数并调用Service层返回标准化响应结果。
#### 三、兼容性要求
1. 所有代码需通过接口或配置隔离数据库专属逻辑,避免硬编码数据源类型;
2. 重点兼容项:自增主键生成、时间字段的插入/更新逻辑、JSON类型的序列化/反序列化、唯一索引/外键约束的实现方式;
3. 保证切换数据源后,系统功能无异常,数据读写正常。
#### 附参考建表语句PostgreSQL版
```sql
-- t_user 建表语句PostgreSQL
CREATE TABLE t_user (
id BIGSERIAL PRIMARY KEY, -- 全局唯一用户ID自增
username VARCHAR(50) COMMENT '用户名(可选,后台管理用)',
nickname VARCHAR(100) COMMENT '用户昵称(各平台统一)',
avatar_url VARCHAR(500) COMMENT '用户头像URL',
phone VARCHAR(20) UNIQUE COMMENT '手机号脱敏存储如138****1234',
gender TINYINT COMMENT '性别0-未知1-男2-女',
status TINYINT DEFAULT 1 COMMENT '状态0-禁用1-正常',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted TINYINT DEFAULT 0 COMMENT '软删除0-未删1-已删'
);
COMMENT ON TABLE t_user IS '用户基础信息表';
-- t_platform_user 建表语句PostgreSQL
CREATE TABLE t_platform_user (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL COMMENT '关联t_user.id',
platform_type TINYINT NOT NULL COMMENT '平台类型1-微信小程序2-抖音小程序3-支付宝小程序',
platform_openid VARCHAR(100) NOT NULL COMMENT '平台唯一标识微信openid/抖音open_id',
platform_unionid VARCHAR(100) COMMENT '平台统一标识微信unionid多小程序互通用',
platform_session_key VARCHAR(100) COMMENT '平台会话密钥微信session_key加密存储',
platform_extra JSONB COMMENT '平台扩展字段如抖音的user_name、微信的city等',
last_login_time TIMESTAMP COMMENT '最后登录时间',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted TINYINT DEFAULT 0,
-- 联合唯一索引同一平台的openid不能重复
UNIQUE (platform_type, platform_openid),
-- 外键关联用户表
CONSTRAINT fk_platform_user_user_id FOREIGN KEY (user_id) REFERENCES t_user(id) ON DELETE CASCADE
);
COMMENT ON TABLE t_platform_user IS '平台用户关联表(微信/抖音小程序用户信息)';
```
---
### 优化关键点总结
1. **结构化拆分**将需求拆分为数据源适配、目录规范、建表语句、代码开发、兼容性5个明确模块避免模糊表述
2. **细节补全**补充了MySQL建表语句要求、代码层的具体实现规范如Entity的tag注释、Mapper的CRUD要求明确兼容性重点
3. **精准性提升**:明确了文件命名、目录层级、数据类型适配等细节,避免执行过程中的歧义,同时保留了原有的核心要求和参考建表语句。