从 PHP 到 AI + Golang,程序员自救转型手记(三十四):后台初始化请求实现
这是一个系列 Blog作者将以一个 PHP 全栈工程师的身份利用 AI 工具claude code、codex、deepseek、豆包等从零开始学习 golang 语言并最终完成 ai-go-admingithub | gitee开源项目的制作全程记录分享。在上一期我们进行了 “权限规则管理器”本期将完成后台初始化请求实现后台初始化请求实现之前我们已经建立好了config和admin_rule模型加上以前就实现的admin模型数据源基本齐备我们可以开始初始化后台了。流程是管理员登录进入后台 跳转到 loading 页面 发送后台初始化请求并等待响应 注册动态路由 跳转到后台第一个路由简单解释一下后台有那些菜单可用是在后台进行可视化配置的菜单管理目前还没做而菜单管理的数据存储于admin_rule表表已经有了且插入了测试数据管理员登录后首先请求接口获取admin_rule表内的菜单数据然后将菜单动态的注册为vue-router的路由注册完成后就跳转到第一个路由去一般是控制台页面。在等待初始化接口响应时先跳转到admin/loading路由显示一个加载动画这是一个静态路由直接就能访问。初始化接口规划接口地址/admin/init请求方式GET使用AdminAuth中间件响应当前管理员信息AdminAuth中间件已经解析token并在请求上下文中保存了当前管理员信息响应站点配置也就是config表中的数据只返回namename|record_number|version的行响应当前管理员拥有权限的菜单规则数据admin_rule可以通过上一章建立的权限规则管理器快速获取写完规划我就想起目前时区配置放在了 config 表以便未来后台内可以可视化修改但是严格来讲我们最好是项目启动时就设定好时区而且pgsql的timestamptz字段类型也依赖于时区设定配置位置config/config.yaml.database.write.timezone也就是说存储于config表是不合适的改为统一在代码文件配置中设定这里让 CC 添加配置项并在项目启动时就完成时区初始化。再研究了一下直接让 AI 于config/config.yaml.app.timezone配置app级别的时区配置项首先是确定了一下Asia/Shanghai这种写法是兼容 GORM pgsql 的时区格式的其次数据库的写库和读副本也不存在需要设定不同时区的情况就算能也不推荐所以目前只保留config/config.yaml.app.timezone一个时区配置项就可以了让 CC 直接实现不再赘述。初始化接口也读取config/config.yaml.app.timezone配置项合并到站点配置中。关键缺失CC 实现初版之后我注意到还缺少一个能组装出树状数据菜单数据的包以及缺少 dto 目录。建立 dto 目录认证中间件中AdminSession管理员会话信息的结构体如下// AdminSession 管理员会话信息由认证中间件注入到请求上下文typeAdminSessionstruct{*model.Admin Tokenstring}在制作/admin/init接口的过程中发现管理员会话信息要传递到service层传递的参数类型如果使用middleware.AdminSessionHTTP 中间件的东西就入侵到service层了这与我们的规划不符未来假设要脱离HTTP层测试service是没有middleware.AdminSession的所以现在起建立 dto 目录用于专门存储数据传输对象比如响应结构体请求结构体还有这种跨层传递的数据结构。建立 tree树状数据管理包建立pkg/tree树状数据管理包用于处理树状数据。提供以下对外方法一、根据 pid 和 id 组装children的方法将数据源如[[id1,pid0, title标题1],[id2,pid1, title标题1-1],]转换为[id1,pid0,title标题1,children[id2,pid1,title标题1-1]]可设定 pid 和 id 字段名 可由方法参数传入二、将数组某个字段渲染为树状的方法输出的数据如[id2,pid0,title权限管理,nameauth],[id3,pid2,title ├角色组管理,nameauth/group],[id8,pid2,title ├管理员管理,nameauth/admin]title字段为树枝字段pid 和 id 为上下级根据这三个字段都需要能够通过方法参数自定义其实我的提示词已经非常详细了不过还是和 AI 折腾了很久比如 AI 以为一共只有两级等情况不过好在最终结果是好的完整代码位于pkg\tree\tree.go前端整合直接要求 CC:web/src/api/admin/index.ts添加请求/admin/init的请求函数web/src/layouts/admin/index.vue的init函数内执行init请求函数并填充数据至状态商店等去除临时 MOCK 数据得益于从 BuildAdmin/web 迁移过来的前端此时我们已经完成了后台布局前后两端的初始化工作属于是有点样子了。