2025-11-26 11:33:33 +07:00
|
|
|
package ru.soune.no_copy.controller;
|
|
|
|
|
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import org.springframework.http.ResponseEntity;
|
2025-11-27 03:05:07 +07:00
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
import ru.soune.no_copy.dto.ChangePasswordRequest;
|
2025-11-26 11:33:33 +07:00
|
|
|
import ru.soune.no_copy.dto.UserDTO;
|
2025-11-27 12:48:08 +07:00
|
|
|
import ru.soune.no_copy.dto.UserRequest;
|
2025-11-27 03:05:07 +07:00
|
|
|
import ru.soune.no_copy.entity.AuthToken;
|
|
|
|
|
import ru.soune.no_copy.entity.User;
|
|
|
|
|
import ru.soune.no_copy.exception.InvalidUserEmail;
|
|
|
|
|
import ru.soune.no_copy.exception.NotFoundAuthToken;
|
|
|
|
|
import ru.soune.no_copy.mapper.UserMapper;
|
|
|
|
|
import ru.soune.no_copy.repository.AuthTokenRepository;
|
2025-11-26 11:33:33 +07:00
|
|
|
import ru.soune.no_copy.repository.UserRepository;
|
2025-11-27 03:05:07 +07:00
|
|
|
import ru.soune.no_copy.service.UserService;
|
2025-11-26 11:33:33 +07:00
|
|
|
|
|
|
|
|
import java.util.List;
|
2025-11-27 03:05:07 +07:00
|
|
|
import java.util.Optional;
|
2025-11-26 11:33:33 +07:00
|
|
|
|
|
|
|
|
@RestController
|
|
|
|
|
@RequestMapping("/api/user")
|
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
|
public class UserController {
|
|
|
|
|
|
|
|
|
|
private final UserRepository userRepository;
|
|
|
|
|
|
2025-11-27 03:05:07 +07:00
|
|
|
private final UserService userService;
|
|
|
|
|
|
|
|
|
|
private final AuthTokenRepository authTokenRepository;
|
|
|
|
|
|
|
|
|
|
private final UserMapper userMapper;
|
|
|
|
|
|
2025-11-26 11:33:33 +07:00
|
|
|
@GetMapping("/all")
|
|
|
|
|
public ResponseEntity<List<UserDTO>> getAllUsers() {
|
|
|
|
|
List<UserDTO> allUsers = userRepository.findAll().stream()
|
2025-11-27 03:05:07 +07:00
|
|
|
.map(u -> new UserDTO(u.getFullName(), u.getCompany(), u.getEmail(), u.getIsActive(),
|
|
|
|
|
u.getPhone(), u.getGenderType(),
|
2025-11-27 12:48:08 +07:00
|
|
|
u.getBirthday(), u.getCreatedAt(), u.getSubscriptionType()))
|
2025-11-26 11:33:33 +07:00
|
|
|
.toList();
|
|
|
|
|
|
|
|
|
|
return ResponseEntity.ok(allUsers);
|
|
|
|
|
}
|
2025-11-27 03:05:07 +07:00
|
|
|
|
2025-12-02 13:57:07 +07:00
|
|
|
@GetMapping
|
|
|
|
|
public ResponseEntity<UserDTO> getUser(@RequestParam("email") String email,
|
|
|
|
|
@RequestHeader("Authorization") String tokenHeader) {
|
|
|
|
|
String token = tokenHeader.replace("Bearer ", "");
|
|
|
|
|
|
|
|
|
|
Optional<AuthToken> tokenOptional = authTokenRepository.findByToken(token);
|
|
|
|
|
|
|
|
|
|
AuthToken authToken = tokenOptional.orElseThrow(() -> new NotFoundAuthToken("Token: " + token + "not found"));
|
|
|
|
|
|
|
|
|
|
if (authToken != null) {
|
|
|
|
|
Optional<User> user = userRepository.findByEmail(email);
|
|
|
|
|
//TODO add mapper
|
|
|
|
|
if (user.isPresent()) {
|
|
|
|
|
UserDTO userDTO = userMapper.toDTO(user.get());
|
|
|
|
|
userDTO.setEmail(email);
|
|
|
|
|
userDTO.setFullName(user.get().getFullName());
|
|
|
|
|
userDTO.setCompany(user.get().getCompany());
|
|
|
|
|
userDTO.setPhone(user.get().getPhone());
|
|
|
|
|
userDTO.setGenderType(user.get().getGenderType());
|
|
|
|
|
userDTO.setBirthday(user.get().getBirthday());
|
|
|
|
|
userDTO.setCreatedAt(user.get().getCreatedAt());
|
|
|
|
|
userDTO.setSubscriptionType(user.get().getSubscriptionType());
|
|
|
|
|
userDTO.setActive(user.get().getIsActive());
|
|
|
|
|
|
|
|
|
|
return ResponseEntity.ok(userDTO);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ResponseEntity.notFound().build();
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-27 03:05:07 +07:00
|
|
|
//TODO fix mapper,doesnot exist all fields
|
|
|
|
|
@PostMapping("/change-password")
|
|
|
|
|
public ResponseEntity<UserDTO> updateUser(@RequestBody ChangePasswordRequest changePasswordRequest,
|
|
|
|
|
@RequestHeader("Authorization") String tokenHeader) {
|
|
|
|
|
String token = tokenHeader.replace("Bearer ", "");
|
|
|
|
|
|
|
|
|
|
Optional<AuthToken> tokenOptional = authTokenRepository.findByToken(token);
|
|
|
|
|
|
|
|
|
|
AuthToken authToken = tokenOptional.orElseThrow(() -> new NotFoundAuthToken("Token: " + token + "not found"));
|
|
|
|
|
|
|
|
|
|
User user = authToken.getUser();
|
|
|
|
|
|
|
|
|
|
if (!changePasswordRequest.getEmail().equals(user.getEmail())) {
|
|
|
|
|
throw new InvalidUserEmail("Email is not valid: " + changePasswordRequest.getEmail() + "not found");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
User updateUser = userService.changePassword(user, changePasswordRequest);
|
|
|
|
|
|
|
|
|
|
return ResponseEntity.ok(userMapper.toDTO(updateUser));
|
|
|
|
|
}
|
2025-11-27 12:48:08 +07:00
|
|
|
|
|
|
|
|
@PatchMapping("/user-update")
|
|
|
|
|
public ResponseEntity<UserDTO> updateUser(@RequestBody UserRequest userRequest,
|
|
|
|
|
@RequestHeader("Authorization") String tokenHeader) {
|
|
|
|
|
String token = tokenHeader.replace("Bearer ", "");
|
|
|
|
|
|
|
|
|
|
Optional<AuthToken> tokenOptional = authTokenRepository.findByToken(token);
|
|
|
|
|
|
|
|
|
|
AuthToken authToken = tokenOptional.orElseThrow(() -> new NotFoundAuthToken("Token: " + token + "not found"));
|
|
|
|
|
|
|
|
|
|
User user = authToken.getUser();
|
|
|
|
|
|
|
|
|
|
return ResponseEntity.ok(userService.updateUser(userRequest, user));
|
|
|
|
|
}
|
2025-11-26 11:33:33 +07:00
|
|
|
}
|