package ru.charm.back.controller; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.MultipartConfig; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import ru.charm.back.dto.ProfileGetDto; import ru.charm.back.dto.ProfileUpdateDto; import ru.charm.back.mapper.RequestToProfileUpdateDtoMapper; import ru.charm.back.model.exception.DuplicateEmailException; import ru.charm.back.service.ProfileService; import java.io.IOException; import java.util.Optional; import static jakarta.servlet.http.HttpServletResponse.SC_BAD_REQUEST; @WebServlet("/credentials") @Slf4j @MultipartConfig public class CredentialsController extends HttpServlet { private final ProfileService service = ProfileService.getInstance(); private final RequestToProfileUpdateDtoMapper requestToProfileUpdateDtoMapper = RequestToProfileUpdateDtoMapper.getInstance(); @Override protected void doGet (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String sId = req.getParameter("id"); String forwardUri = "/notFound"; if (sId != null) { Optional optProfileGetDto = service.findById(Long.parseLong(sId)); if (optProfileGetDto.isPresent()) { req.setAttribute("profile", optProfileGetDto.get()); forwardUri = "/WEB-INF/jsp/email.jsp"; } } req.getRequestDispatcher(forwardUri).forward(req, resp); } @Override protected void doPut (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ProfileUpdateDto dto = requestToProfileUpdateDtoMapper.map(req, new ProfileUpdateDto()); try { service.update(dto); log.info("Email {} was changed in profile with id = {}", dto.getEmail(), dto.getId()); resp.sendRedirect(String.format("/profile?id=%s", dto.getId())); } catch (DuplicateEmailException e) { resp.sendError(SC_BAD_REQUEST); } } }