fix web registration
This commit is contained in:
@@ -13,6 +13,7 @@ import com.petshop.backend.repository.UserRepository;
|
|||||||
import com.petshop.backend.security.JwtUtil;
|
import com.petshop.backend.security.JwtUtil;
|
||||||
import com.petshop.backend.service.AvatarStorageService;
|
import com.petshop.backend.service.AvatarStorageService;
|
||||||
import com.petshop.backend.util.AuthenticationHelper;
|
import com.petshop.backend.util.AuthenticationHelper;
|
||||||
|
import com.petshop.backend.util.PhoneUtils;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.Resource;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
@@ -53,19 +54,23 @@ public class AuthController {
|
|||||||
|
|
||||||
@PostMapping("/register")
|
@PostMapping("/register")
|
||||||
public ResponseEntity<?> register(@Valid @RequestBody RegisterRequest request) {
|
public ResponseEntity<?> register(@Valid @RequestBody RegisterRequest request) {
|
||||||
if (userRepository.findByUsername(request.getUsername()).isPresent()) {
|
String username = trimToNull(request.getUsername());
|
||||||
|
String email = trimToNull(request.getEmail());
|
||||||
|
NameParts nameParts = splitFullName(request.getFullName());
|
||||||
|
String phone = normalizePhone(request.getPhone());
|
||||||
|
|
||||||
|
if (userRepository.findByUsername(username).isPresent()) {
|
||||||
Map<String, String> error = new HashMap<>();
|
Map<String, String> error = new HashMap<>();
|
||||||
error.put("message", "Username already exists");
|
error.put("message", "Username already exists");
|
||||||
return ResponseEntity.status(HttpStatus.CONFLICT).body(error);
|
return ResponseEntity.status(HttpStatus.CONFLICT).body(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (userRepository.findByEmail(request.getEmail()).isPresent()) {
|
if (userRepository.findByEmail(email).isPresent()) {
|
||||||
Map<String, String> error = new HashMap<>();
|
Map<String, String> error = new HashMap<>();
|
||||||
error.put("message", "Email already exists");
|
error.put("message", "Email already exists");
|
||||||
return ResponseEntity.status(HttpStatus.CONFLICT).body(error);
|
return ResponseEntity.status(HttpStatus.CONFLICT).body(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
String phone = trimToNull(request.getPhone());
|
|
||||||
if (phone != null && userRepository.findByPhone(phone).isPresent()) {
|
if (phone != null && userRepository.findByPhone(phone).isPresent()) {
|
||||||
Map<String, String> error = new HashMap<>();
|
Map<String, String> error = new HashMap<>();
|
||||||
error.put("message", "Phone already exists");
|
error.put("message", "Phone already exists");
|
||||||
@@ -73,10 +78,12 @@ public class AuthController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
User user = new User();
|
User user = new User();
|
||||||
user.setUsername(request.getUsername());
|
user.setUsername(username);
|
||||||
user.setPassword(passwordEncoder.encode(request.getPassword()));
|
user.setPassword(passwordEncoder.encode(request.getPassword()));
|
||||||
user.setEmail(request.getEmail());
|
user.setEmail(email);
|
||||||
user.setFullName(request.getFullName());
|
user.setFirstName(nameParts.firstName());
|
||||||
|
user.setLastName(nameParts.lastName());
|
||||||
|
user.setFullName(nameParts.fullName());
|
||||||
user.setPhone(phone);
|
user.setPhone(phone);
|
||||||
user.setRole(User.Role.CUSTOMER);
|
user.setRole(User.Role.CUSTOMER);
|
||||||
user.setActive(true);
|
user.setActive(true);
|
||||||
@@ -143,31 +150,36 @@ public class AuthController {
|
|||||||
User user = getAuthenticatedUser();
|
User user = getAuthenticatedUser();
|
||||||
boolean invalidateToken = false;
|
boolean invalidateToken = false;
|
||||||
|
|
||||||
if (request.getUsername() != null && !request.getUsername().equals(user.getUsername())) {
|
String username = trimToNull(request.getUsername());
|
||||||
if (userRepository.findByUsername(request.getUsername()).isPresent()) {
|
if (username != null && !username.equals(user.getUsername())) {
|
||||||
|
if (userRepository.findByUsername(username).isPresent()) {
|
||||||
Map<String, String> error = new HashMap<>();
|
Map<String, String> error = new HashMap<>();
|
||||||
error.put("message", "Username already exists");
|
error.put("message", "Username already exists");
|
||||||
return ResponseEntity.status(HttpStatus.CONFLICT).body(error);
|
return ResponseEntity.status(HttpStatus.CONFLICT).body(error);
|
||||||
}
|
}
|
||||||
user.setUsername(request.getUsername());
|
user.setUsername(username);
|
||||||
invalidateToken = true;
|
invalidateToken = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.getEmail() != null && !request.getEmail().equals(user.getEmail())) {
|
String email = trimToNull(request.getEmail());
|
||||||
if (userRepository.findByEmail(request.getEmail()).isPresent()) {
|
if (email != null && !email.equals(user.getEmail())) {
|
||||||
|
if (userRepository.findByEmail(email).isPresent()) {
|
||||||
Map<String, String> error = new HashMap<>();
|
Map<String, String> error = new HashMap<>();
|
||||||
error.put("message", "Email already exists");
|
error.put("message", "Email already exists");
|
||||||
return ResponseEntity.status(HttpStatus.CONFLICT).body(error);
|
return ResponseEntity.status(HttpStatus.CONFLICT).body(error);
|
||||||
}
|
}
|
||||||
user.setEmail(request.getEmail());
|
user.setEmail(email);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.getFullName() != null) {
|
if (request.getFullName() != null) {
|
||||||
user.setFullName(request.getFullName());
|
NameParts nameParts = splitFullName(request.getFullName());
|
||||||
|
user.setFirstName(nameParts.firstName());
|
||||||
|
user.setLastName(nameParts.lastName());
|
||||||
|
user.setFullName(nameParts.fullName());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.getPhone() != null) {
|
if (request.getPhone() != null) {
|
||||||
String phone = trimToNull(request.getPhone());
|
String phone = normalizePhone(request.getPhone());
|
||||||
if (!java.util.Objects.equals(phone, user.getPhone())) {
|
if (!java.util.Objects.equals(phone, user.getPhone())) {
|
||||||
if (phone != null && userRepository.findByPhone(phone)
|
if (phone != null && userRepository.findByPhone(phone)
|
||||||
.filter(existing -> !existing.getId().equals(user.getId()))
|
.filter(existing -> !existing.getId().equals(user.getId()))
|
||||||
@@ -196,11 +208,15 @@ public class AuthController {
|
|||||||
private UserInfoResponse toUserInfoResponse(User user) {
|
private UserInfoResponse toUserInfoResponse(User user) {
|
||||||
StoreLocation primaryStore = user.getPrimaryStore();
|
StoreLocation primaryStore = user.getPrimaryStore();
|
||||||
Long customerId = user.getRole() == User.Role.CUSTOMER ? user.getId() : null;
|
Long customerId = user.getRole() == User.Role.CUSTOMER ? user.getId() : null;
|
||||||
|
String fullName = user.getFullName();
|
||||||
|
if (fullName == null || fullName.isBlank()) {
|
||||||
|
fullName = joinFullName(user.getFirstName(), user.getLastName());
|
||||||
|
}
|
||||||
return new UserInfoResponse(
|
return new UserInfoResponse(
|
||||||
user.getId(),
|
user.getId(),
|
||||||
user.getUsername(),
|
user.getUsername(),
|
||||||
user.getEmail(),
|
user.getEmail(),
|
||||||
user.getFullName(),
|
fullName,
|
||||||
user.getPhone(),
|
user.getPhone(),
|
||||||
avatarStorageService.toOwnerAvatarUrl(user),
|
avatarStorageService.toOwnerAvatarUrl(user),
|
||||||
user.getRole().name(),
|
user.getRole().name(),
|
||||||
@@ -218,6 +234,36 @@ public class AuthController {
|
|||||||
return trimmed.isEmpty() ? null : trimmed;
|
return trimmed.isEmpty() ? null : trimmed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String normalizePhone(String value) {
|
||||||
|
return trimToNull(PhoneUtils.normalize(trimToNull(value)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private NameParts splitFullName(String value) {
|
||||||
|
String normalized = trimToNull(value);
|
||||||
|
if (normalized == null) {
|
||||||
|
throw new IllegalArgumentException("Full name is required");
|
||||||
|
}
|
||||||
|
String[] parts = normalized.split("\\s+", 2);
|
||||||
|
String firstName = parts[0];
|
||||||
|
String lastName = parts.length > 1 ? parts[1] : "";
|
||||||
|
return new NameParts(firstName, lastName, joinFullName(firstName, lastName));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String joinFullName(String firstName, String lastName) {
|
||||||
|
String first = trimToNull(firstName);
|
||||||
|
String last = trimToNull(lastName);
|
||||||
|
if (first == null) {
|
||||||
|
return last == null ? null : last;
|
||||||
|
}
|
||||||
|
if (last == null) {
|
||||||
|
return first;
|
||||||
|
}
|
||||||
|
return first + " " + last;
|
||||||
|
}
|
||||||
|
|
||||||
|
private record NameParts(String firstName, String lastName, String fullName) {
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/me/avatar")
|
@PostMapping("/me/avatar")
|
||||||
public ResponseEntity<?> uploadAvatar(@RequestParam("avatar") MultipartFile file) {
|
public ResponseEntity<?> uploadAvatar(@RequestParam("avatar") MultipartFile file) {
|
||||||
User user = getAuthenticatedUser();
|
User user = getAuthenticatedUser();
|
||||||
|
|||||||
Reference in New Issue
Block a user