Files
EchoChat/backend/go-service/app/admin/controller/online_controller.go
bujinyuan 2c59500e27 fix(phase2a): 代码审查修复 - 8项关键/重要问题
安全修复:
- WebSocket Token 增加 Redis 有效性校验(已登出用户无法建立 WS)

功能修复:
- GetRecommendFriends 改为批量查询,正确返回用户名/昵称/头像
- 上下线通知:OnlineService 通过接口注入获取好友列表推送状态变更
- 管理端在线用户 API 补充用户名信息

代码质量:
- 所有 json.Marshal/Redis 错误增加检查与日志
- ContactController 13 个 endpoint 统一走 handleError 业务错误映射
- 管理端 Controller 补全包注释、函数注释和结构化日志
- 前端 5 个联系人页面 avatar 工具函数抽取到 utils/avatar.js

Made-with: Cursor
2026-03-02 18:48:28 +08:00

55 lines
1.7 KiB
Go

// Package controller 提供 admin 模块的 HTTP 接口处理
package controller
import (
"github.com/echochat/backend/app/admin/service"
"github.com/echochat/backend/pkg/logs"
"github.com/echochat/backend/pkg/utils"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
// OnlineController 在线用户管理控制器(管理端)
type OnlineController struct {
onlineManageService *service.OnlineManageService
}
// NewOnlineController 创建 OnlineController 实例
func NewOnlineController(onlineManageService *service.OnlineManageService) *OnlineController {
return &OnlineController{onlineManageService: onlineManageService}
}
// GetOnlineUsers 获取在线用户列表
// GET /api/v1/admin/online/users
func (ctl *OnlineController) GetOnlineUsers(c *gin.Context) {
funcName := "admin.online_controller.GetOnlineUsers"
ctx := c.Request.Context()
users, err := ctl.onlineManageService.GetOnlineUsers(ctx)
if err != nil {
logs.Error(ctx, funcName, "获取在线用户列表失败", zap.Error(err))
utils.ResponseError(c, "获取在线用户列表失败")
return
}
logs.Info(ctx, funcName, "获取在线用户列表成功", zap.Int("count", len(users)))
utils.ResponseOK(c, users)
}
// GetOnlineCount 获取在线用户总数
// GET /api/v1/admin/online/count
func (ctl *OnlineController) GetOnlineCount(c *gin.Context) {
funcName := "admin.online_controller.GetOnlineCount"
ctx := c.Request.Context()
count, err := ctl.onlineManageService.GetOnlineCount(ctx)
if err != nil {
logs.Error(ctx, funcName, "获取在线用户数失败", zap.Error(err))
utils.ResponseError(c, "获取在线用户数失败")
return
}
logs.Info(ctx, funcName, "获取在线用户数成功", zap.Int64("count", count))
utils.ResponseOK(c, gin.H{"count": count})
}