Tinder-Clone/src/ru/charm/back/controller/ProfileController.java
2026-03-09 11:19:49 +03:00

89 lines
3.7 KiB
Java

package ru.charm.back.controller;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
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.ProfileFilter;
import ru.charm.back.dto.ProfileGetDto;
import ru.charm.back.dto.ProfileUpdateDto;
import ru.charm.back.mapper.RequestToProfileFilterMapper;
import ru.charm.back.mapper.RequestToProfileUpdateDtoMapper;
import ru.charm.back.service.ProfileService;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Optional;
import static jakarta.servlet.http.HttpServletResponse.SC_NOT_FOUND;
import static ru.charm.back.utils.UrlUtils.PROFILE_URL;
@WebServlet(PROFILE_URL + "/*")
@MultipartConfig
@Slf4j
public class ProfileController extends HttpServlet {
private final ProfileService service = ProfileService.getInstance();
private final RequestToProfileUpdateDtoMapper requestToProfileUpdateDtoMapper = RequestToProfileUpdateDtoMapper.getInstance();
private final RequestToProfileFilterMapper requestToProfileFilterMapper = RequestToProfileFilterMapper.getInstance();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String sId = req.getParameter("id");
if (sId != null) {
Optional<ProfileGetDto> optProfileDto = service.findById(Long.parseLong(sId));
if (optProfileDto.isPresent()) {
ProfileGetDto profileGetDto = optProfileDto.get();
if (req.getRequestURI().equals("/profile/pdf")) {
resp.setHeader("Content-Disposition", "attachment; filename=\"profile.pdf\"");
resp.setContentType("application/pdf");
resp.setCharacterEncoding("UTF-8");
try(OutputStream os = resp.getOutputStream()) {
Document document = new Document();
PdfWriter.getInstance(document, os);
document.open();
PdfPTable table = new PdfPTable(2);
table.addCell("Email");
table.addCell(profileGetDto.getEmail());
table.addCell("Name");
table.addCell(profileGetDto.getName());
table.addCell("Surname");
table.addCell(profileGetDto.getSurname());
document.add(table);
document.close();
} catch (DocumentException e) {
throw new IOException(e);
}
} else {
req.setAttribute("profile", profileGetDto);
req.getRequestDispatcher("/WEB-INF/jsp/profile.jsp").forward(req, resp);
}
} else {
resp.sendError(SC_NOT_FOUND);
}
} else {
ProfileFilter filter = requestToProfileFilterMapper.map(req);
req.setAttribute("profiles", service.findAll(filter));
req.getRequestDispatcher("/WEB-INF/jsp/profiles.jsp").forward(req, resp);
}
}
@Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOException {
ProfileUpdateDto dto = requestToProfileUpdateDtoMapper.map(req);
service.update(dto);
String referer = req.getHeader("referer");
resp.sendRedirect(referer);
}
}