package ru.soune.nocopy.handler; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; 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.auth.AuthService; import java.util.Arrays; import java.util.Map; @Component @RequiredArgsConstructor public class LoginRequestHandler implements RequestHandler { private final UserRepository userRepository; private final AuthService authService; private final ObjectMapper objectMapper; @Override public BaseResponse handle(BaseRequest request) { LoginRequest loginRequest = objectMapper.convertValue(request.getMessageBody(), LoginRequest.class); if (!userRepository.existsByEmail(loginRequest.getEmail())) { LoginAnswer loginAnswer = new LoginAnswer(); loginAnswer.setFieldErrors(Arrays.asList(Map.of("email", loginRequest.getEmail()))); throw new NotValidFieldException("User with email not found: " + loginRequest.getEmail(), new BaseResponse(request.getMsgId(), MessageCode.AUTH_EMAIL_NOT_FOUND.getCode(), MessageCode.AUTH_EMAIL_NOT_FOUND.getDescription(), loginAnswer)); } AuthToken authToken = authService.login(loginRequest); String token = authToken.getToken(); LoginAnswer loginAnswer = new LoginAnswer(); loginAnswer.setToken(token); authService.useUserAuthToken(token); return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(), MessageCode.SUCCESS.getDescription(), loginAnswer); } }