# code-maker-server **Repository Path**: tongdl/code-maker-server ## Basic Information - **Project Name**: code-maker-server - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-04-14 - **Last Updated**: 2024-04-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 模块说明 - gcb-admin (后台接口) - gcb-app (APP接口) - gcb-bi (数据大屏接口) - gcb-common (通用工具类) - gcb-framework (带SpringSecurity) - gcb-generator (代码生成器 - 一般独立于项目) - gcb-quartz (定时任务 - 目前只和admin关联,不可以和app关联) - gcb-system (所有业务类代码移动到 gcb-framework 中,后续可以把字典、通知等通用业务再移回来) ## 游客模式配置 游客模式RedisKey: ``` login_tokens:7df3c862-6dd2-4c6d-b509-c2c7f5ee1089 ``` 游客模式token信息: ```json { "@type": "com.gcb.common.core.domain.model.AppLoginUser", "adminOperate": false, "appUser": { "age": 35, "delFlag": "0", "id": 1772437666129485824, "mobile": "13000000000", "name": "游客", "nickName": "游客", "params": { "@type": "java.util.HashMap" }, "sex": "2", "status": "1" }, "loginTime": 1711417046685, "token": "08ea6c13-135f-4e62-b9c4-3949de4f6b71", "userId": 1772437666129485824, "username": "游客" } ``` 游客模式token: ``` eyJhbGciOiJIUzUxMiJ9.eyJhcHBfbG9naW5fdXNlcl9rZXkiOiI3ZGYzYzg2Mi02ZGQyLTRjNmQtYjUwOS1jMmM3ZjVlZTEwODkifQ.5rSlW2M5DH1Zm6TXi7uoRK1Lm0eBm4NBuqtt5khc5Dp-2lYColi78I4DIBbKN7B7r9tJZJMIlFb9mrP-ZQNORg ``` 游客模式对应在MySQL中的数据 sql语句: ``` INSERT INTO `gcb_user` (`id`, `gcb_user_code`, `name`, `nick_name`, `face_url`, `mobile`, `sex`, `age`, `education`, `work_date`, `experience`, `tag`, `avatar`, `password`, `city`, `city_label`, `status`, `identity_card`, `auth_status`, `auth_time`, `sign_type`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1772437666129485824, NULL, '游客', '游客', '', '13000000000', '2', 35, '', NULL, 0, '', '', '', '', '', '1', '', 0, NULL, '0', '0', '', NULL, '', NULL, '', NULL, NULL); ``` 注:后续redis环境变化,需手动添加 key为tokenKey value为token信息 TTL为-1 ### 1. 接口约定 一个接口其实就是对资源进行某一种操作,所以我们一般会用 HTTP的method来代表具体的操作(动词),用URL来代表被操作资源所在的地址(名词) #### 1.1 请求行 请求行有 请求方法(method)+ URL组成; - method:请求方法遵循 REST 风格,使用 GET(查) / POST(增) / PUT(改) / DELETE(删) 来分别代表对资源的增删改查。 - URL:URL代表被操作资源所在地址,命名时不允许出现动词,比如:获取用户列表 /getList 这种方式是不允许的。 以下罗列几个正确的命名法方式: - 获取用户列表:GET /users/list - 获取用户详情:GET /users/{:id} - 新增用户:POST /users - 修改用户:PUT /users/{:id} - 修改用户状态:PUT /users/{:id}/state?state=xx - 批量修改用户状态:PUT /users/state?ids=1,2,3&state=xx - 删除用户:DELETE /users/{:id} - 导出用户列表:GET /users/excel #### 1.2 入参 - POST 和 PUT 方法使用 消息体进行传参,ContentType = application/json。 - GET 和 DELTE 方法使用 Query 方式进行传参, /users?id=1&name=2 - 文件上传接口,使用 消息体 + formdata 方式进行传参。 #### 1.3 出参 - 返回值最外层公共参数 - code 注意必须是int类型,200成功,400参数错误,500服务端错误(所有异常必须在全局异常捕获处拦截,不允许接口直接打印处堆栈信息) - msg 操作结果的提示信息,一般就两种 “操作成功” 或 “操作失败”,如果是参数校验的提示也可以显示在这里,如“xx字段不允许为空” - data 存储接口返回的业务数据 - total 列表类接口时才有,用于存储满足本次查询条件的总记录数。 - data内参数原则上是按需输出,一方面节省带宽,一方面前端接入时比较简洁,一方面是比较专业。避免防御性编程式地把所有表里字段都吐出来,这样看着真的很难受。 #### 1.4 请求头 一般不会额外去处理请求头,目前比较常用的就是在请求头加入 Authentication 字段,用于存储token。 ### 2. 命名 动词 + 名词 + 介词 + 查询条件 **名词:多个名词用小驼峰形式书写** 例: - 码头列表 dockList - 单条码头信息 dock **介词:** - by (单值条件) - in (多值匹配) #### 控制器层 **动词:** - get 查 - add 增 - modify 改 - remove 删 **查询条件:** 2个以内必填查询条件可以直接写 by/in 条件名 例: - selectDockListByName 根据名称查码头列表 - selectDockListByNameAndRegion 根据名称和地区查码头列表 - selectDockById 根据码头id查 - selectDockListInUserIds 根据用户id列表查码头 二个以上查询条件,直接用conditions代替 例: - selectDockListByConditions 综合: - getCompanyUserList - getUserOrderList ### Service层 和控制器层保持同样命名,个别类可以对 前台/后台 进行区分; 比如:后台和前台的接口对同一个资源的出参结构不同,后台类加上 manager; #### Mapper层 **动词** - select - insert - update - delete - batchInsert - batchUpdate **查询条件** 2个以内必填查询条件可以直接写 by/in 条件名 例: - selectDockListByName 根据名称查码头列表 - selectDockListByNameAndRegion 根据名称和地区查码头列表 - selectDockById 根据码头id查 - selectDockListInUserIds 根据用户id列表查码头 二个以上查询条件,直接用conditions代替 例: - selectDockListbyConditions 综合例子: - batchInsertDock - updateDockById - batchUpdateDockInIds - selectDockById