diff --git a/backend/src/main/java/online/wesal/wesal/controller/AuthController.java b/backend/src/main/java/online/wesal/wesal/controller/AuthController.java index 632d7a8..2479b64 100644 --- a/backend/src/main/java/online/wesal/wesal/controller/AuthController.java +++ b/backend/src/main/java/online/wesal/wesal/controller/AuthController.java @@ -6,6 +6,7 @@ import jakarta.validation.Valid; import online.wesal.wesal.dto.CreateUserRequest; import online.wesal.wesal.dto.LoginRequest; import online.wesal.wesal.dto.LoginResponse; +import online.wesal.wesal.dto.UpdateUserRequest; import online.wesal.wesal.dto.UsernameSelectionRequest; import online.wesal.wesal.entity.User; import online.wesal.wesal.service.AuthService; @@ -67,6 +68,22 @@ public class AuthController { } } + @PostMapping("/updateUser") + @Operation(summary = "Update user information", description = "Update authenticated user's fcmToken, displayName, avatar, or password") + public ResponseEntity> updateUser(@Valid @RequestBody UpdateUserRequest request) { + try { + User user = userService.updateUser( + request.getFcmToken(), + request.getDisplayName(), + request.getAvatar(), + request.getPassword() + ); + return ResponseEntity.ok(Map.of("status", 200, "user", user)); + } catch (RuntimeException e) { + return ResponseEntity.badRequest().body(Map.of("status", 400, "message", e.getMessage())); + } + } + @PostMapping("/admin/createUser") @Operation(summary = "Create new user (Admin only)", description = "Creates a new user - requires admin privileges") public ResponseEntity createUser(@Valid @RequestBody CreateUserRequest request) { diff --git a/backend/src/main/java/online/wesal/wesal/dto/UpdateUserRequest.java b/backend/src/main/java/online/wesal/wesal/dto/UpdateUserRequest.java new file mode 100644 index 0000000..1f5b171 --- /dev/null +++ b/backend/src/main/java/online/wesal/wesal/dto/UpdateUserRequest.java @@ -0,0 +1,49 @@ +package online.wesal.wesal.dto; + +import jakarta.validation.constraints.Size; + +public class UpdateUserRequest { + + private String fcmToken; + + private String displayName; + + private String avatar; + + @Size(min = 8, message = "Password must be at least 8 characters long") + private String password; + + public UpdateUserRequest() {} + + public String getFcmToken() { + return fcmToken; + } + + public void setFcmToken(String fcmToken) { + this.fcmToken = fcmToken; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} \ No newline at end of file diff --git a/backend/src/main/java/online/wesal/wesal/service/UserService.java b/backend/src/main/java/online/wesal/wesal/service/UserService.java index 9a0e790..9dd0f91 100644 --- a/backend/src/main/java/online/wesal/wesal/service/UserService.java +++ b/backend/src/main/java/online/wesal/wesal/service/UserService.java @@ -55,4 +55,26 @@ public class UserService { User user = new User(email, passwordEncoder.encode(password), displayName); return userRepository.save(user); } + + public User updateUser(String fcmToken, String displayName, String avatar, String password) { + User user = getCurrentUser(); + + if (fcmToken != null && !fcmToken.trim().isEmpty()) { + user.setFcmToken(fcmToken); + } + + if (displayName != null && !displayName.trim().isEmpty()) { + user.setDisplayName(displayName); + } + + if (avatar != null) { + user.setAvatar(avatar); + } + + if (password != null && !password.trim().isEmpty()) { + user.setPassword(passwordEncoder.encode(password)); + } + + return userRepository.save(user); + } } \ No newline at end of file