Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 25s
feat(admin): 新增工会管理功能 feat(activity): 添加活动管理相关服务 feat(user): 实现用户道具卡和积分管理 feat(guild): 新增工会成员管理功能 fix: 修复数据库连接配置 fix: 修正jwtoken导入路径 fix: 解决端口冲突问题 style: 统一代码格式和注释风格 style: 更新项目常量命名 docs: 添加项目框架和开发规范文档 docs: 更新接口文档注释 chore: 移除无用代码和文件 chore: 更新Makefile和配置文件 chore: 清理日志文件 test: 添加道具卡测试脚本
228 lines
6.8 KiB
Go
228 lines
6.8 KiB
Go
package admin
|
|
|
|
import (
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"bindbox-game/internal/pkg/core"
|
|
"bindbox-game/internal/pkg/validation"
|
|
"bindbox-game/internal/repository/mysql/model"
|
|
)
|
|
|
|
type roleListRequest struct {
|
|
RoleId int64 `form:"roleId"`
|
|
RoleName string `form:"roleName"`
|
|
RoleCode string `form:"roleCode"`
|
|
Description string `form:"description"`
|
|
Enabled *bool `form:"enabled"`
|
|
Current int `form:"current"`
|
|
Size int `form:"size"`
|
|
}
|
|
|
|
type roleItem struct {
|
|
RoleId int64 `json:"roleId"`
|
|
RoleName string `json:"roleName"`
|
|
RoleCode string `json:"roleCode"`
|
|
Description string `json:"description"`
|
|
Enabled bool `json:"enabled"`
|
|
CreateTime string `json:"createTime"`
|
|
}
|
|
|
|
type roleListResponse struct {
|
|
Records []roleItem `json:"records"`
|
|
Current int `json:"current"`
|
|
Size int `json:"size"`
|
|
Total int64 `json:"total"`
|
|
}
|
|
|
|
// ListRoles 角色列表
|
|
// @Summary 角色列表
|
|
// @Tags 管理端.系统
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param current query int true "页码" default(1)
|
|
// @Param size query int true "每页数量" default(20)
|
|
// @Param roleName query string false "角色名称"
|
|
// @Param roleCode query string false "角色编码"
|
|
// @Param enabled query bool false "是否启用"
|
|
// @Success 200 {object} roleListResponse
|
|
// @Router /api/role/list [get]
|
|
// @Security LoginVerifyToken
|
|
func (h *handler) ListRoles() core.HandlerFunc {
|
|
return func(ctx core.Context) {
|
|
req := new(roleListRequest)
|
|
res := new(roleListResponse)
|
|
if err := ctx.ShouldBindForm(req); err != nil {
|
|
ctx.AbortWithError(core.Error(http.StatusBadRequest, 10011, validation.Error(err)))
|
|
return
|
|
}
|
|
if req.Current <= 0 {
|
|
req.Current = 1
|
|
}
|
|
if req.Size <= 0 {
|
|
req.Size = 20
|
|
}
|
|
q := h.readDB.Roles.WithContext(ctx.RequestContext()).ReadDB()
|
|
if req.RoleName != "" {
|
|
q = q.Where(h.readDB.Roles.RoleName.Like("%" + req.RoleName + "%"))
|
|
}
|
|
if req.RoleCode != "" {
|
|
q = q.Where(h.readDB.Roles.RoleCode.Like("%" + req.RoleCode + "%"))
|
|
}
|
|
if req.Enabled != nil {
|
|
q = q.Where(h.readDB.Roles.Enabled.Is(*req.Enabled))
|
|
}
|
|
total, err := q.Count()
|
|
if err != nil {
|
|
ctx.AbortWithError(core.Error(http.StatusBadRequest, 10012, err.Error()))
|
|
return
|
|
}
|
|
rows, err := q.Offset((req.Current - 1) * req.Size).Limit(req.Size).Find()
|
|
if err != nil {
|
|
ctx.AbortWithError(core.Error(http.StatusBadRequest, 10013, err.Error()))
|
|
return
|
|
}
|
|
res.Records = make([]roleItem, len(rows))
|
|
for i, r := range rows {
|
|
res.Records[i] = roleItem{
|
|
RoleId: r.ID,
|
|
RoleName: r.RoleName,
|
|
RoleCode: r.RoleCode,
|
|
Description: r.Description,
|
|
Enabled: r.Enabled,
|
|
CreateTime: r.CreatedAt.Format("2006-01-02 15:04:05"),
|
|
}
|
|
}
|
|
res.Current = req.Current
|
|
res.Size = req.Size
|
|
res.Total = total
|
|
ctx.Payload(res)
|
|
}
|
|
}
|
|
|
|
type createRoleRequest struct {
|
|
RoleName string `json:"roleName" binding:"required"`
|
|
RoleCode string `json:"roleCode" binding:"required"`
|
|
Description string `json:"description"`
|
|
Enabled bool `json:"enabled"`
|
|
}
|
|
|
|
func (h *handler) CreateRole() core.HandlerFunc {
|
|
return func(ctx core.Context) {
|
|
req := new(createRoleRequest)
|
|
if err := ctx.ShouldBindJSON(req); err != nil {
|
|
ctx.AbortWithError(core.Error(http.StatusBadRequest, 10014, validation.Error(err)))
|
|
return
|
|
}
|
|
err := h.writeDB.Roles.WithContext(ctx.RequestContext()).Create(&model.Roles{RoleName: req.RoleName, RoleCode: req.RoleCode, Description: req.Description, Enabled: req.Enabled})
|
|
if err != nil {
|
|
ctx.AbortWithError(core.Error(http.StatusBadRequest, 10015, err.Error()))
|
|
return
|
|
}
|
|
ctx.Payload(map[string]string{"message": "ok"})
|
|
}
|
|
}
|
|
|
|
type modifyRoleRequest struct {
|
|
RoleName *string `json:"roleName"`
|
|
Description *string `json:"description"`
|
|
Enabled *bool `json:"enabled"`
|
|
}
|
|
|
|
func (h *handler) ModifyRole() core.HandlerFunc {
|
|
return func(ctx core.Context) {
|
|
req := new(modifyRoleRequest)
|
|
if err := ctx.ShouldBindJSON(req); err != nil {
|
|
ctx.AbortWithError(core.Error(http.StatusBadRequest, 10016, validation.Error(err)))
|
|
return
|
|
}
|
|
idStr := ctx.Param("role_id")
|
|
id, _ := strconv.ParseInt(idStr, 10, 64)
|
|
updater := h.writeDB.Roles.WithContext(ctx.RequestContext()).Where(h.writeDB.Roles.ID.Eq(id))
|
|
set := map[string]any{}
|
|
if req.RoleName != nil {
|
|
set["role_name"] = *req.RoleName
|
|
}
|
|
if req.Description != nil {
|
|
set["description"] = *req.Description
|
|
}
|
|
if req.Enabled != nil {
|
|
set["enabled"] = *req.Enabled
|
|
}
|
|
if len(set) == 0 {
|
|
ctx.Payload(map[string]string{"message": "ok"})
|
|
return
|
|
}
|
|
if _, err := updater.Updates(set); err != nil {
|
|
ctx.AbortWithError(core.Error(http.StatusBadRequest, 10017, err.Error()))
|
|
return
|
|
}
|
|
ctx.Payload(map[string]string{"message": "ok"})
|
|
}
|
|
}
|
|
|
|
func (h *handler) DeleteRole() core.HandlerFunc {
|
|
return func(ctx core.Context) {
|
|
idStr := ctx.Param("role_id")
|
|
id, _ := strconv.ParseInt(idStr, 10, 64)
|
|
if _, err := h.writeDB.Roles.WithContext(ctx.RequestContext()).Where(h.writeDB.Roles.ID.Eq(id)).Delete(); err != nil {
|
|
ctx.AbortWithError(core.Error(http.StatusBadRequest, 10018, err.Error()))
|
|
return
|
|
}
|
|
ctx.Payload(map[string]string{"message": "ok"})
|
|
}
|
|
}
|
|
|
|
type assignUsersRequest struct {
|
|
AdminIDs []int64 `json:"admin_ids" binding:"required"`
|
|
}
|
|
|
|
func (h *handler) AssignRoleUsers() core.HandlerFunc {
|
|
return func(ctx core.Context) {
|
|
idStr := ctx.Param("role_id")
|
|
id, _ := strconv.ParseInt(idStr, 10, 64)
|
|
req := new(assignUsersRequest)
|
|
if err := ctx.ShouldBindJSON(req); err != nil {
|
|
ctx.AbortWithError(core.Error(http.StatusBadRequest, 10019, validation.Error(err)))
|
|
return
|
|
}
|
|
tx := h.writeDB.RoleUsers.WithContext(ctx.RequestContext())
|
|
for _, uid := range req.AdminIDs {
|
|
err := tx.Create(&model.RoleUsers{RoleID: id, AdminID: int32(uid)})
|
|
if err != nil {
|
|
ctx.AbortWithError(core.Error(http.StatusBadRequest, 10020, err.Error()))
|
|
return
|
|
}
|
|
}
|
|
ctx.Payload(map[string]string{"message": "ok"})
|
|
}
|
|
}
|
|
|
|
func (h *handler) ListRoleUsers() core.HandlerFunc {
|
|
return func(ctx core.Context) {
|
|
idStr := ctx.Param("role_id")
|
|
id, _ := strconv.ParseInt(idStr, 10, 64)
|
|
rows, err := h.readDB.RoleUsers.WithContext(ctx.RequestContext()).Where(h.readDB.RoleUsers.RoleID.Eq(id)).Find()
|
|
if err != nil {
|
|
ctx.AbortWithError(core.Error(http.StatusBadRequest, 10022, err.Error()))
|
|
return
|
|
}
|
|
ctx.Payload(rows)
|
|
}
|
|
}
|
|
|
|
func (h *handler) RemoveRoleUser() core.HandlerFunc {
|
|
return func(ctx core.Context) {
|
|
roleIDStr := ctx.Param("role_id")
|
|
adminIDStr := ctx.Param("admin_id")
|
|
roleID, _ := strconv.ParseInt(roleIDStr, 10, 64)
|
|
adminID, _ := strconv.ParseInt(adminIDStr, 10, 64)
|
|
_, err := h.writeDB.RoleUsers.WithContext(ctx.RequestContext()).Where(h.writeDB.RoleUsers.RoleID.Eq(roleID), h.writeDB.RoleUsers.AdminID.Eq(int32(adminID))).Delete()
|
|
if err != nil {
|
|
ctx.AbortWithError(core.Error(http.StatusBadRequest, 10023, err.Error()))
|
|
return
|
|
}
|
|
ctx.Payload(map[string]string{"message": "ok"})
|
|
}
|
|
}
|