package user import ( "RenewCMS/api/pkg/apperr" "RenewCMS/api/pkg/claims" "RenewCMS/api/pkg/publicuser" validator "RenewCMS/api/pkg/validator" "RenewCMS/internal/domain/user" "RenewCMS/internal/infrastructure/useCases" "encoding/json" "errors" "net/http" ) type Handler struct { UpdateProfileUseCase *useCases.UpdateUserProfileUseCase } type UpdateProfileRequest struct { DisplayName *string `json:"display_name" validate:"required"` } func NewHandler(updateProfile *useCases.UpdateUserProfileUseCase) *Handler { return &Handler{ UpdateProfileUseCase: updateProfile, } } func (h *Handler) UpdateMe(w http.ResponseWriter, r *http.Request) { var request UpdateProfileRequest err := json.NewDecoder(r.Body).Decode(&request) if err != nil { http.Error(w, apperr.BodyErrorMessage, http.StatusBadRequest) return } err = validator.Validate.Struct(request) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } userId, ok := claims.UserId(r) if !ok { http.Error(w, apperr.UnauthorizedErrorMessage, http.StatusUnauthorized) return } updatedUser, err := h.UpdateProfileUseCase.UpdateDisplayName(userId, *request.DisplayName) if err != nil { if errors.Is(err, user.ErrInvalidDisplayName) { http.Error(w, apperr.DisplayNameErrorMessage, http.StatusBadRequest) return } if errors.Is(err, user.ErrUserNotFound) { http.Error(w, apperr.UnauthorizedErrorMessage, http.StatusUnauthorized) return } http.Error(w, "Internal server error", http.StatusInternalServerError) return } body, err := json.Marshal(publicuser.New(updatedUser)) if err != nil { http.Error(w, "Internal server error", http.StatusInternalServerError) return } w.Header().Set("Cache-Control", "no-store") _, _ = w.Write(body) }