feat: add endpoint to update user information

This commit is contained in:
sBubshait 2025-07-21 10:12:18 +03:00
parent eb90aa15ac
commit 0905a51ec5
3 changed files with 88 additions and 0 deletions

View File

@ -6,6 +6,7 @@ import jakarta.validation.Valid;
import online.wesal.wesal.dto.CreateUserRequest; import online.wesal.wesal.dto.CreateUserRequest;
import online.wesal.wesal.dto.LoginRequest; import online.wesal.wesal.dto.LoginRequest;
import online.wesal.wesal.dto.LoginResponse; import online.wesal.wesal.dto.LoginResponse;
import online.wesal.wesal.dto.UpdateUserRequest;
import online.wesal.wesal.dto.UsernameSelectionRequest; import online.wesal.wesal.dto.UsernameSelectionRequest;
import online.wesal.wesal.entity.User; import online.wesal.wesal.entity.User;
import online.wesal.wesal.service.AuthService; 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<Map<String, Object>> 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") @PostMapping("/admin/createUser")
@Operation(summary = "Create new user (Admin only)", description = "Creates a new user - requires admin privileges") @Operation(summary = "Create new user (Admin only)", description = "Creates a new user - requires admin privileges")
public ResponseEntity<?> createUser(@Valid @RequestBody CreateUserRequest request) { public ResponseEntity<?> createUser(@Valid @RequestBody CreateUserRequest request) {

View File

@ -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;
}
}

View File

@ -55,4 +55,26 @@ public class UserService {
User user = new User(email, passwordEncoder.encode(password), displayName); User user = new User(email, passwordEncoder.encode(password), displayName);
return userRepository.save(user); 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);
}
} }