2026-07-02 10:53:44 +08:00

87 lines
2.3 KiB
Go

package team
import (
"errors"
"fmt"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"hyapp-admin-server/internal/modules/shared"
"hyapp-admin-server/internal/repository"
"hyapp-admin-server/internal/response"
)
type Handler struct {
service *Service
audit shared.OperationLogger
}
func New(store *repository.Store, audit shared.OperationLogger) *Handler {
return &Handler{service: NewService(store), audit: audit}
}
func (h *Handler) ListTeams(c *gin.Context) {
teams, err := h.service.ListTeams(c.Query("keyword"))
if err != nil {
response.ServerError(c, "获取团队失败")
return
}
response.OK(c, teamDTOs(teams))
}
func (h *Handler) CreateTeam(c *gin.Context) {
var req teamRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.BadRequest(c, "团队参数不正确")
return
}
team, err := h.service.CreateTeam(Input{Name: req.Name, ParentID: req.ParentID, Description: req.Description, Sort: req.Sort})
if err != nil {
response.BadRequest(c, err.Error())
return
}
shared.OperationLog(c, h.audit, "create-team", "admin_teams", "success", team.Name)
response.Created(c, teamDTO(*team))
}
func (h *Handler) UpdateTeam(c *gin.Context) {
id, ok := shared.ParseID(c, "team_id")
if !ok {
return
}
var req teamRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.BadRequest(c, "团队参数不正确")
return
}
team, err := h.service.UpdateTeam(id, Input{Name: req.Name, ParentID: req.ParentID, Description: req.Description, Sort: req.Sort})
if errors.Is(err, gorm.ErrRecordNotFound) {
response.NotFound(c, "团队不存在")
return
}
if err != nil {
response.BadRequest(c, err.Error())
return
}
shared.OperationLog(c, h.audit, "update-team", "admin_teams", "success", fmt.Sprintf("%d:%s", id, team.Name))
response.OK(c, teamDTO(*team))
}
func (h *Handler) ListTeamUsers(c *gin.Context) {
id, ok := shared.ParseID(c, "team_id")
if !ok {
return
}
options := shared.ListOptions(c)
users, total, err := h.service.ListTeamUsers(shared.ActorFromContext(c), id, options)
if errors.Is(err, gorm.ErrRecordNotFound) {
response.NotFound(c, "团队不存在")
return
}
if err != nil {
response.ServerError(c, "获取团队用户失败")
return
}
response.OK(c, response.Page{Items: shared.UserDTOs(users), Page: options.Page, PageSize: options.PageSize, Total: total})
}