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