75 lines
5.1 KiB
Markdown
75 lines
5.1 KiB
Markdown
### 优化后的精准提示词
|
||
|
||
你需要为基于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. **精准性提升**:明确了文件命名、目录层级、数据类型适配等细节,避免执行过程中的歧义,同时保留了原有的核心要求和参考建表语句。
|