package ru.soune.no_copy.controller; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import ru.soune.no_copy.dto.ChangePasswordRequest; import ru.soune.no_copy.dto.UserDTO; import ru.soune.no_copy.dto.UserRequest; 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; import ru.soune.no_copy.repository.UserRepository; import ru.soune.no_copy.service.UserService; import java.util.List; import java.util.Optional; @RestController @RequestMapping("/api/user") @RequiredArgsConstructor public class UserController { private final UserRepository userRepository; private final UserService userService; private final AuthTokenRepository authTokenRepository; private final UserMapper userMapper; @GetMapping("/all") public ResponseEntity> getAllUsers() { List allUsers = userRepository.findAll().stream() .map(u -> new UserDTO(u.getFullName(), u.getCompany(), u.getEmail(), u.getIsActive(), u.getPhone(), u.getGenderType(), u.getBirthday(), u.getCreatedAt(), u.getSubscriptionType())) .toList(); return ResponseEntity.ok(allUsers); } //TODO fix mapper,doesnot exist all fields @PostMapping("/change-password") public ResponseEntity updateUser(@RequestBody ChangePasswordRequest changePasswordRequest, @RequestHeader("Authorization") String tokenHeader) { String token = tokenHeader.replace("Bearer ", ""); Optional 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)); } @PatchMapping("/user-update") public ResponseEntity updateUser(@RequestBody UserRequest userRequest, @RequestHeader("Authorization") String tokenHeader) { String token = tokenHeader.replace("Bearer ", ""); Optional 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)); } }