refactor: 后端代码优化 11 项(codestable/refactors/2026-04-25-backend-cleanup)

- 提取 getWKFromContext 辅助函数,消除 handler 中 5 处重复代码
- 提取 retryCode 函数,消除 Login/performStudy 中验证码重试重复
- 提取 removeSession 内部方法,消除 Del/ClearAll/ClearExpired 中 3 处重复
- 提取 WK.UserKey() 方法,消除 4 处 userKey 手动拼接
- SessionManager.Get() 改用 RLock 优化读性能
- GetRecords 递归分页改为迭代,避免栈溢出
- prepareRequestClient 添加配置缓存,仅在 debug 设置变化时重建
- 修正 schedule.go 时区为 Asia/Shanghai + cron "0 6 * * *"
- 修正 typo "以达到" → "已达到"
- 删除未使用的 QAList struct
- 修复 bufferHub.append 切片内存泄漏

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-26 13:07:45 +08:00
parent 2a6732ffe7
commit 536aa506f9
9 changed files with 488 additions and 94 deletions

View File

@@ -22,6 +22,16 @@ func NewWKHandler() *WKHandler {
}
}
// getWKFromContext 从 gin.Context 中提取 wk_instance不存在时自动返回错误响应
func getWKFromContext(ctx *gin.Context) (*ckwk.WK, bool) {
val, ok := ctx.Get("wk_instance")
if !ok {
ctx.JSON(200, dto.Error(-1, "登录已过期"))
return nil, false
}
return val.(*ckwk.WK), true
}
func (h *WKHandler) Login(ctx *gin.Context) {
var req dto.LoginReq
if err := ctx.ShouldBindJSON(&req); err != nil {
@@ -65,12 +75,10 @@ func (h *WKHandler) Login(ctx *gin.Context) {
}
func (h *WKHandler) Online(ctx *gin.Context) {
val, ok := ctx.Get("wk_instance")
wk, ok := getWKFromContext(ctx)
if !ok {
ctx.JSON(http.StatusOK, dto.Error(-1, "登录已过期"))
return
}
wk := val.(*ckwk.WK)
flag, err := wk.Online()
if err != nil {
@@ -96,12 +104,10 @@ func (h *WKHandler) Logout(ctx *gin.Context) {
}
func (h *WKHandler) UserInfo(ctx *gin.Context) {
val, ok := ctx.Get("wk_instance")
wk, ok := getWKFromContext(ctx)
if !ok {
ctx.JSON(200, dto.Error(-1, "登录已过期"))
return
}
wk := val.(*ckwk.WK)
userinfo, err := wk.UserInfoGet()
if err != nil {
@@ -121,12 +127,10 @@ func (h *WKHandler) Course(ctx *gin.Context) {
return
}
val, ok := ctx.Get("wk_instance")
wk, ok := getWKFromContext(ctx)
if !ok {
ctx.JSON(200, dto.Error(-1, "登录已过期"))
return
}
wk := val.(*ckwk.WK)
courses, err := wk.CourseGet(req.Status)
if err != nil {
@@ -140,12 +144,10 @@ func (h *WKHandler) Course(ctx *gin.Context) {
}
func (h *WKHandler) Study(ctx *gin.Context) {
val, ok := ctx.Get("wk_instance")
wk, ok := getWKFromContext(ctx)
if !ok {
ctx.JSON(200, dto.Error(-1, "登录已过期"))
return
}
wk := val.(*ckwk.WK)
var req dto.StudyReq
if err := ctx.ShouldBindJSON(&req); err != nil {
@@ -167,12 +169,10 @@ func (h *WKHandler) Study(ctx *gin.Context) {
}
func (h *WKHandler) AllRecord(ctx *gin.Context) {
val, ok := ctx.Get("wk_instance")
wk, ok := getWKFromContext(ctx)
if !ok {
ctx.JSON(200, dto.Error(-1, "登录已过期"))
return
}
wk := val.(*ckwk.WK)
var req dto.AllRecordReq
if err := ctx.ShouldBindJSON(&req); err != nil {