From c27d837ab0b2a67c9ab433b3a3daa4b2ad59fb51 Mon Sep 17 00:00:00 2001 From: LandaMm Date: Wed, 4 Jun 2025 12:33:06 +0200 Subject: [PATCH] feat: get users endpoint --- internal/admin/users.go | 59 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 internal/admin/users.go diff --git a/internal/admin/users.go b/internal/admin/users.go new file mode 100644 index 0000000..561acb3 --- /dev/null +++ b/internal/admin/users.go @@ -0,0 +1,59 @@ +package admin + +import ( + "encoding/json" + "log" + "net/http" + "time" + + "gitea.local/admin/hspguard/internal/repository" + "gitea.local/admin/hspguard/internal/web" + "github.com/google/uuid" +) + +type UserDTO struct { + ID uuid.UUID `json:"id"` + Email string `json:"email"` + FullName string `json:"full_name"` + IsAdmin bool `json:"is_admin"` + CreatedAt *time.Time `json:"created_at"` + UpdatedAt *time.Time `json:"updated_at"` + LastLogin *time.Time `json:"last_login"` + PhoneNumber *string `json:"phone_number"` + ProfilePicture *string `json:"profile_picture"` +} + +func NewUserDTO(row *repository.User) UserDTO { + return UserDTO{ + ID: row.ID, + Email: row.Email, + FullName: row.FullName, + IsAdmin: row.IsAdmin, + CreatedAt: row.CreatedAt, + UpdatedAt: row.UpdatedAt, + LastLogin: row.LastLogin, + PhoneNumber: row.PhoneNumber, + ProfilePicture: row.ProfilePicture, + } +} + +func (h *AdminHandler) GetUsers(w http.ResponseWriter, r *http.Request) { + users, err := h.repo.FindAllUsers(r.Context()) + if err != nil { + log.Println("ERR: Failed to query users from db:", err) + web.Error(w, "failed to get all users", http.StatusInternalServerError) + return + } + + var response []UserDTO + + for _, user := range users { + response = append(response, NewUserDTO(&user)) + } + + encoder := json.NewEncoder(w) + + if err := encoder.Encode(&response); err != nil { + web.Error(w, "failed to send response", http.StatusInternalServerError) + } +}