From c6998f33e13b853ee0b79777decefbe48a0efb06 Mon Sep 17 00:00:00 2001 From: LandaMm Date: Wed, 4 Jun 2025 12:46:24 +0200 Subject: [PATCH] feat: move user dto outside --- internal/admin/users.go | 33 ++++++++++++++------------------- internal/auth/routes.go | 20 ++++++++++---------- internal/types/user.go | 19 +++++++++++++++++++ 3 files changed, 43 insertions(+), 29 deletions(-) create mode 100644 internal/types/user.go diff --git a/internal/admin/users.go b/internal/admin/users.go index 561acb3..4af7b4c 100644 --- a/internal/admin/users.go +++ b/internal/admin/users.go @@ -4,27 +4,14 @@ import ( "encoding/json" "log" "net/http" - "time" "gitea.local/admin/hspguard/internal/repository" + "gitea.local/admin/hspguard/internal/types" "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{ +func NewUserDTO(row *repository.User) types.UserDTO { + return types.UserDTO{ ID: row.ID, Email: row.Email, FullName: row.FullName, @@ -45,15 +32,23 @@ func (h *AdminHandler) GetUsers(w http.ResponseWriter, r *http.Request) { return } - var response []UserDTO + type Response struct { + Items []types.UserDTO `json:"items"` + Count int `json:"count"` + } + + var items []types.UserDTO for _, user := range users { - response = append(response, NewUserDTO(&user)) + items = append(items, NewUserDTO(&user)) } encoder := json.NewEncoder(w) - if err := encoder.Encode(&response); err != nil { + if err := encoder.Encode(&Response{ + Items: items, + Count: len(items), + }); err != nil { web.Error(w, "failed to send response", http.StatusInternalServerError) } } diff --git a/internal/auth/routes.go b/internal/auth/routes.go index 9d1628b..7b5dbd6 100644 --- a/internal/auth/routes.go +++ b/internal/auth/routes.go @@ -160,16 +160,16 @@ func (h *AuthHandler) getProfile(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") - if err := json.NewEncoder(w).Encode(map[string]any{ - "id": user.ID.String(), - "full_name": user.FullName, - "email": user.Email, - "phone_number": user.PhoneNumber, - "isAdmin": user.IsAdmin, - "last_login": user.LastLogin, - "profile_picture": user.ProfilePicture, - "updated_at": user.UpdatedAt, - "created_at": user.CreatedAt, + if err := json.NewEncoder(w).Encode(types.UserDTO{ + ID: user.ID, + FullName: user.FullName, + Email: user.Email, + PhoneNumber: user.PhoneNumber, + IsAdmin: user.IsAdmin, + LastLogin: user.LastLogin, + ProfilePicture: user.ProfilePicture, + UpdatedAt: user.UpdatedAt, + CreatedAt: user.CreatedAt, }); err != nil { web.Error(w, "failed to encode user profile", http.StatusInternalServerError) } diff --git a/internal/types/user.go b/internal/types/user.go new file mode 100644 index 0000000..e6a8806 --- /dev/null +++ b/internal/types/user.go @@ -0,0 +1,19 @@ +package types + +import ( + "time" + + "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"` +}