package admin_role import ( "github.com/gin-gonic/gin" "net/http" "sghgogs.com/micro/auth-client/model/base" "sghgogs.com/micro/auth-client/model/response/admin" "sghgogs.com/micro/auth-client/response" "sghgogs.com/micro/auth-client/utils" pb "sghgogs.com/micro/auth-service/proto" "sghgogs.com/micro/common" "strconv" "time" ) type ListAdminRolesResponse struct { Items []admin.RoleItem `json:"items"` TotalCount int64 `json:"total_count"` } func ConvertInt64ToTime(seconds int64) time.Time { return time.Unix(seconds, 0) } // ListAdminRoles // @summary 角色列表 // @Description 获取角色列表 // @Tags Role 角色管理 // @Accept json // @Produce json // @Param Authorization header string true "Bearer 用户令牌" // @Param page query int true "页码" // @Param page_size query int true "每页数量" // @Param keyword query string false "关键字" // @Param status query string false "状态" Enums(enabled, disabled) // @Success 200 {object} response.ApiResponse{data=ListAdminRolesResponse} "成功" // @Failure 400 {object} response.ApiResponse "请求错误" // @Failure 500 {object} response.ApiResponse "内部错误" // @Router /v1/api/admin/roles [get] func (svc *ApiAdminRole) ListAdminRoles(c *gin.Context) { validationConfig := response.ValidationConfig{ Validators: map[string]func(interface{}) error{ "page": response.ValidateInt, // 验证是否为整数 "page_size": response.ValidateInt, // 验证是否为整数 }, Required: []string{"page", "page_size"}, } params, err := response.ParseQueryParameters(c, validationConfig) if err != nil { c.JSON(http.StatusBadRequest, response.ErrorResponse(http.StatusBadRequest, err.Error())) return } page, _ := strconv.Atoi(params["page"].(string)) pageSize, _ := strconv.Atoi(params["page_size"].(string)) keyword, status := "", "" if value, ok := params["keyword"]; ok { keyword = value.(string) } if value, ok := params["status"]; ok { status = value.(string) if status != "" && !base.IsValidStatus(status) { c.JSON(http.StatusBadRequest, gin.H{"error": common.ErrorMessage[common.StatusIsNotValid]}) return } } ctx, _ := utils.CreateContextWithToken(c, "authorizationservice", "AdminRoleService.ListAdminRoles") adminRoles := pb.ListAdminRolesRequest{ Page: int32(page), PageSize: int32(pageSize), Keyword: keyword, } if status != "" { enum, _ := base.MapStatusToEnum(base.Status(status)) adminRoles.Status = enum } listAdminRoles, err := svc.Service.ListAdminRoles(ctx, &adminRoles) if err != nil { code, mgs := response.MicroErrorRequest(err) c.JSON(code, response.ErrorResponse(code, mgs)) return } items := make([]admin.RoleItem, 0) for _, role := range listAdminRoles.Items { var item admin.RoleItem common.SwapTo(role, &item) toStatus, _ := base.MapEnumToStatus(role.Status) item.Status = string(toStatus) item.UpdatedAt = ConvertInt64ToTime(role.UpdatedAt) item.CreatedAt = ConvertInt64ToTime(role.CreatedAt) item.IsReserved = role.IsReserved item.Users = base.UsersToResponse(role.Users) item.Permissions = base.PermissionsToResponse(role.Permissions) items = append(items, item) } c.JSON(http.StatusOK, response.SuccessResponse(ListAdminRolesResponse{ Items: items, TotalCount: listAdminRoles.TotalCount, })) }