list_admin_roles.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package admin_role
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "net/http"
  5. "sghgogs.com/sghblog/authorization-client/model/base"
  6. "sghgogs.com/sghblog/authorization-client/model/response/admin"
  7. "sghgogs.com/sghblog/authorization-client/response"
  8. "sghgogs.com/sghblog/authorization-client/utils"
  9. pb "sghgogs.com/sghblog/authorization-service/proto"
  10. "sghgogs.com/sghblog/common"
  11. "strconv"
  12. "time"
  13. )
  14. type ListAdminRolesResponse struct {
  15. Items []admin.RoleItem `json:"items"`
  16. TotalCount int64 `json:"total_count"`
  17. }
  18. func ConvertInt64ToTime(seconds int64) time.Time {
  19. return time.Unix(seconds, 0)
  20. }
  21. // ListAdminRoles
  22. // @summary 角色列表
  23. // @Description 获取角色列表
  24. // @Tags Role 角色管理
  25. // @Accept json
  26. // @Produce json
  27. // @Param Authorization header string true "Bearer 用户令牌"
  28. // @Param page query int true "页码"
  29. // @Param page_size query int true "每页数量"
  30. // @Param keyword query string false "关键字"
  31. // @Param status query string false "状态" Enums(enabled, disabled)
  32. // @Success 200 {object} response.ApiResponse{data=ListAdminRolesResponse} "成功"
  33. // @Failure 400 {object} response.ApiResponse "请求错误"
  34. // @Failure 500 {object} response.ApiResponse "内部错误"
  35. // @Router /v1/api/admin/roles [get]
  36. func (svc *ApiAdminRole) ListAdminRoles(c *gin.Context) {
  37. validationConfig := response.ValidationConfig{
  38. Validators: map[string]func(interface{}) error{
  39. "page": response.ValidateInt, // 验证是否为整数
  40. "page_size": response.ValidateInt, // 验证是否为整数
  41. },
  42. Required: []string{"page", "page_size"},
  43. }
  44. params, err := response.ParseQueryParameters(c, validationConfig)
  45. if err != nil {
  46. c.JSON(http.StatusBadRequest, response.ErrorResponse(http.StatusBadRequest, err.Error()))
  47. return
  48. }
  49. page, _ := strconv.Atoi(params["page"].(string))
  50. pageSize, _ := strconv.Atoi(params["page_size"].(string))
  51. keyword, status := "", ""
  52. if value, ok := params["keyword"]; ok {
  53. keyword = value.(string)
  54. }
  55. if value, ok := params["status"]; ok {
  56. status = value.(string)
  57. if status != "" && !base.IsValidStatus(status) {
  58. c.JSON(http.StatusBadRequest, gin.H{"error": common.ErrorMessage[common.StatusIsNotValid]})
  59. return
  60. }
  61. }
  62. ctx, _ := utils.CreateContextWithToken(c, "authorizationservice", "AdminRoleService.ListAdminRoles")
  63. adminRoles := pb.ListAdminRolesRequest{
  64. Page: int32(page),
  65. PageSize: int32(pageSize),
  66. Keyword: keyword,
  67. }
  68. if status != "" {
  69. enum, _ := base.MapStatusToEnum(base.Status(status))
  70. adminRoles.Status = enum
  71. }
  72. listAdminRoles, err := svc.Service.ListAdminRoles(ctx, &adminRoles)
  73. if err != nil {
  74. code, mgs := response.MicroErrorRequest(err)
  75. c.JSON(code, response.ErrorResponse(code, mgs))
  76. return
  77. }
  78. items := make([]admin.RoleItem, 0)
  79. for _, role := range listAdminRoles.Items {
  80. var item admin.RoleItem
  81. common.SwapTo(role, &item)
  82. toStatus, _ := base.MapEnumToStatus(role.Status)
  83. item.Status = string(toStatus)
  84. item.UpdatedAt = ConvertInt64ToTime(role.UpdatedAt)
  85. item.CreatedAt = ConvertInt64ToTime(role.CreatedAt)
  86. item.IsReserved = role.IsReserved
  87. item.Users = base.UsersToResponse(role.Users)
  88. item.Permissions = base.PermissionsToResponse(role.Permissions)
  89. items = append(items, item)
  90. }
  91. c.JSON(http.StatusOK, response.SuccessResponse(ListAdminRolesResponse{
  92. Items: items,
  93. TotalCount: listAdminRoles.TotalCount,
  94. }))
  95. }