05-API接口契约.md 4.85 KB

05-API接口契约

BasePath: /api/v1 端口: 9090

全局约定

响应格式

{"code": 200, "message": "操作成功", "data": {}, "timestamp": 1700000000000}

错误码

范围 含义
200 成功
400xx 客户端参数错误
401xx 认证/授权错误
403xx 权限不足
404xx 资源不存在
500xx 服务端内部错误

鉴权

POST /api/v1/auth/loginGET /api/v1/companies(登录页"版本"下拉)之外的全部接口需在请求头携带 Authorization: Bearer <accessToken>。Token 由 /auth/login 签发,TTL 2 小时,HS256 签名(密钥 JWT_SECRET 来自 .env.local)。鉴权失败统一返回 40101 token 无效或已过期 / 40102 用户已被作废或锁定。详见 docs/04 § 1.6。

分页参数

请求入参:

参数 类型 必填 默认 说明
page int 1 页码,从 1 开始
size int 20 每页条数,上限 100
sortField string 排序字段,白名单内
sortOrder string desc asc / desc

响应 data 结构 PageResult<T>

{
  "records": [],
  "total": 0,
  "page": 1,
  "size": 20
}

接口清单

(各模块接口段落见下方,由 downstream-gen 按 REQ 填入)

module_usr 用户管理

REQ-USR-001 用户登录

  • Method: POST
  • Path: /api/v1/auth/login
  • Auth: 无需(公开接口)
  • 请求: JSON body LoginReq { username: string (3-20), password: string (8-20, 明文,HTTPS 传输), companyCode: string (sys_company.sCompanyCode) }
  • 响应: JSON LoginVo { accessToken: string (JWT), tokenType: "Bearer", expiresInSec: 7200, userInfo: { userId: int, username: string, userType: "NORMAL"|"SUPER_ADMIN", language: string, employeeName?: string, companyCode: string } }

错误码

  • 40001 — 用户名或密码格式错误
  • 40101 — 用户名或密码错误(统一文案,不区分两者)
  • 40103 — 账号已被作废,禁止登录
  • 42301 — 账号已锁定,请稍后再试(HTTP 423;锁定剩余时间见 data.lockUntil
  • 40004 — 公司不存在或已删除

REQ-USR-002 新增用户

  • Method: POST
  • Path: /api/v1/users
  • Auth: Bearer Token;仅 userType=SUPER_ADMIN 可调用
  • 请求: JSON body CreateUserReq { username: string (3-20), userCode: string, password: string (8-20 含大小写字母和数字), userType: "NORMAL"|"SUPER_ADMIN", language: "zh-CN"|"en-US"|"zh-TW", canEditDocument: boolean, employeeId?: int, permissionCategoryIds: int[] }
  • 响应: JSON UserVo { userId: int, username: string }(HTTP 201)

错误码

  • 40001 — 必填字段缺失或格式错误
  • 40002 — 密码强度不满足(少于 8 位 / 缺大小写字母 / 缺数字)
  • 40301 — 当前用户非超级管理员,无权调用
  • 40901 — 用户名已存在
  • 40902 — 用户号已存在
  • 40004 — 指定的员工 / 权限分类不存在

REQ-USR-003 修改用户

  • Method: PUT
  • Path: /api/v1/users/{userId}
  • Auth: Bearer Token;仅 userType=SUPER_ADMIN 可调用
  • 请求: Path userId: int;JSON body UpdateUserReq { userCode?: string, userType?: "NORMAL"|"SUPER_ADMIN", language?: "zh-CN"|"en-US"|"zh-TW", canEditDocument?: boolean, employeeId?: int|null, isDeleted?: boolean, permissionCategoryIds?: int[] }(username 与 password 字段不接受)
  • 响应: JSON UserDetailVo { userId, username, userCode, userType, language, canEditDocument, isDeleted, employeeId, employeeName, permissionCategoryIds, updatedBy, updatedDate }

错误码

  • 40001 — 字段格式错误或试图修改 username / password
  • 40301 — 当前用户非超级管理员,无权调用
  • 40302 — 试图停用当前登录用户自己
  • 40401 — 用户不存在
  • 40902 — 用户号已被占用
  • 40004 — 指定的员工 / 权限分类不存在

REQ-USR-004 查询用户

  • Method: GET
  • Path: /api/v1/users
  • Auth: Bearer Token;仅 userType=SUPER_ADMIN 可调用
  • 请求: Query 参数 page=1&size=20&sortField=tCreateDate&sortOrder=desc&queryField=username&matchMode=contains&queryValue=张&userType=NORMAL&isDeleted=false
    • queryField: 枚举 username|employeeName|userCode|departmentName|userType|isDeleted|lastLoginDate|createdBy
    • matchMode: 枚举 contains|notContains|equals,缺省 contains
    • queryValue: 字符串,空字符串表示不限
  • 响应: PageResult<UserListItemVo>UserListItemVo { userId, username, employeeName, userCode, departmentName, userType, language, isDeleted, lastLoginDate, createdBy, createdDate }(密码字段不返回)

错误码

  • 40001 — 分页参数越界或类型错误
  • 40003queryField / matchMode 不在白名单
  • 40301 — 当前用户非超级管理员,无权调用