package ru.charm.back.controller.rest; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; 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 ru.charm.back.dto.ProfileGetDto; import ru.charm.back.service.ProfileService; import java.io.IOException; import java.io.PrintWriter; import java.util.Optional; import static jakarta.servlet.http.HttpServletResponse.SC_NOT_FOUND; import static ru.charm.back.utils.UrlUtils.REST_URL; @WebServlet(REST_URL + "/profile") @MultipartConfig public class ProfileController extends HttpServlet { private final ProfileService service = ProfileService.getInstance(); private final ObjectMapper objectMapper = JsonMapper.builder() .configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true) .addModule(new JavaTimeModule()) .build(); @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { try (PrintWriter writer = resp.getWriter()) { resp.setContentType("application/json"); resp.setCharacterEncoding("UTF-8"); String sId = req.getParameter("id"); if (sId != null) { Optional optProfileDto = service.findById(Long.parseLong(sId)); if (optProfileDto.isPresent()) { ProfileGetDto profileGetDto = optProfileDto.get(); objectMapper.writeValue(writer, profileGetDto); } else { resp.sendError(SC_NOT_FOUND); } } else { objectMapper.writeValue(writer, service.findAll()); } } } }