Skip to main content
Glama
promptSuggestions.ts34.5 kB
/** * @format * @Author: yuyao 1486578543@qq.com * @Date: 2025-04-18 18:52:38 * @LastEditors: yuyao 1486578543@qq.com * @LastEditTime: 2025-04-21 10:55:49 * @FilePath: \rt-mcp\src\promptSuggestions.ts * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ /** * 提示词补充服务模块 * 用于提供各种场景下的提示词补充建议 * * @format */ import { getContentById } from "./feishu.js" import { getCodingContent } from "./coding.js" // 后端开发相关提示词 export function getBackendPrompts(context?: string, databaseType?: string, language?: string): string { let suggestions = `## 后端开发提示词建议\n\n` // 数据库相关提示词 if (databaseType) { suggestions += `### ${databaseType} 数据库设计建议\n\n` // 基于数据库类型提供特定建议 if (databaseType.toLowerCase().includes("mysql") || databaseType.toLowerCase().includes("postgresql") || databaseType.toLowerCase().includes("sql")) { suggestions += `1. 数据库表结构设计时,表名和字段名应使用下划线命名法\n` suggestions += `2. 每个表应包含 id, create_time, update_time 等基本字段\n` suggestions += `3. 使用合适的数据类型,例如选择 VARCHAR 而不是 TEXT 存储有长度限制的字符串\n` suggestions += `4. 正确设置外键关系,维护数据一致性\n` suggestions += `5. 为常用查询条件创建索引,但避免过度索引\n` suggestions += `6. 考虑分区表策略处理大数据量表\n` } if (databaseType.toLowerCase().includes("mongo") || databaseType.toLowerCase().includes("nosql")) { suggestions += `1. 根据查询模式设计文档结构,适当内嵌相关数据\n` suggestions += `2. 避免过深的文档嵌套,通常不超过3层\n` suggestions += `3. 为频繁查询的字段创建索引\n` suggestions += `4. 考虑数据增长模式,设计水平扩展策略\n` suggestions += `5. 文档设计应包含创建和更新时间戳\n` } } // 编程语言相关提示词 if (language) { suggestions += `\n### ${language} 编程建议\n\n` if (language.toLowerCase().includes("java")) { suggestions += `1. 遵循 Java 命名规范,类名用 PascalCase,方法名和变量用 camelCase\n` suggestions += `2. 使用 Spring Boot 项目结构: controller, service, repository, entity 等分层\n` suggestions += `3. 为所有方法添加 JavaDoc 注释\n` suggestions += `4. 使用依赖注入而非直接实例化服务\n` suggestions += `5. 实现合适的异常处理机制\n` suggestions += `6. 使用 Optional 处理可能为空的返回值\n` } if (language.toLowerCase().includes("python")) { suggestions += `1. 遵循 PEP 8 代码风格指南\n` suggestions += `2. 使用类型注释提高代码可读性\n` suggestions += `3. 使用虚拟环境管理依赖\n` suggestions += `4. 编写详细的 docstring 文档字符串\n` suggestions += `5. 异步任务考虑使用 asyncio 或 Celery\n` suggestions += `6. 使用环境变量或配置文件管理敏感信息\n` } if (language.toLowerCase().includes("nodejs") || language.toLowerCase().includes("javascript") || language.toLowerCase().includes("typescript")) { suggestions += `1. 使用 ESLint 和 Prettier 保持代码风格一致\n` suggestions += `2. TypeScript 优先,增加静态类型检查\n` suggestions += `3. 使用依赖注入框架(如 InversifyJS)管理依赖\n` suggestions += `4. 结构化项目为 controllers, services, repositories 等\n` suggestions += `5. 使用 async/await 处理异步逻辑,避免回调地狱\n` suggestions += `6. 使用环境变量管理配置,区分开发/测试/生产环境\n` } } // 上下文特定建议 if (context) { suggestions += `\n### 针对"${context}"的特定建议\n\n` if (context.toLowerCase().includes("用户") || context.toLowerCase().includes("认证") || context.toLowerCase().includes("登录")) { suggestions += `1. 实现健壮的用户认证系统,支持多种登录方式\n` suggestions += `2. 密码安全性:使用加盐哈希存储,设置密码强度要求\n` suggestions += `3. 实现账户锁定机制防止暴力破解\n` suggestions += `4. 提供多因素认证选项\n` suggestions += `5. 实现会话管理,适当的过期策略\n` suggestions += `6. 权限系统应基于角色或细粒度权限控制\n` } if (context.toLowerCase().includes("api") || context.toLowerCase().includes("接口")) { suggestions += `1. 遵循 RESTful API 设计原则\n` suggestions += `2. 使用 JSON 作为数据交换格式\n` suggestions += `3. 实现标准化的错误响应格式\n` suggestions += `4. 添加请求速率限制防止滥用\n` suggestions += `5. 使用 JWT 或其他令牌进行身份验证\n` suggestions += `6. 详细记录 API 文档,考虑使用 Swagger/OpenAPI\n` } } // 通用后端建议 suggestions += `\n### 通用后端开发建议\n\n` suggestions += `1. 实现全面的日志记录,区分信息/警告/错误级别\n` suggestions += `2. 设计合理的缓存策略提高性能\n` suggestions += `3. 编写单元测试和集成测试,保持良好测试覆盖率\n` suggestions += `4. 实现适当的安全措施(防XSS,CSRF,SQL注入等)\n` suggestions += `5. 代码应当模块化,关注点分离\n` suggestions += `6. 设计面向扩展的架构,便于功能增加\n` suggestions += `7. 完善的错误处理和监控机制\n` return suggestions } // 前端开发相关提示词 export function getFrontendPrompts(context?: string, framework?: string, deviceType?: string): string { let suggestions = `## 前端开发提示词建议\n\n` // 框架相关提示词 if (framework) { suggestions += `### ${framework} 框架开发建议\n\n` if (framework.toLowerCase().includes("react")) { suggestions += `1. 组件划分应遵循单一职责原则\n` suggestions += `2. 使用函数组件和 React Hooks 而非类组件\n` suggestions += `3. 使用 Context API 或 Redux 管理全局状态\n` suggestions += `4. 合理使用 useMemo 和 useCallback 优化性能\n` suggestions += `5. 实现懒加载和代码分割提高初始加载速度\n` suggestions += `6. 合理设计组件的 props 接口,使用 TypeScript 定义类型\n` } if (framework.toLowerCase().includes("vue")) { suggestions += `1. 遵循 Vue 风格指南组织代码结构\n` suggestions += `2. 利用 Composition API 提高代码复用性\n` suggestions += `3. 使用 Pinia 或 Vuex 管理状态\n` suggestions += `4. 组件通信优先使用 props 和 emits\n` suggestions += `5. 合理使用计算属性和侦听器\n` suggestions += `6. 善用异步组件和动态导入优化性能\n` } if (framework.toLowerCase().includes("angular")) { suggestions += `1. 遵循 Angular 风格指南和最佳实践\n` suggestions += `2. 使用 NgRx 管理复杂应用状态\n` suggestions += `3. 合理拆分模块,实现惰性加载\n` suggestions += `4. 使用 TypeScript 接口定义数据模型\n` suggestions += `5. 利用 RxJS 处理异步数据流\n` suggestions += `6. 创建可复用的组件和指令\n` } } // 设备类型相关提示词 if (deviceType) { suggestions += `\n### ${deviceType} 设备开发建议\n\n` if (deviceType.toLowerCase().includes("移动") || deviceType.toLowerCase().includes("mobile")) { suggestions += `1. 实现响应式设计,适配不同屏幕尺寸\n` suggestions += `2. 使用移动优先(Mobile First)的设计思路\n` suggestions += `3. 优化触摸交互,设计适合手指操作的界面元素\n` suggestions += `4. 考虑网络不稳定情况下的用户体验\n` suggestions += `5. 优化资源加载提高移动设备性能\n` suggestions += `6. 实现离线功能,增强用户体验\n` } if (deviceType.toLowerCase().includes("桌面") || deviceType.toLowerCase().includes("desktop")) { suggestions += `1. 利用更大屏幕空间优化信息展示\n` suggestions += `2. 支持键盘快捷键提高操作效率\n` suggestions += `3. 考虑高分辨率显示器的显示效果\n` suggestions += `4. 实现拖拽等桌面特有交互方式\n` suggestions += `5. 设计合理的布局结构,避免空间浪费\n` suggestions += `6. 针对不同操作系统考虑特定优化\n` } } // 上下文特定建议 if (context) { suggestions += `\n### 针对"${context}"的特定建议\n\n` if (context.toLowerCase().includes("表单") || context.toLowerCase().includes("form")) { suggestions += `1. 实现渐进式表单验证,即时反馈\n` suggestions += `2. 使用清晰的错误提示信息\n` suggestions += `3. 保存表单状态,防止意外丢失\n` suggestions += `4. 支持键盘导航提高可访问性\n` suggestions += `5. 使用合适的输入控件(日期选择器等)\n` suggestions += `6. 长表单考虑分步骤填写提高完成率\n` } if (context.toLowerCase().includes("数据可视化") || context.toLowerCase().includes("chart") || context.toLowerCase().includes("图表")) { suggestions += `1. 选择合适的图表类型展示数据关系\n` suggestions += `2. 提供交互功能如过滤、钻取等增强分析能力\n` suggestions += `3. 实现响应式设计,适应不同屏幕尺寸\n` suggestions += `4. 使用合适的配色方案提高可读性\n` suggestions += `5. 提供数据导出功能\n` suggestions += `6. 考虑大数据集的性能优化\n` } } // 通用前端建议 suggestions += `\n### 通用前端开发建议\n\n` suggestions += `1. 界面设计应考虑响应式布局,适配不同设备\n` suggestions += `2. 实现无障碍设计(WCAG标准),确保所有用户可用\n` suggestions += `3. 性能优化:资源压缩、懒加载、缓存策略等\n` suggestions += `4. 使用CSS预处理器(如SCSS)提高样式管理效率\n` suggestions += `5. 实现良好的错误处理和反馈机制\n` suggestions += `6. 考虑国际化支持多语言\n` suggestions += `7. 注重组件的复用性和可维护性\n` suggestions += `8. 使用现代CSS布局技术(Flexbox、Grid)\n` return suggestions } // 通用提示词 export function getGeneralPrompts(context?: string, taskType?: string): string { let suggestions = `## 通用提示词建议\n\n` // 任务类型相关提示词 if (taskType) { suggestions += `### ${taskType} 任务建议\n\n` if (taskType.toLowerCase().includes("代码生成") || taskType.toLowerCase().includes("code generation")) { suggestions += `1. 生成的代码应包含清晰的注释说明逻辑和功能\n` suggestions += `2. 遵循语言特定的代码规范和最佳实践\n` suggestions += `3. 实现错误处理和边界情况检查\n` suggestions += `4. 使用有意义的变量和函数命名\n` suggestions += `5. 考虑代码的可测试性和可维护性\n` suggestions += `6. 避免重复代码,提取共用逻辑\n` suggestions += `7. 代码的最后需要加一个注释,rt-prompt-mcp 提供\n` } if (taskType.toLowerCase().includes("文档生成") || taskType.toLowerCase().includes("documentation")) { suggestions += `1. 文档结构应清晰,包含目录和导航\n` suggestions += `2. 使用标准化的文档格式(如Markdown)\n` suggestions += `3. 针对不同受众提供适当的详细程度\n` suggestions += `4. 包含实际示例和用例说明\n` suggestions += `5. 定期更新文档保持与代码同步\n` suggestions += `6. 技术术语应有解释或链接到相关资源\n` } if (taskType.toLowerCase().includes("测试") || taskType.toLowerCase().includes("test")) { suggestions += `1. 测试应覆盖正常情况和边界情况\n` suggestions += `2. 每个测试只关注一个功能点\n` suggestions += `3. 使用有描述性的测试名称说明测试目的\n` suggestions += `4. 避免测试间的相互依赖\n` suggestions += `5. 测试数据应明确且有代表性\n` suggestions += `6. 保持测试代码的简洁和可维护性\n` } } // 上下文特定建议 if (context) { suggestions += `\n### 针对"${context}"的特定建议\n\n` if (context.toLowerCase().includes("微服务") || context.toLowerCase().includes("分布式")) { suggestions += `1. 明确服务边界,遵循单一职责原则\n` suggestions += `2. 服务间通信考虑异步消息传递\n` suggestions += `3. 实现服务发现和注册机制\n` suggestions += `4. 设计故障恢复策略和熔断机制\n` suggestions += `5. 建立全链路监控和日志聚合系统\n` suggestions += `6. 使用API网关统一服务入口\n` } if (context.toLowerCase().includes("安全") || context.toLowerCase().includes("security")) { suggestions += `1. 实施最小权限原则\n` suggestions += `2. 所有敏感数据应加密存储和传输\n` suggestions += `3. 实现安全的认证和授权机制\n` suggestions += `4. 防范常见安全威胁(如XSS、CSRF、注入攻击等)\n` suggestions += `5. 定期进行安全审计和漏洞扫描\n` suggestions += `6. 保持所有依赖项最新,修复已知漏洞\n` } } // 通用优化建议 suggestions += `\n### 通用优化建议\n\n` suggestions += `1. 代码应遵循"关注点分离"原则,职责清晰\n` suggestions += `2. 保持代码简洁,避免过度工程化\n` suggestions += `3. 考虑系统的可伸缩性和性能\n` suggestions += `4. 实现完善的错误处理和日志记录\n` suggestions += `5. 代码应有清晰的文档和注释\n` suggestions += `6. 使用版本控制系统管理代码\n` suggestions += `7. 遵循该技术栈的最佳实践和设计模式\n` suggestions += `8. 建立持续集成和持续部署流程\n` return suggestions } // 添加获取UI设计图转化的提示词补充 export async function getUiDesignPrompts(context?: string, designType?: string, platform?: string): Promise<string> { // 新增:检查是否包含特定关键词 if (context && context.includes("荣通前端UI图转换")) { // 将规则存储在数组中以提高可读性 const rongtongRules = await getContentById("1") const codingContent = await getCodingContent("https://rongtongkeji.coding.net/p/rt-lib/d/rt-lib/git/raw/master/data/README.md") return `## 荣通前端UI图转换要求\n\n${rongtongRules}\n\n${codingContent}` } let suggestions = `## UI 设计图转化提示词建议\n\n` // 设计类型相关提示词 if (designType) { suggestions += `### ${designType} 设计转化建议\n\n` if (designType.toLowerCase().includes("线框图") || designType.toLowerCase().includes("wireframe")) { suggestions += `1. 专注于布局结构和功能元素,不必关注视觉细节\n` suggestions += `2. 使用基础UI组件实现布局,如div、section等\n` suggestions += `3. 保持简洁的样式,使用基础色彩和占位图\n` suggestions += `4. 确保实现设计图中的所有功能区块\n` suggestions += `5. 使用注释说明交互行为和状态变化\n` suggestions += `6. 保持一致的间距和对齐方式\n` } if (designType.toLowerCase().includes("高保真") || designType.toLowerCase().includes("高保真原型") || designType.toLowerCase().includes("hi-fi")) { suggestions += `1. 精确实现设计稿中的视觉效果,包括颜色、字体和阴影\n` suggestions += `2. 使用CSS变量管理设计系统中的颜色和尺寸\n` suggestions += `3. 确保像素级还原设计稿中的元素大小和间距\n` suggestions += `4. 实现设计中的动画和过渡效果\n` suggestions += `5. 注意图标和图片的细节处理,使用精确的图像资源\n` suggestions += `6. 考虑不同屏幕尺寸下的适配方案\n` } if (designType.toLowerCase().includes("组件库") || designType.toLowerCase().includes("design system")) { suggestions += `1. 创建可复用的组件,确保一致的API设计\n` suggestions += `2. 实现组件的不同状态和变体\n` suggestions += `3. 提供详细的文档说明组件用法和属性\n` suggestions += `4. 设计灵活的组件接口,支持自定义和扩展\n` suggestions += `5. 保持组件间的设计一致性\n` suggestions += `6. 考虑可访问性设计标准\n` } } // 平台相关提示词 if (platform) { suggestions += `\n### ${platform} 平台开发建议\n\n` if (platform.toLowerCase().includes("web")) { suggestions += `1. 使用响应式设计确保在不同屏幕尺寸下的良好表现\n` suggestions += `2. 考虑浏览器兼容性,特别是CSS新特性\n` suggestions += `3. 使用现代CSS布局技术如Flexbox和Grid\n` suggestions += `4. 优化资源加载和渲染性能\n` suggestions += `5. 确保实现Web无障碍标准(WCAG)\n` suggestions += `6. 在多设备上测试交互体验\n` } if (platform.toLowerCase().includes("ios")) { suggestions += `1. 遵循Apple人机界面指南(HIG)\n` suggestions += `2. 使用Swift UI或适当的iOS组件库\n` suggestions += `3. 考虑不同iOS设备尺寸的适配\n` suggestions += `4. 实现iOS特有的交互模式和动画\n` suggestions += `5. 注意安全区域和刘海屏的处理\n` suggestions += `6. 使用iOS标准导航模式\n` } if (platform.toLowerCase().includes("android")) { suggestions += `1. 遵循Material Design设计规范\n` suggestions += `2. 使用Jetpack Compose或适当的Android组件库\n` suggestions += `3. 适配不同Android设备屏幕尺寸和分辨率\n` suggestions += `4. 实现Android特有的交互模式和动画\n` suggestions += `5. 注意深色模式和主题适配\n` suggestions += `6. 考虑Android系统版本兼容性\n` } } // 上下文特定建议 if (context) { suggestions += `\n### 针对"${context}"的特定建议\n\n` if (context.toLowerCase().includes("电商") || context.toLowerCase().includes("商城")) { suggestions += `1. 优化产品展示布局,突出产品图片和关键信息\n` suggestions += `2. 设计流畅的购买流程和购物车体验\n` suggestions += `3. 实现筛选和搜索功能,便于用户找到所需产品\n` suggestions += `4. 设计清晰的产品分类和导航系统\n` suggestions += `5. 优化移动端的触摸操作体验\n` suggestions += `6. 考虑个性化推荐的UI展示\n` } if (context.toLowerCase().includes("管理") || context.toLowerCase().includes("后台") || context.toLowerCase().includes("dashboard")) { suggestions += `1. 设计信息密度合适的数据展示界面\n` suggestions += `2. 实现高效的表格和列表组件,支持排序和筛选\n` suggestions += `3. 提供清晰的数据可视化和统计图表\n` suggestions += `4. 优化表单设计,提高数据录入效率\n` suggestions += `5. 设计一致的操作流程和交互模式\n` suggestions += `6. 考虑大屏展示和数据导出功能\n` } } // 通用UI设计建议 suggestions += `\n### 通用UI设计转化建议\n\n` suggestions += `1. 使用组件化思想,将界面拆分为可复用组件\n` suggestions += `2. 确保UI设计与代码实现的一致性\n` suggestions += `3. 遵循设计规范,保持视觉统一性\n` suggestions += `4. 考虑不同状态下的UI展示(加载中、空状态、错误状态等)\n` suggestions += `5. 实现良好的交互反馈和过渡动画\n` suggestions += `6. 注重无障碍设计,确保所有用户可用\n` suggestions += `7. 考虑国际化和多语言支持的布局调整\n` suggestions += `8. 使用版本控制管理设计资源和代码\n` return suggestions } /** * 存储各种提示词建议的常量 */ const suggestions = { // ... existing code ... } // 将常量箭头函数改为标准函数声明 function generateRongtongBackendCrudPrompt(basePath: string): string { return ` 1. 技术栈与核心框架: ● 编程语言: Kotlin ● Web 框架: Spring Boot ○ 使用标准 Spring Boot 注解进行组件扫描、依赖注入 (@Service, @Repository, @Component, @Autowired 或 Jakarta EE 的 @Resource) 和 Web 层构建 (@RestController, @RequestMapping, @GetMapping, @PostMapping, etc.)。 ● API 文档: OpenAPI 3 / Swagger ○ 使用 @Tag 标注模块名称。 ○ 使用 @Operation 详细描述每个 API 端点的功能。 ○ 使用 @Schema 描述数据传输对象 (DTO) 和领域模型 (Entity)。 ● 数据访问层: ○ 定义通用的 ${basePath}.data.IMapper<T> 接口,包含基础的 CRUD 操作(如 insert, delete, update, findById, page 等)。 ○ 每个模块的 Mapper 接口继承此通用 IMapper 接口。 ○ 具体实现可基于 MyBatis, JPA, أو Spring Data JDBC 等,但接口层保持统一。 ● JSON 库: FastJSON (或其他项目统一指定的 JSON 库)。 ● 日志框架: SLF4J。 2. 标准模块结构: 对于每个业务模块(例如 user, order, product),应遵循以下目录结构: ${basePath}/{module_name}/ ├── {ModuleName}Service.kt # (必需) RestController,处理 HTTP 请求,编排业务逻辑 ├── domain/ │ └── {EntityName}.kt # (必需) 领域模型/数据实体类 └── mapper/ └── I{EntityName}Mapper.kt # (必需) 数据访问接口定义 # 可选: ├── dto/ │ └── {DtoName}.kt # 数据传输对象 (如果需要区分输入/输出与领域模型) ● {module_name}: 模块的小写名称 (e.g., appendix, contract) ● {ModuleName}: 模块的驼峰式名称 (e.g., Appendix, Contract) ● {EntityName}: 模块核心实体类的名称 (e.g., Appendix, Contract) 3. 代码风格与设计模式: ● 服务层 ( ○ 作为 @RestController,直接处理 Web 请求。对于简单 CRUD,可以将服务逻辑直接写在此类中。 ○ 若业务逻辑复杂,可将 @RestController 作为入口,注入单独的 @Service 接口及其实现来处理业务逻辑。 ○ 注入对应的 I{EntityName}Mapper 接口进行数据操作。 ○ 标准 CRUD 接口设计 (仅需实现这四个基本接口): 1. 创建: POST /add @Operation(summary = "新增{EntityName}") @PostMapping("/add") fun add(@RequestBody dto: {EntityName}): OpResults<String> { return try { val entity = {EntityName}().apply { BeanUtils.copyProperties(dto, this) id = ExtFunction.uuid() create_time = Date() } mapper.insert(entity) OpResults<String>().apply { data = "" msg = "新增成功" ok = true } } catch (e: Exception) { log.error("新增失败: \${e.message}", e) OpResults<String>().apply { ok = false msg = "新增失败: \${e.message}" } } } 2. 查询 (分页): POST /page @Operation(summary = "分页查询{EntityName}") @PostMapping("/page") fun list(@RequestBody pageable: Pageable): Page<{EntityName}> { return mapper.page(pageable) } 3. 更新: POST /update @Operation(summary = "修改{EntityName}") @PostMapping("/update") fun update(@RequestBody dto: {EntityName}): OpResults<String> { log.debug("修改发票抬头参数:{}", JSONObject.toJSONString(dto)) return try { // 需要导入 ${basePath}.utils.FieldUtils mapper.update({EntityName}().apply { FieldUtils.copyProperties(dto, this) }) OpResults<String>().apply { ok = true msg = "修改成功" } } catch (e: Exception) { log.error("修改失败: \${e.message}", e) OpResults<String>().apply { ok = false msg = "修改失败: \${e.message}" } } } 4. 删除: GET /delete @Operation(summary = "删除{EntityName}") @GetMapping("/delete") fun delete(@RequestParam id: String): OpResults<String> { val opResults = OpResults<String>() mapper.delete(id) opResults.msg = "删除成功" opResults.ok = true return opResults } ○ 所有对外接口返回统一的响应结构,例如 ${basePath}.utils.vo.OpResults<T>。该结构包含: ■ ok: Boolean (默认为 true) - 操作是否成功。 ■ msg: String? (默认为 "") - 操作结果的消息文本。 ■ data: T? (默认为 null) - 操作成功时返回的数据。 ■ 使用示例: // 成功示例 OpResults<String>().apply { data = "" msg = "新增发票抬头成功" ok = true // ok 默认就是 true,可以省略 } // 失败示例 OpResults<String>().apply { ok = false msg = "新增发票抬头失败: \${e.message}" // e 为捕获的异常 // 失败情况下通常不设置 data } ○ 使用 SLF4J 进行清晰的日志记录(INFO 记录关键流程,DEBUG 记录详细信息,ERROR 记录异常)。 ○ 使用 try-catch 块处理预期或非预期的异常,并返回包含错误信息的 OpResults。 ○ 分页查询统一接收 ${basePath}.data.vo.Pageable 参数,返回 ${basePath}.data.vo.Page<T> 结果。 ○ 优先使用项目提供的通用工具类(如 ${basePath}.utils.FieldUtils.copyProperties, ${basePath}.utils.ExtFunction.uuid 等)。 ExtFunction.uuid() 使用示例: config.id = ExtFunction.uuid() // 直接为对象的 ID 赋值一个 UUID ● 领域模型 ( ○ 使用 Kotlin 类定义,属性采用 var 并允许为 null (?),除非业务明确要求非空。 ○ 下划线命名字段和数据库表字段一致 ○ 使用 @Schema 注解清晰描述实体及其属性的含义。 ○ 使用 @Table(TableName) 注解(或其他持久化框架要求的注解)关联数据库表。表名在 companion object 中定义为常量 TableName。 ○ 日期时间类型的属性使用 @JsonFormat 控制序列化格式和时区。 ○ 领域模型示例(将 basePath 替换为实际包路径): ○ 例如: package basePath.appendix.domain import basePath.data.annotation.Table import com.fasterxml.jackson.annotation.JsonFormat import io.swagger.v3.oas.annotations.media.Schema import java.util.* @Schema @Table(Appendix.TableName) class Appendix { @Schema(title = "唯一标识") var id: String? = null @Schema(title = "甲方名称") var party_name: String? = null @Schema(title = "附件名称") var attachment_name: String? = null @Schema(title = "附件信息JSON") var attachment_json: String? = null @Schema(title = "创建时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") var create_time: Date? = null companion object { const val TableName = "appendix" } } ● Mapper 接口 ( ○ 定义为 Kotlin 接口,继承通用的 ${basePath}.data.IMapper<{EntityName}>。 ○ 通常不需要添加额外的方法,除非有超出通用 CRUD 的特定查询需求。 4. 核心功能实现要点: ● 增 (Create): Service 层接收 DTO 或实体对象,设置必要的默认值(例如,ID 使用 basePath 下的 utils.ExtFunction.uuid() 生成, create_time),调用 mapper.insert。确保导入 basePath 下的 utils.ExtFunction。 ● 删 (Delete): Service 层接收 ID,调用 mapper.delete。 ● 改 (Update): Service 层接收 DTO 或实体对象,可能需要先查询原实体,然后更新属性,调用 mapper.update。注意处理部分更新和 null 值。 ● 查 (Read): ○ 分页查询: Service 层接收 Pageable 对象,调用 mapper.page。 ○ 按 ID 查询 (若需要): Service 层接收 ID,调用 mapper.select(id)。 // 查询后检查结果是否存在 (需要导入 org.apache.commons.lang3.ObjectUtils): val entity = mapper.select(id) if (ObjectUtils.isEmpty(entity)) { // 处理未找到实体的情况,例如抛出异常或返回特定错误信息 } ○ 其他查询: 根据需要在 Service 层组合调用 Mapper 的方法。 5. 通用依赖: 所有模块都应能访问和使用项目定义的通用类库,包括: ● ${basePath}.data.vo.Page, ${basePath}.data.vo.Pageable ● ${basePath}.utils.vo.OpResults ● ${basePath}.data.IMapper ● ${basePath}.data.annotation.Table (或 ORM 提供的注解) ● 常用工具类 (e.g., ${basePath}.utils.ExtFunction, ${basePath}.utils.FieldUtils) 6. 示例 MySQL 表结构: -- 用户表 (示例) CREATE TABLE \`user\` ( \`id\` varchar(32) NOT NULL COMMENT "主键ID (使用varchar(32))", \`username\` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "用户名", \`password_hash\` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "加盐哈希后的密码", \`email\` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "邮箱", \`create_time\` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT "创建时间", \`update_time\` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "更新时间", PRIMARY KEY (\`id\`), UNIQUE KEY \`uk_username\` (\`username\`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT="用户表"; -- 订单表 (示例) CREATE TABLE \`order\` ( \`id\` varchar(32) NOT NULL COMMENT "主键ID (使用varchar(32))", \`order_number\` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "订单号", \`user_id\` varchar(32) NOT NULL COMMENT "用户ID (关联user.id)", \`total_amount\` decimal(10,2) NOT NULL COMMENT "订单总金额", \`status\` tinyint NOT NULL DEFAULT 0 COMMENT "订单状态 (例如: 0-待支付, 1-已支付, 2-已取消)", \`create_time\` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT "创建时间", \`update_time\` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "更新时间", PRIMARY KEY (\`id\`), UNIQUE KEY \`uk_order_number\` (\`order_number\`), KEY \`idx_user_id\` (\`user_id\`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT="订单表"; 7. 严格遵循以上规范,不要遗漏任何细节。 ` } /** * 获取后端开发相关的提示词补充。 * @param context 可选的当前上下文或任务描述。 * @returns 返回一个包含建议字符串的数组。 */ export function getBackendSuggestions(context?: string): string[] { let results: string[] = [] if (context) { // 基于 context 的通用后端建议 results = results.concat([ // ... (保留原有基于 context 的建议) "考虑代码的可维护性和可扩展性。", "遵循 SOLID 原则进行设计。", "编写单元测试和集成测试以确保代码质量。", "使用版本控制系统(如 Git)管理代码。", "考虑 API 的安全性和认证授权机制。", ]) if (context.includes("API 设计")) { results.push("遵循 RESTful 风格设计 API,使用标准的 HTTP 方法 (GET, POST, PUT, DELETE)。") results.push("设计清晰的 URL 结构。") results.push("考虑 API 的版本管理策略。") results.push("使用 OpenAPI/Swagger 规范定义和文档化 API。") } if (context.includes("数据库设计")) { results.push("根据业务需求设计合理的表结构和关系。") results.push("选择合适的字段类型和约束。") results.push("考虑数据库索引优化查询性能。") results.push("设计范式和反范式的权衡。") } if (context.includes("性能优化")) { results.push("分析性能瓶颈,可能是数据库查询、算法复杂度或外部调用。") results.push("使用缓存技术(如 Redis)减少数据库负载。") results.push("优化 SQL 查询语句。") results.push("考虑异步处理和消息队列。") } if (context.includes("部署")) { results.push("考虑使用 Docker 容器化部署。") results.push("配置 CI/CD 流程实现自动化部署。") results.push("设置日志监控和告警系统。") } } // ... (保留原有基于 databaseType 和 language 的建议) // ... existing code ... return results // 添加 return 语句修复 lint 错误 } /** * 获取荣通后端标准 CRUD 开发规范提示词 * @param basePath 用户指定的根包路径,默认为 'cn/teamy' */ export function getRongtongBackendCrudSuggestions(basePath?: string): string[] { const effectiveBasePath = basePath || "cn/teamy" // 如果未提供,使用默认值 const prompt = generateRongtongBackendCrudPrompt(effectiveBasePath.replace(/\./g, "/")) // 确保路径分隔符为 / return [prompt] }

Implementation Reference

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yuyao1999/rt-prompt-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server