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 2479b64..3da8b40 100644 --- a/backend/src/main/java/online/wesal/wesal/controller/AuthController.java +++ b/backend/src/main/java/online/wesal/wesal/controller/AuthController.java @@ -69,18 +69,39 @@ public class AuthController { } @PostMapping("/updateUser") - @Operation(summary = "Update user information", description = "Update authenticated user's fcmToken, displayName, avatar, or password") + @Operation(summary = "Update user information", description = "Update authenticated user's fcmToken, displayName, avatar, password, or username") public ResponseEntity> updateUser(@Valid @RequestBody UpdateUserRequest request) { try { User user = userService.updateUser( request.getFcmToken(), request.getDisplayName(), request.getAvatar(), - request.getPassword() + request.getPassword(), + request.getUsername() ); - return ResponseEntity.ok(Map.of("status", 200, "user", user)); + + // Create user data without password + Map userData = Map.of( + "id", user.getId(), + "email", user.getEmail(), + "username", user.getUsername() != null ? user.getUsername() : "", + "displayName", user.getDisplayName(), + "avatar", user.getAvatar() != null ? user.getAvatar() : "", + "fcmToken", user.getFcmToken() != null ? user.getFcmToken() : "", + "activated", user.isActivated(), + "role", user.getRole() + ); + + return ResponseEntity.ok(Map.of( + "status", true, + "message", "Profile updated successfully", + "data", userData + )); } catch (RuntimeException e) { - return ResponseEntity.badRequest().body(Map.of("status", 400, "message", e.getMessage())); + return ResponseEntity.ok(Map.of( + "status", false, + "message", e.getMessage() + )); } } diff --git a/backend/src/main/java/online/wesal/wesal/dto/UpdateUserRequest.java b/backend/src/main/java/online/wesal/wesal/dto/UpdateUserRequest.java index 7556c3a..942e892 100644 --- a/backend/src/main/java/online/wesal/wesal/dto/UpdateUserRequest.java +++ b/backend/src/main/java/online/wesal/wesal/dto/UpdateUserRequest.java @@ -10,6 +10,8 @@ public class UpdateUserRequest { private String avatar; + private String username; + @Size(min = 6, message = "Password must be at least 8 characters long") private String password; @@ -46,4 +48,12 @@ public class UpdateUserRequest { public void setPassword(String password) { this.password = password; } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } } \ 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 9dd0f91..244f340 100644 --- a/backend/src/main/java/online/wesal/wesal/service/UserService.java +++ b/backend/src/main/java/online/wesal/wesal/service/UserService.java @@ -56,8 +56,9 @@ public class UserService { return userRepository.save(user); } - public User updateUser(String fcmToken, String displayName, String avatar, String password) { + public User updateUser(String fcmToken, String displayName, String avatar, String password, String username) { User user = getCurrentUser(); + boolean wasNotActivated = !user.isActivated(); if (fcmToken != null && !fcmToken.trim().isEmpty()) { user.setFcmToken(fcmToken); @@ -75,6 +76,23 @@ public class UserService { user.setPassword(passwordEncoder.encode(password)); } - return userRepository.save(user); + if (username != null && !username.trim().isEmpty()) { + // Check if username is different from current username to avoid false positives + if (!username.equals(user.getUsername()) && userRepository.existsByUsername(username)) { + System.out.println("Username taken!"); + throw new RuntimeException("@" + username + " is already taken. Try another username"); + } + System.out.println("It still happened here"); + user.setUsername(username); + } + + User savedUser = userRepository.save(user); + + if (wasNotActivated) { + savedUser.setActivated(true); + savedUser = userRepository.save(savedUser); + } + + return savedUser; } } \ No newline at end of file