补齐 HTTP 层:实现用户模块、路由与中间件接线、COS 上传及优雅启动

- 新增用户与上传错误码文件及 Recovery 中间件
- 修复 router.go 导入与中间件链,注册用户路由并补 handler 错误码导入
- 补充用户状态常量与 UserGetByWechatOpenID 查询,修订刷新令牌 dto
- 移除 upload 包 OTel 调用,新增 FileUploadCos 上传封装
- 实现 UserService 微信登录/刷新令牌/我的信息/改资料/上传头像
- 裁剪 main.go 配置段并移除 OTel 桥接,补启动与优雅退出
- 新增 configs 示例配置、global 配置结构及 go.mod 依赖
This commit is contained in:
2026-09-27 15:02:01 +08:00
parent 8f08d94a56
commit ff9add8655
33 changed files with 2473 additions and 0 deletions
+54
View File
@@ -0,0 +1,54 @@
package dto
// UserWxLoginRequest 微信登录请求
type UserWxLoginRequest struct {
Code string `json:"code" binding:"required"` // 微信登录code
}
// UserWxLoginResponse 登录响应
type UserWxLoginResponse struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
ExpireTime int64 `json:"expire_time"` // access_token 过期时间(绝对 Unix 秒时间戳)
UserInfo UserInfoGetBySelfResponse `json:"user_info"`
}
type UserInfoGetBySelfRequest struct{}
// UserInfoGetBySelfResponse 用户信息
type UserInfoGetBySelfResponse struct {
Username string `json:"username"`
Avatar string `json:"avatar"` // 可访问 URL(COS key 已转为 CDN 签名地址)
Status int8 `json:"status"` // 状态 1=正常 2=临时禁用 3=永久禁用 4=已注销
UserUUID string `json:"user_uuid"`
}
// UserProfileUpdateBySelfRequest 修改用户资料
type UserProfileUpdateBySelfRequest struct {
Username string `json:"username" binding:"max=32"` // 昵称
Avatar string `json:"avatar" binding:"max=500"` // 头像地址
}
// UserProfileUpdateBySelfResponse 修改用户资料响应
type UserProfileUpdateBySelfResponse struct{}
// UserAvatarUploadRequest 上传头像(multipart,字段名 file)
type UserAvatarUploadRequest struct{}
// UserAvatarUploadResponse 上传头像响应
type UserAvatarUploadResponse struct {
Avatar string `json:"avatar"` // 头像可访问 URL
}
// UserRefreshTokenRequest 刷新用户token请求。
// 纯 JWT 无状态方案:只校验 refresh token 本身,不校验/吊销服务端会话。
type UserRefreshTokenRequest struct {
RefreshToken string `json:"refresh_token" binding:"required"`
}
// UserRefreshTokenResponse 刷新用户token响应
type UserRefreshTokenResponse struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
ExpireTime int64 `json:"expire_time"` // access_token 过期时间(绝对 Unix 秒时间戳)
}