NCBACK-9 #7

Merged
backdev merged 12 commits from NCBACK-9 into dev 2025-12-17 13:41:28 +08:00
60 changed files with 154 additions and 161 deletions
Showing only changes of commit a30b0488e8 - Show all commits
@@ -1,8 +0,0 @@
package ru.soune.no_copy.handler;
import ru.soune.no_copy.dto.BaseRequest;
import ru.soune.no_copy.dto.BaseResponse;
public interface RequestHandler {
BaseResponse handle(BaseRequest request) throws Exception;
}
@@ -1,4 +1,4 @@
package ru.soune.no_copy;
package ru.soune.nocopy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.configuration;
package ru.soune.nocopy.configuration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.configuration;
package ru.soune.nocopy.configuration;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.configuration;
package ru.soune.nocopy.configuration;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.configuration;
package ru.soune.nocopy.configuration;
import lombok.Getter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.controller;
package ru.soune.nocopy.controller;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
@@ -8,15 +8,15 @@ import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.*;
import ru.soune.no_copy.dto.BaseRequest;
import ru.soune.no_copy.dto.BaseResponse;
import ru.soune.no_copy.dto.MessageCode;
import ru.soune.no_copy.dto.RegAnswer;
import ru.soune.no_copy.exception.NotValidFieldException;
import ru.soune.no_copy.exception.ValidationException;
import ru.soune.no_copy.handler.LoginRequestHandler;
import ru.soune.no_copy.handler.RegRequestHandler;
import ru.soune.no_copy.handler.RequestHandler;
import ru.soune.nocopy.dto.BaseRequest;
import ru.soune.nocopy.dto.BaseResponse;
import ru.soune.nocopy.dto.MessageCode;
import ru.soune.nocopy.dto.RegAnswer;
import ru.soune.nocopy.exception.NotValidFieldException;
import ru.soune.nocopy.exception.ValidationException;
import ru.soune.nocopy.handler.LoginRequestHandler;
import ru.soune.nocopy.handler.RegRequestHandler;
import ru.soune.nocopy.handler.RequestHandler;
import java.util.HashMap;
import java.util.List;
@@ -1,12 +1,12 @@
package ru.soune.no_copy.controller;
package ru.soune.nocopy.controller;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import ru.soune.no_copy.entity.AuthToken;
import ru.soune.no_copy.exception.TokenNotFoundException;
import ru.soune.no_copy.repository.AuthTokenRepository;
import ru.soune.no_copy.service.AuthService;
import ru.soune.nocopy.entity.AuthToken;
import ru.soune.nocopy.exception.TokenNotFoundException;
import ru.soune.nocopy.repository.AuthTokenRepository;
import ru.soune.nocopy.service.AuthService;
import java.util.Map;
import java.util.Optional;
@@ -1,6 +1,5 @@
package ru.soune.no_copy.controller;
package ru.soune.nocopy.controller;
import org.apache.coyote.Response;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.controller;
package ru.soune.nocopy.controller;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -1,19 +1,19 @@
package ru.soune.no_copy.controller;
package ru.soune.nocopy.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 ru.soune.nocopy.dto.ChangePasswordRequest;
import ru.soune.nocopy.dto.UserDTO;
import ru.soune.nocopy.dto.UserRequest;
import ru.soune.nocopy.entity.AuthToken;
import ru.soune.nocopy.entity.User;
import ru.soune.nocopy.exception.InvalidUserEmail;
import ru.soune.nocopy.exception.NotFoundAuthToken;
import ru.soune.nocopy.mapper.UserMapper;
import ru.soune.nocopy.repository.AuthTokenRepository;
import ru.soune.nocopy.repository.UserRepository;
import ru.soune.nocopy.service.UserService;
import java.util.List;
import java.util.Optional;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.dto;
package ru.soune.nocopy.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.dto;
package ru.soune.nocopy.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.dto;
package ru.soune.nocopy.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.dto;
package ru.soune.nocopy.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.dto;
package ru.soune.nocopy.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.dto;
package ru.soune.nocopy.dto;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
@@ -1,13 +1,13 @@
package ru.soune.no_copy.dto;
package ru.soune.nocopy.dto;
public enum MessageCode {
SUCCESS(0, "Operation successful"),
REG_EMAIL_EXISTS(4001, "Email already registered"),
INVALID_FIELD(4002, "Invalid field"),
MSG_ID_NOT_FOUND(4003, "Message id not found"),
REG_EMAIL_EXISTS(1, "Email already registered"),
INVALID_FIELD(2, "Invalid field"),
MSG_ID_NOT_FOUND(4, "Message id not found"),
AUTH_EMAIL_NOT_FOUND(4005, "Email not found"),
AUTH_PASSWORD_NOT_MATCHES(4006, "Password does not match");
AUTH_EMAIL_NOT_FOUND(4, "Email not found"),
AUTH_PASSWORD_NOT_MATCHES(2, "Password does not match");
private final Integer code;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.dto;
package ru.soune.nocopy.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.dto;
package ru.soune.nocopy.dto;
import jakarta.validation.constraints.*;
import lombok.Data;
@@ -1,7 +1,6 @@
package ru.soune.no_copy.dto;
package ru.soune.nocopy.dto;
import lombok.Data;
import ru.soune.no_copy.entity.FileType;
@Data
public class UserContentDTO {
@@ -1,4 +1,4 @@
package ru.soune.no_copy.dto;
package ru.soune.nocopy.dto;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
@@ -1,7 +1,7 @@
package ru.soune.no_copy.dto;
package ru.soune.nocopy.dto;
import ru.soune.no_copy.entity.ContentStatus;
import ru.soune.no_copy.entity.FileType;
import ru.soune.nocopy.entity.ContentStatus;
import ru.soune.nocopy.entity.FileType;
import java.time.LocalDateTime;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.dto;
package ru.soune.nocopy.dto;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
@@ -1,11 +1,11 @@
package ru.soune.no_copy.dto;
package ru.soune.nocopy.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import ru.soune.no_copy.entity.GenderType;
import ru.soune.no_copy.entity.SubscriptionType;
import ru.soune.nocopy.entity.GenderType;
import ru.soune.nocopy.entity.SubscriptionType;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -1,14 +1,13 @@
package ru.soune.no_copy.dto;
package ru.soune.nocopy.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.Past;
import jakarta.validation.constraints.Size;
import lombok.Data;
import ru.soune.no_copy.entity.GenderType;
import ru.soune.nocopy.entity.GenderType;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
public class UserRequest {
@@ -1,4 +1,4 @@
package ru.soune.no_copy.entity;
package ru.soune.nocopy.entity;
import jakarta.persistence.*;
import lombok.*;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.entity;
package ru.soune.nocopy.entity;
import jakarta.persistence.*;
import lombok.Getter;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.entity;
package ru.soune.nocopy.entity;
import lombok.Getter;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.entity;
package ru.soune.nocopy.entity;
import lombok.Getter;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.entity;
package ru.soune.nocopy.entity;
public enum GenderType {
MALE, FEMALE
@@ -1,4 +1,4 @@
package ru.soune.no_copy.entity;
package ru.soune.nocopy.entity;
import jakarta.persistence.*;
import lombok.*;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.entity;
package ru.soune.nocopy.entity;
import lombok.Getter;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.entity;
package ru.soune.nocopy.entity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.entity;
package ru.soune.nocopy.entity;
import jakarta.persistence.*;
import lombok.*;
@@ -1,8 +1,7 @@
package ru.soune.no_copy.entity;
package ru.soune.nocopy.entity;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.CreationTimestamp;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.entity;
package ru.soune.nocopy.entity;
import jakarta.persistence.*;
import lombok.*;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.exception;
package ru.soune.nocopy.exception;
public class ContentNotFoundException extends RuntimeException {
public ContentNotFoundException(String message) {
@@ -1,4 +1,4 @@
package ru.soune.no_copy.exception;
package ru.soune.nocopy.exception;
public class InvalidPasswordException extends RuntimeException {
public InvalidPasswordException(String message) {
@@ -1,4 +1,4 @@
package ru.soune.no_copy.exception;
package ru.soune.nocopy.exception;
public class InvalidUserEmail extends RuntimeException {
public InvalidUserEmail(String message) {
@@ -1,4 +1,4 @@
package ru.soune.no_copy.exception;
package ru.soune.nocopy.exception;
public class NotFoundAuthToken extends RuntimeException {
public NotFoundAuthToken(String message) {
@@ -1,7 +1,7 @@
package ru.soune.no_copy.exception;
package ru.soune.nocopy.exception;
import lombok.Getter;
import ru.soune.no_copy.dto.BaseResponse;
import ru.soune.nocopy.dto.BaseResponse;
@Getter
public class NotValidFieldException extends RuntimeException {
@@ -1,4 +1,4 @@
package ru.soune.no_copy.exception;
package ru.soune.nocopy.exception;
public class NotValidationPasswordException extends RuntimeException {
public NotValidationPasswordException(String message) {
@@ -1,4 +1,4 @@
package ru.soune.no_copy.exception;
package ru.soune.nocopy.exception;
public class TokenNotFoundException extends RuntimeException {
public TokenNotFoundException(String message) {
@@ -1,4 +1,4 @@
package ru.soune.no_copy.exception;
package ru.soune.nocopy.exception;
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException(String message) {
@@ -1,4 +1,4 @@
package ru.soune.no_copy.exception;
package ru.soune.nocopy.exception;
import lombok.Getter;
import org.springframework.validation.BindingResult;
@@ -1,4 +1,4 @@
package ru.soune.no_copy.handler;
package ru.soune.nocopy.handler;
import lombok.AllArgsConstructor;
import org.springframework.context.support.DefaultMessageSourceResolvable;
@@ -8,7 +8,7 @@ import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import ru.soune.no_copy.exception.*;
import ru.soune.nocopy.exception.*;
import java.util.Map;
@@ -1,16 +1,15 @@
package ru.soune.no_copy.handler;
package ru.soune.nocopy.handler;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import ru.soune.no_copy.dto.*;
import ru.soune.no_copy.entity.AuthToken;
import ru.soune.no_copy.exception.NotValidFieldException;
import ru.soune.no_copy.repository.UserRepository;
import ru.soune.no_copy.service.AuthService;
import ru.soune.nocopy.dto.*;
import ru.soune.nocopy.entity.AuthToken;
import ru.soune.nocopy.exception.NotValidFieldException;
import ru.soune.nocopy.repository.UserRepository;
import ru.soune.nocopy.service.AuthService;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@Component
@@ -1,4 +1,4 @@
package ru.soune.no_copy.handler;
package ru.soune.nocopy.handler;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
@@ -6,13 +6,13 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.validation.BeanPropertyBindingResult;
import org.springframework.validation.BindingResult;
import ru.soune.no_copy.dto.*;
import ru.soune.no_copy.entity.AuthToken;
import ru.soune.no_copy.exception.NotValidFieldException;
import ru.soune.no_copy.exception.ValidationException;
import ru.soune.no_copy.handler.validator.RegRequestValidator;
import ru.soune.no_copy.repository.UserRepository;
import ru.soune.no_copy.service.AuthService;
import ru.soune.nocopy.dto.*;
import ru.soune.nocopy.entity.AuthToken;
import ru.soune.nocopy.exception.NotValidFieldException;
import ru.soune.nocopy.exception.ValidationException;
import ru.soune.nocopy.handler.validator.RegRequestValidator;
import ru.soune.nocopy.repository.UserRepository;
import ru.soune.nocopy.service.AuthService;
import java.util.Arrays;
import java.util.Map;
@@ -0,0 +1,8 @@
package ru.soune.nocopy.handler;
import ru.soune.nocopy.dto.BaseRequest;
import ru.soune.nocopy.dto.BaseResponse;
public interface RequestHandler {
BaseResponse handle(BaseRequest request) throws Exception;
}
@@ -1,9 +1,9 @@
package ru.soune.no_copy.handler.validator;
package ru.soune.nocopy.handler.validator;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import ru.soune.no_copy.dto.RegRequest;
import ru.soune.nocopy.dto.RegRequest;
import java.util.*;
@@ -1,11 +1,11 @@
package ru.soune.no_copy.mapper;
package ru.soune.nocopy.mapper;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
import org.mapstruct.NullValuePropertyMappingStrategy;
import org.mapstruct.factory.Mappers;
import ru.soune.no_copy.dto.UserContentUpdateRequest;
import ru.soune.no_copy.entity.UserContent;
import ru.soune.nocopy.dto.UserContentUpdateRequest;
import ru.soune.nocopy.entity.UserContent;
@Mapper(componentModel = "spring",
nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
@@ -1,10 +1,10 @@
package ru.soune.no_copy.mapper;
package ru.soune.nocopy.mapper;
import org.mapstruct.Mapper;
import org.mapstruct.NullValuePropertyMappingStrategy;
import org.mapstruct.factory.Mappers;
import ru.soune.no_copy.dto.UserDTO;
import ru.soune.no_copy.entity.User;
import ru.soune.nocopy.dto.UserDTO;
import ru.soune.nocopy.entity.User;
@Mapper(componentModel = "spring",
nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
@@ -1,8 +1,8 @@
package ru.soune.no_copy.repository;
package ru.soune.nocopy.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import ru.soune.no_copy.entity.AuthToken;
import ru.soune.nocopy.entity.AuthToken;
import java.time.LocalDate;
import java.util.Optional;
@@ -1,9 +1,9 @@
package ru.soune.no_copy.repository;
package ru.soune.nocopy.repository;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import ru.soune.no_copy.entity.FileType;
import ru.soune.no_copy.entity.UserContent;
import ru.soune.nocopy.entity.FileType;
import ru.soune.nocopy.entity.UserContent;
import java.util.List;
@@ -1,7 +1,7 @@
package ru.soune.no_copy.repository;
package ru.soune.nocopy.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import ru.soune.no_copy.entity.User;
import ru.soune.nocopy.entity.User;
import java.util.Optional;
@@ -1,18 +1,16 @@
package ru.soune.no_copy.service;
package ru.soune.nocopy.service;
import lombok.RequiredArgsConstructor;
import org.springframework.context.MessageSource;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ru.soune.no_copy.dto.*;
import ru.soune.no_copy.entity.AuthToken;
import ru.soune.no_copy.entity.User;
import ru.soune.no_copy.exception.NotValidFieldException;
import ru.soune.no_copy.exception.NotValidationPasswordException;
import ru.soune.no_copy.exception.UserNotFoundException;
import ru.soune.no_copy.repository.AuthTokenRepository;
import ru.soune.no_copy.repository.UserRepository;
import ru.soune.nocopy.dto.*;
import ru.soune.nocopy.entity.AuthToken;
import ru.soune.nocopy.entity.User;
import ru.soune.nocopy.exception.NotValidFieldException;
import ru.soune.nocopy.repository.AuthTokenRepository;
import ru.soune.nocopy.repository.UserRepository;
import java.security.SecureRandom;
import java.time.LocalDateTime;
@@ -1,18 +1,18 @@
package ru.soune.no_copy.service;
package ru.soune.nocopy.service;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ru.soune.no_copy.dto.UserContentRequest;
import ru.soune.no_copy.dto.UserContentUpdateRequest;
import ru.soune.no_copy.entity.FileType;
import ru.soune.no_copy.entity.User;
import ru.soune.no_copy.entity.UserContent;
import ru.soune.no_copy.exception.ContentNotFoundException;
import ru.soune.no_copy.exception.UserNotFoundException;
import ru.soune.no_copy.mapper.UserContentMapper;
import ru.soune.no_copy.repository.UserContentRepository;
import ru.soune.no_copy.repository.UserRepository;
import ru.soune.nocopy.dto.UserContentRequest;
import ru.soune.nocopy.dto.UserContentUpdateRequest;
import ru.soune.nocopy.entity.FileType;
import ru.soune.nocopy.entity.User;
import ru.soune.nocopy.entity.UserContent;
import ru.soune.nocopy.exception.ContentNotFoundException;
import ru.soune.nocopy.exception.UserNotFoundException;
import ru.soune.nocopy.mapper.UserContentMapper;
import ru.soune.nocopy.repository.UserContentRepository;
import ru.soune.nocopy.repository.UserRepository;
import java.util.List;
import java.util.Optional;
@@ -1,17 +1,17 @@
package ru.soune.no_copy.service;
package ru.soune.nocopy.service;
import lombok.AllArgsConstructor;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
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.User;
import ru.soune.no_copy.exception.InvalidUserEmail;
import ru.soune.no_copy.exception.NotValidationPasswordException;
import ru.soune.no_copy.exception.UserNotFoundException;
import ru.soune.no_copy.repository.UserRepository;
import ru.soune.nocopy.dto.ChangePasswordRequest;
import ru.soune.nocopy.dto.UserDTO;
import ru.soune.nocopy.dto.UserRequest;
import ru.soune.nocopy.entity.User;
import ru.soune.nocopy.exception.InvalidUserEmail;
import ru.soune.nocopy.exception.NotValidationPasswordException;
import ru.soune.nocopy.exception.UserNotFoundException;
import ru.soune.nocopy.repository.UserRepository;
@Service
@AllArgsConstructor
@@ -1,4 +1,4 @@
package ru.soune.no_copy.service;
package ru.soune.nocopy.service;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -8,13 +8,13 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.context.MessageSource;
import org.springframework.security.crypto.password.PasswordEncoder;
import ru.soune.no_copy.dto.LoginRequest;
import ru.soune.no_copy.entity.AuthToken;
import ru.soune.no_copy.entity.User;
import ru.soune.no_copy.exception.NotValidationPasswordException;
import ru.soune.no_copy.exception.UserNotFoundException;
import ru.soune.no_copy.repository.AuthTokenRepository;
import ru.soune.no_copy.repository.UserRepository;
import ru.soune.nocopy.dto.LoginRequest;
import ru.soune.nocopy.entity.AuthToken;
import ru.soune.nocopy.entity.User;
import ru.soune.nocopy.exception.NotValidationPasswordException;
import ru.soune.nocopy.exception.UserNotFoundException;
import ru.soune.nocopy.repository.AuthTokenRepository;
import ru.soune.nocopy.repository.UserRepository;
import java.util.Optional;