Files
EchoChat/backend/go-service/app/admin/controller/meeting_manage_controller.go
2026-05-18 19:42:55 +08:00

90 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Package controller 提供 admin 模块的 HTTP 入口(会议管理)
package controller
import (
"errors"
"strconv"
"github.com/echochat/backend/app/admin/service"
"github.com/echochat/backend/app/dto"
"github.com/echochat/backend/pkg/logs"
"github.com/echochat/backend/pkg/utils"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
// MeetingManageController 管理端会议管理 HTTP 控制器
//
// 路由(在 admin/router.go 中挂载到 /api/v1/admin/meetings 下JWT + admin 角色):
// - GET /api/v1/admin/meetings 分页列表 + 多条件筛选
// - GET /api/v1/admin/meetings/stats 会议管理摘要统计
// - GET /api/v1/admin/meetings/:id 会议详情(含参与者、录制列表)
type MeetingManageController struct {
svc *service.MeetingManageService
}
// NewMeetingManageController Wire Provider
func NewMeetingManageController(svc *service.MeetingManageService) *MeetingManageController {
return &MeetingManageController{svc: svc}
}
// GetMeetingList GET /api/v1/admin/meetings
func (ctl *MeetingManageController) GetMeetingList(c *gin.Context) {
ctx := c.Request.Context()
var req dto.AdminMeetingListRequest
if err := c.ShouldBindQuery(&req); err != nil {
utils.ResponseBadRequest(c, "参数格式错误")
return
}
resp, err := ctl.svc.GetMeetingList(ctx, &req)
if err != nil {
ctl.handleError(c, err, "获取会议列表失败")
return
}
utils.ResponseSuccess(c, resp)
}
// GetMeetingDetail GET /api/v1/admin/meetings/:id
func (ctl *MeetingManageController) GetMeetingDetail(c *gin.Context) {
ctx := c.Request.Context()
id, err := strconv.ParseInt(c.Param("id"), 10, 64)
if err != nil || id <= 0 {
utils.ResponseBadRequest(c, "会议 ID 非法")
return
}
resp, err := ctl.svc.GetMeetingDetail(ctx, id)
if err != nil {
ctl.handleError(c, err, "获取会议详情失败")
return
}
utils.ResponseSuccess(c, resp)
}
// GetMeetingStats GET /api/v1/admin/meetings/stats
func (ctl *MeetingManageController) GetMeetingStats(c *gin.Context) {
ctx := c.Request.Context()
resp, err := ctl.svc.GetStats(ctx)
if err != nil {
ctl.handleError(c, err, "获取会议统计失败")
return
}
utils.ResponseSuccess(c, resp)
}
// handleError 统一业务错误映射
func (ctl *MeetingManageController) handleError(c *gin.Context, err error, fallbackMsg string) {
switch {
case errors.Is(err, service.ErrMeetingNotFound):
utils.ResponseNotFound(c, err.Error())
default:
logs.Warn(c.Request.Context(), "controller.meeting_manage_controller.handleError",
fallbackMsg, zap.Error(err))
utils.ResponseError(c, fallbackMsg)
}
}