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

192 lines
7.5 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
2026-05-29 18:17:04 +07:00
import jakarta.servlet.http.HttpServletRequest;
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.User;
2025-12-10 19:12:54 +07:00
import ru.soune.nocopy.exception.InvalidUserEmail;
2026-01-27 08:09:54 +07:00
import ru.soune.nocopy.exception.NotValidFieldException;
2026-05-29 18:17:04 +07:00
import ru.soune.nocopy.exception.UserNotFoundException;
2025-12-10 19:12:54 +07:00
import ru.soune.nocopy.mapper.UserMapper;
import ru.soune.nocopy.repository.UserRepository;
2026-02-04 11:47:43 +07:00
import ru.soune.nocopy.service.file.FileStatsService;
import ru.soune.nocopy.service.tariff.TariffService;
2026-01-20 03:47:51 +07:00
import ru.soune.nocopy.service.user.UserService;
2026-05-29 18:17:04 +07:00
import ru.soune.nocopy.util.JwtUtil;
2025-11-26 11:33:33 +07:00
2026-01-27 08:09:54 +07:00
import java.util.Arrays;
import java.util.Map;
2025-11-26 11:33:33 +07:00
@RestController
2026-05-19 14:30:56 +07:00
@RequestMapping("v1/api/user")
2025-11-26 11:33:33 +07:00
@RequiredArgsConstructor
public class UserController {
private final UserRepository userRepository;
private final UserService userService;
private final UserMapper userMapper;
2026-01-27 08:09:54 +07:00
private final PasswordEncoder passwordEncoder;
private final TariffService tariffService;
2026-02-04 11:47:43 +07:00
private final FileStatsService fileStatsService;
2026-05-29 18:17:04 +07:00
private final JwtUtil jwtUtil;
private final HttpServletRequest httpServletRequest;
2025-12-02 13:57:07 +07:00
@GetMapping
2026-05-29 18:17:04 +07:00
public ResponseEntity<UserDTO> getUser(@RequestParam("email") String email) {
User user = userRepository.findByEmail(email);
2025-12-02 13:57:07 +07:00
2026-05-29 18:17:04 +07:00
if (user != null) {
UserDTO userDTO = userMapper.toDTO(user);
userDTO.setEmail(email);
userDTO.setFullName(user.getFullName());
userDTO.setVerifiedStatus(user.getVerificationStatus());
2025-12-02 13:57:07 +07:00
2026-05-29 18:17:04 +07:00
if (user.getCompany() != null) {
userDTO.setCompany(user.getCompany().getCompanyName());
2025-12-02 13:57:07 +07:00
}
2026-05-29 18:17:04 +07:00
if (user.canManageCompanySettings() || user.canLogin() && user.getCompany() == null) {
userDTO.setTariffs(tariffService.getTariffByAccountType(user));
Long fileOnDisk = user.canManageCompanySettings() ?
fileStatsService.calculateCompanyFileSize(user.getId()):
fileStatsService.calculateUserFileSize(user.getId());
Integer filesCount = user.canManageCompanySettings() ?
fileStatsService.filesCompanyCount(user.getId()):
fileStatsService.filesUserCount(user.getId());
TariffInfo personalTariffInfo;
if (user.getCompany() == null) {
personalTariffInfo = user.getPersonalTariffInfo();
} else {
personalTariffInfo = user.getCompany().getTariffInfo();
}
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())
.tokens(personalTariffInfo.getTokens() + personalTariffInfo.getBoughtTokens())
.build();
userDTO.setTariffInfo(infoDTO);
}
userDTO.setPhone(user.getPhone());
userDTO.setGenderType(user.getGenderType());
userDTO.setBirthday(user.getBirthday());
userDTO.setCreatedAt(user.getCreatedAt());
userDTO.setActive(user.isActive());
userDTO.setPermission(user.getUserPermissions());
return ResponseEntity.ok(userDTO);
2025-12-02 13:57:07 +07:00
}
return ResponseEntity.notFound().build();
}
//TODO fix mapper,doesnot exist all fields
@PostMapping("/change-password")
2026-05-29 18:17:04 +07:00
public ResponseEntity<UserDTO> updateUser(@RequestBody ChangePasswordRequest changePasswordRequest) {
Long userId = (Long) httpServletRequest.getAttribute("userId");
User user = userService.getUserById(userId).orElse(null);
2026-05-29 18:17:04 +07:00
if (user == null) {
throw new UserNotFoundException("User not found by id: " + userId);
}
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")
2026-05-29 18:17:04 +07:00
public ResponseEntity<UserDTO> updateUser(@RequestBody UserRequest userRequest) {
Long userId = (Long) httpServletRequest.getAttribute("userId");
User user = userService.getUserById(userId).orElse(null);
2026-05-29 18:17:04 +07:00
if (user == null) {
throw new UserNotFoundException("User not found by id: " + userId);
}
return ResponseEntity.ok(userService.updateUser(userRequest, user));
}
2026-01-27 08:09:54 +07:00
@PostMapping("/create-user")
2026-05-29 18:17:04 +07:00
public ResponseEntity<?> addUser(@RequestBody RegRequest registerRequest) {
2026-01-27 08:09:54 +07:00
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);
2026-05-29 18:17:04 +07:00
String authToken = jwtUtil.generateToken(savedUser.getId(), savedUser.getEmail());
2026-01-27 08:09:54 +07:00
2026-05-29 18:17:04 +07:00
return ResponseEntity.ok().body(Map.of(
"user", savedUser,
"token", authToken));
2026-01-27 08:09:54 +07:00
}
@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
}