Files
no-copy/src/main/java/ru/soune/nocopy/controller/UserController.java
T

221 lines
9.1 KiB
Java
Raw Normal View History

2025-12-10 19:12:54 +07:00
package ru.soune.nocopy.controller;
2025-11-26 11:33:33 +07:00
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
2026-01-27 08:09:54 +07:00
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.*;
2026-01-27 08:09:54 +07:00
import ru.soune.nocopy.dto.BaseResponse;
import ru.soune.nocopy.dto.MessageCode;
2026-01-20 03:47:51 +07:00
import ru.soune.nocopy.dto.register.ChangePasswordRequest;
2026-01-27 08:09:54 +07:00
import ru.soune.nocopy.dto.register.RegAnswer;
import ru.soune.nocopy.dto.register.RegRequest;
2026-02-04 11:47:43 +07:00
import ru.soune.nocopy.dto.tarriff.TariffInfoDTO;
2026-01-20 03:47:51 +07:00
import ru.soune.nocopy.dto.user.UserDTO;
import ru.soune.nocopy.dto.user.UserRequest;
2026-02-04 11:47:43 +07:00
import ru.soune.nocopy.entity.tarif.Tariff;
import ru.soune.nocopy.entity.tarif.TariffInfo;
import ru.soune.nocopy.entity.user.AuthToken;
import ru.soune.nocopy.entity.user.User;
2025-12-10 19:12:54 +07:00
import ru.soune.nocopy.exception.InvalidUserEmail;
import ru.soune.nocopy.exception.NotFoundAuthToken;
2026-01-27 08:09:54 +07:00
import ru.soune.nocopy.exception.NotValidFieldException;
2025-12-10 19:12:54 +07:00
import ru.soune.nocopy.mapper.UserMapper;
import ru.soune.nocopy.repository.AuthTokenRepository;
import ru.soune.nocopy.repository.UserRepository;
2026-02-04 11:47:43 +07:00
import ru.soune.nocopy.service.file.FileStatsService;
2026-01-27 08:09:54 +07:00
import ru.soune.nocopy.service.register.AuthService;
import ru.soune.nocopy.service.tariff.TariffService;
2026-01-20 03:47:51 +07:00
import ru.soune.nocopy.service.user.UserService;
2025-11-26 11:33:33 +07:00
2026-01-27 08:09:54 +07:00
import java.util.Arrays;
2025-11-26 11:33:33 +07:00
import java.util.List;
2026-01-27 08:09:54 +07:00
import java.util.Map;
import java.util.Optional;
2025-11-26 11:33:33 +07:00
@RestController
2026-05-19 14:22:40 +07:00
@RequestMapping("api/user")
2025-11-26 11:33:33 +07:00
@RequiredArgsConstructor
public class UserController {
private final UserRepository userRepository;
private final UserService userService;
private final AuthTokenRepository authTokenRepository;
private final UserMapper userMapper;
2026-01-27 08:09:54 +07:00
private final PasswordEncoder passwordEncoder;
private final AuthService authService;
private final TariffService tariffService;
2026-02-04 11:47:43 +07:00
private final FileStatsService fileStatsService;
2025-11-26 11:33:33 +07:00
@GetMapping("/all")
public ResponseEntity<List<UserDTO>> getAllUsers() {
List<UserDTO> allUsers = userRepository.findAll().stream()
2026-01-29 21:46:37 +07:00
.map(u -> new UserDTO(u.getFullName(), u.getCompanyName(), u.getEmail(), u.isActive(),
u.getPhone(), u.getGenderType(),
2026-02-04 11:47:43 +07:00
u.getBirthday(), u.getCreatedAt(), u.getSubscriptionType(), tariffService.getAllTariffs(),
2026-04-13 14:04:19 +07:00
null, null, u.getVerificationStatus()))
2025-11-26 11:33:33 +07:00
.toList();
return ResponseEntity.ok(allUsers);
}
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);
if (tokenOptional.isPresent()) {
2026-01-20 15:12:24 +07:00
User user = userRepository.findByEmail(email);
2026-01-20 15:12:24 +07:00
if (user != null) {
UserDTO userDTO = userMapper.toDTO(user);
2025-12-02 13:57:07 +07:00
userDTO.setEmail(email);
2026-01-20 15:12:24 +07:00
userDTO.setFullName(user.getFullName());
2026-04-13 14:04:19 +07:00
userDTO.setVerifiedStatus(user.getVerificationStatus());
2026-01-29 21:31:28 +07:00
if (user.getCompany() != null) {
userDTO.setCompany(user.getCompany().getCompanyName());
}
if (user.canManageCompanySettings() || user.canLogin() && user.getCompany() == null) {
2026-02-09 17:16:08 +07:00
userDTO.setTariffs(tariffService.getTariffByAccountType(user));
2026-02-04 11:47:43 +07:00
Long fileOnDisk = user.canManageCompanySettings() ?
fileStatsService.calculateCompanyFileSize(user.getId()):
fileStatsService.calculateUserFileSize(user.getId());
Integer filesCount = user.canManageCompanySettings() ?
fileStatsService.filesCompanyCount(user.getId()):
fileStatsService.filesUserCount(user.getId());
2026-02-05 12:44:27 +07:00
TariffInfo personalTariffInfo;
if (user.getCompany() == null) {
personalTariffInfo = user.getPersonalTariffInfo();
} else {
personalTariffInfo = user.getCompany().getTariffInfo();
}
2026-02-04 11:47:43 +07:00
Tariff tariff = personalTariffInfo.getTariff();
TariffInfoDTO infoDTO = TariffInfoDTO.builder().tokens(personalTariffInfo.getTokens())
.id(personalTariffInfo.getId())
.tariffName(tariff.getName())
.status(personalTariffInfo.getStatus().name())
.tariffId(tariff.getId())
.currentFileCounts(filesCount)
.maxFileCounts(tariff.getMaxFilesCount())
.currentFileOnDisk(fileOnDisk)
.maxFileOnDisk(tariff.getDiskSize())
.startTariff(personalTariffInfo.getStartTariff())
.endTariff(personalTariffInfo.getEndTariff())
2026-02-09 17:25:06 +07:00
.tokens(personalTariffInfo.getTokens() + personalTariffInfo.getBoughtTokens())
2026-02-04 11:47:43 +07:00
.build();
userDTO.setTariffInfo(infoDTO);
}
2026-01-20 15:12:24 +07:00
userDTO.setPhone(user.getPhone());
userDTO.setGenderType(user.getGenderType());
userDTO.setBirthday(user.getBirthday());
userDTO.setCreatedAt(user.getCreatedAt());
userDTO.setSubscriptionType(user.getSubscriptionType());
userDTO.setActive(user.isActive());
2026-02-04 13:41:09 +07:00
userDTO.setPermission(user.getUserPermissions());
2025-12-02 13:57:07 +07:00
return ResponseEntity.ok(userDTO);
}
} else {
return ResponseEntity.notFound().build();
2025-12-02 13:57:07 +07:00
}
return ResponseEntity.notFound().build();
}
//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));
}
@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));
}
2026-01-27 08:09:54 +07:00
@PostMapping("/create-user")
public ResponseEntity<User> addUser(@RequestBody RegRequest registerRequest) {
if (userRepository.existsByEmail(registerRequest.getEmail()) ||
userRepository.existsByPhone(registerRequest.getPhone())) {
RegAnswer regAnswer = new RegAnswer();
regAnswer.setFieldErrors(Arrays.asList(Map.of("email", registerRequest.getEmail())));
regAnswer.setFieldErrors(Arrays.asList(Map.of("phone", registerRequest.getPhone())));
throw new NotValidFieldException("User already exists with email:" + registerRequest.getEmail() + " or phone: " +
registerRequest.getPhone(), new BaseResponse(2,
MessageCode.REG_EMAIL_OR_PHONE_EXISTS.getCode(),
MessageCode.REG_EMAIL_OR_PHONE_EXISTS.getDescription(), regAnswer));
}
User user = new User();
user.setFullName(registerRequest.getFullName());
user.setEmail(registerRequest.getEmail());
user.setPassword(passwordEncoder.encode(registerRequest.getPassword()));
user.setActive(true);
user.setEmailVerified(true);
if (registerRequest.getPhone() != null) {
user.setPhone(registerRequest.getPhone());
}
User savedUser = userRepository.save(user);
AuthToken authToken = authService.generateAuthToken(savedUser);
authTokenRepository.save(authToken);
return ResponseEntity.ok().body(savedUser);
}
@DeleteMapping("/delete-user/{userId}")
public ResponseEntity<?> addUser(@PathVariable Long userId) {
userRepository.deleteById(userId);
return ResponseEntity.ok().body(Map.of("userId", userId, "deleted", "true"));
}
2025-11-26 11:33:33 +07:00
}