list.go
1 package users 2 3 import ( 4 "context" 5 // "github.com/google/uuid" 6 7 "github.com/gofiber/fiber/v2" 8 "go.uber.org/zap" 9 // "github.com/mrusme/journalist/ent/user" 10 // "github.com/mrusme/journalist/ent" 11 ) 12 13 type UserListResponse struct { 14 Success bool `json:"success"` 15 Users *[]UserShowModel `json:"users"` 16 Message string `json:"message"` 17 } 18 19 // List godoc 20 // @Summary List users 21 // @Description Get all users 22 // @Tags users 23 // @Accept json 24 // @Produce json 25 // @Success 200 {object} UserListResponse 26 // @Failure 400 {object} UserListResponse 27 // @Failure 404 {object} UserListResponse 28 // @Failure 500 {object} UserListResponse 29 // @Router /users [get] 30 // @security BasicAuth 31 func (h *handler) List(ctx *fiber.Ctx) error { 32 var err error 33 34 role := ctx.Locals("role").(string) 35 36 if role != "admin" { 37 h.logger.Debug( 38 "User not allowed to list users", 39 zap.Error(err), 40 ) 41 return ctx. 42 Status(fiber.StatusForbidden). 43 JSON(UserListResponse{ 44 Success: false, 45 Users: nil, 46 Message: "Only admins are allowed to list users", 47 }) 48 } 49 50 dbUsers, err := h.entClient.User. 51 Query(). 52 All(context.Background()) 53 if err != nil { 54 return ctx. 55 Status(fiber.StatusInternalServerError). 56 JSON(UserListResponse{ 57 Success: false, 58 Users: nil, 59 Message: err.Error(), 60 }) 61 } 62 63 showUsers := make([]UserShowModel, len(dbUsers)) 64 65 for i, dbUser := range dbUsers { 66 showUsers[i] = UserShowModel{ 67 ID: dbUser.ID.String(), 68 Username: dbUser.Username, 69 Role: dbUser.Role, 70 } 71 } 72 73 return ctx. 74 Status(fiber.StatusOK). 75 JSON(UserListResponse{ 76 Success: true, 77 Users: &showUsers, 78 Message: "", 79 }) 80 }