From 05e7b50ec464b85edaec45390964a38cb8c5f705 Mon Sep 17 00:00:00 2001 From: "n.nakhostin" Date: Sat, 6 Sep 2025 15:59:34 +0330 Subject: [PATCH] Refactor User Response Handling in API Endpoints - Updated user-related API handlers to return user entities directly instead of using the ToResponse method, simplifying response structures. - Modified service methods to return UserResponse types instead of User, enhancing consistency in response formats. - Improved pagination handling in the response package by setting default values for sorting parameters, ensuring more predictable behavior in API responses. --- internal/user/handler.go | 10 +++++----- internal/user/service.go | 18 +++++++++--------- pkg/response/response.go | 14 ++++++++++++-- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/internal/user/handler.go b/internal/user/handler.go index 6127b40..c7fd111 100644 --- a/internal/user/handler.go +++ b/internal/user/handler.go @@ -137,7 +137,7 @@ func (h *Handler) GetProfile(c echo.Context) error { return response.NotFound(c, "User not found") } - return response.Success(c, user.ToResponse(), "Profile retrieved successfully") + return response.Success(c, user, "Profile retrieved successfully") } // UpdateProfile updates current user profile @@ -172,7 +172,7 @@ func (h *Handler) UpdateProfile(c echo.Context) error { return response.BadRequest(c, err.Error(), "") } - return response.Success(c, user.ToResponse(), "Profile updated successfully") + return response.Success(c, user, "Profile updated successfully") } // ChangePassword changes current user password @@ -276,7 +276,7 @@ func (h *Handler) CreateUser(c echo.Context) error { return response.BadRequest(c, err.Error(), "") } - return response.Created(c, user.ToResponse(), "User created successfully") + return response.Created(c, user, "User created successfully") } // ListUsers lists users with search and filters (admin only) @@ -342,7 +342,7 @@ func (h *Handler) GetUserByID(c echo.Context) error { return response.NotFound(c, "User not found") } - return response.Success(c, user.ToResponse(), "User retrieved successfully") + return response.Success(c, user, "User retrieved successfully") } // UpdateUser updates a user (admin only) @@ -380,7 +380,7 @@ func (h *Handler) UpdateUser(c echo.Context) error { return response.BadRequest(c, err.Error(), "") } - return response.Success(c, user.ToResponse(), "User updated successfully") + return response.Success(c, user, "User updated successfully") } // DeleteUser deletes a user (admin only) diff --git a/internal/user/service.go b/internal/user/service.go index b27d29e..b349e59 100644 --- a/internal/user/service.go +++ b/internal/user/service.go @@ -16,10 +16,10 @@ import ( // Service defines business logic for user operations type Service interface { // Main CRUD - Register(ctx context.Context, form *CreateUserForm) (*User, error) - Update(ctx context.Context, id string, form *UpdateUserForm) (*User, error) + Register(ctx context.Context, form *CreateUserForm) (*UserResponse, error) + Update(ctx context.Context, id string, form *UpdateUserForm) (*UserResponse, error) UpdateStatus(ctx context.Context, id string, form *UpdateUserStatusForm) error - GetUserByID(ctx context.Context, userID string) (*User, error) + GetUserByID(ctx context.Context, userID string) (*UserResponse, error) Search(ctx context.Context, form *SearchUsersForm, pagination *response.Pagination) (*UserListResponse, error) Delete(ctx context.Context, id string) error @@ -51,7 +51,7 @@ func NewUserService(repository Repository, logger logger.Logger, authService aut } // Register creates a new user -func (s *userService) Register(ctx context.Context, form *CreateUserForm) (*User, error) { +func (s *userService) Register(ctx context.Context, form *CreateUserForm) (*UserResponse, error) { // Check if email already exists existingUser, _ := s.repository.GetByEmail(ctx, form.Email) if existingUser != nil { @@ -112,11 +112,11 @@ func (s *userService) Register(ctx context.Context, form *CreateUserForm) (*User "role": user.Role, }) - return user, nil + return user.ToResponse(), nil } // Update updates user information -func (s *userService) Update(ctx context.Context, id string, form *UpdateUserForm) (*User, error) { +func (s *userService) Update(ctx context.Context, id string, form *UpdateUserForm) (*UserResponse, error) { // Get user user, err := s.repository.GetByID(ctx, id) if err != nil { @@ -184,7 +184,7 @@ func (s *userService) Update(ctx context.Context, id string, form *UpdateUserFor "user_id": id, }) - return user, nil + return user.ToResponse(), nil } // UpdateStatus updates user status @@ -218,13 +218,13 @@ func (s *userService) UpdateStatus(ctx context.Context, id string, form *UpdateU } // GetUserByID retrieves a user by ID -func (s *userService) GetUserByID(ctx context.Context, id string) (*User, error) { +func (s *userService) GetUserByID(ctx context.Context, id string) (*UserResponse, error) { user, err := s.repository.GetByID(ctx, id) if err != nil { return nil, err } - return user, nil + return user.ToResponse(), nil } // Search searches users with search and filters diff --git a/pkg/response/response.go b/pkg/response/response.go index eefbb4e..240c8a9 100644 --- a/pkg/response/response.go +++ b/pkg/response/response.go @@ -191,11 +191,21 @@ func NewPagination(c echo.Context) *Pagination { offset = 0 } + sortBy := c.QueryParam("sort_by") + if sortBy == "" { + sortBy = "created_at" + } + + sortOrder := c.QueryParam("sort_order") + if sortOrder == "" { + sortOrder = "desc" + } + return &Pagination{ Limit: limit, Offset: offset, - SortBy: c.QueryParam("sort_by"), - SortOrder: c.QueryParam("sort_order"), + SortBy: sortBy, + SortOrder: sortOrder, } }