package com.yunhai.agent.tool.defs; import com.yunhai.agent.tool.ToolDef; import com.yunhai.agent.tool.ToolParam; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * 教师专业发展模块工具 —— 后端 Profession,前缀 /api/profession、/api/moudule、/api/points、/api/stats。 * *

★ 发布表单的字段以模块前端源码为**权威契约**: * {@code ProfessionView/src/views/profession/RecordEdit.vue}(发布/编辑记录页)。 * 提交体(模块页 {@code save()} 逐行核对): *

 * POST /api/profession/Create   (application/x-www-form-urlencoded)
 * { moduleId, title, grade, subject, ifOpen, remark,
 *   contents: JSON.stringify([{fieldId, value}]),   // 栏目动态字段
 *   fileIds: "11,12" }                              // 逗号串
 * 
* 与助手此前实现的差异(本轮修正):早先只有 moduleId/title/content 三项, * 既缺「年级段 / 学科 / 是否公开 / 正文(字段名应是 remark 而不是 content)」, * 也缺栏目动态字段与附件 —— 发出去的记录与在系统里发的天然不同。 */ public final class ProfessionTools { public static final String MODULE = "profession"; private ProfessionTools() { } public static List defs() { List list = new ArrayList<>(); list.add(ToolDef.of("profession.homeRecords", MODULE, "栏目最新记录", "各栏目最新发布的记录块(专业发展首页内容)。", "GET", "/api/profession/HomeModuleRecords") .p(ToolParam.optional("size", "integer", "每栏取几条").dft("6")) .readAt("/home")); list.add(ToolDef.of("profession.list", MODULE, "专业发展记录列表", "后台口径的专业发展记录分页查询,可按栏目/教师/时间筛选。", "GET", "/api/profession/ProfessionList") .p(ToolParam.optional("pageIndex", "integer", "页码").dft("1"), ToolParam.optional("pageSize", "integer", "每页条数").dft("10"), ToolParam.optional("keyword", "string", "标题关键词"), ToolParam.optional("moduleId", "integer", "栏目 id"), ToolParam.optional("starttime", "string", "开始时间 yyyy-MM-dd"), ToolParam.optional("endtime", "string", "结束时间 yyyy-MM-dd")) .readAt("/module/list")); list.add(ToolDef.of("profession.moduleRecords", MODULE, "栏目文章列表", "某个栏目下的文章分页(附同校其他栏目)。", "GET", "/api/profession/ModuleRecordList") .p(ToolParam.required("moduleId", "integer", "栏目 id"), ToolParam.optional("pageIndex", "integer", "页码").dft("1"), ToolParam.optional("pageSize", "integer", "每页条数").dft("10")) .readAt("/module/list")); list.add(ToolDef.of("profession.myRecords", MODULE, "我的栏目文章", "查询我在某栏目下发表的文章。", "GET", "/api/profession/MyModuleRecordList") .p(ToolParam.required("moduleId", "integer", "栏目 id"), ToolParam.optional("pageIndex", "integer", "页码").dft("1"), ToolParam.optional("pageSize", "integer", "每页条数").dft("10")) .readAt("/timeline")); list.add(ToolDef.of("profession.detail", MODULE, "记录详情", "查看一条专业发展记录的详情。", "GET", "/api/profession/ProfessionDetail") .p(ToolParam.required("SerID", "integer", "记录 id")) .readAt("/module/list")); list.add(ToolDef.of("profession.moduleTree", MODULE, "栏目树", "专业发展的栏目树(含我的栏目),发布记录时选栏目用。", "GET", "/api/moudule/ModuleTree") .readAt("/record/new")); /* ==================== 发布表单的字典(都必须由前端带登录态代取) ==================== * 模块的用户态接口只认浏览器 CAS 会话,服务端直取必然 code=302, * 因此这里只声明「去哪儿取」,由 AgentOrchestrator 下发 optionCall / extraFields.call。 */ // 年级段:模块页 RecordEdit.vue 的 grades(