feat: implement /updateUser endpoint in backend
This commit is contained in:
parent
8bc1c7bab1
commit
7c2298df35
@ -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<Map<String, Object>> 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<String, Object> 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()
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user