package ru.akarpov.is1.rest; import jakarta.inject.Inject; import jakarta.servlet.http.HttpServletRequest; import jakarta.ws.rs.*; import jakarta.ws.rs.core.Context; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import ru.akarpov.is1.dto.ImportHistoryResponse; import ru.akarpov.is1.entity.ImportOperation; import ru.akarpov.is1.security.UserPrincipal; import ru.akarpov.is1.service.ImportService; import java.util.List; import java.util.Map; @Path("/import") @Produces(MediaType.APPLICATION_JSON) public class ImportResource { @Inject private ImportService importService; @POST @Consumes(MediaType.TEXT_PLAIN) public Response importBands(@Context HttpServletRequest request, @QueryParam("format") String format, String fileContent) { try { UserPrincipal principal = (UserPrincipal) request.getAttribute("userPrincipal"); if (principal == null) { return Response.status(Response.Status.UNAUTHORIZED) .entity(Map.of("error", "Authentication required")) .build(); } if (format == null || format.trim().isEmpty()) { return Response.status(Response.Status.BAD_REQUEST) .entity(Map.of("error", "Format parameter is required")) .build(); } if (fileContent == null || fileContent.trim().isEmpty()) { return Response.status(Response.Status.BAD_REQUEST) .entity(Map.of("error", "File content is required")) .build(); } ImportOperation operation = importService.importBands(fileContent, format, principal.getUserId()); if (operation.getStatus().name().equals("SUCCESS")) { return Response.ok(Map.of( "message", "Import completed successfully", "operationId", operation.getId(), "objectsCount", operation.getObjectsCount() )).build(); } else { return Response.status(Response.Status.BAD_REQUEST) .entity(Map.of( "error", operation.getErrorMessage(), "operationId", operation.getId() )) .build(); } } catch (Exception e) { return Response.status(Response.Status.INTERNAL_SERVER_ERROR) .entity(Map.of("error", "Import processing failed: " + e.getMessage())) .build(); } } @GET @Path("/history") public Response getImportHistory(@Context HttpServletRequest request) { try { UserPrincipal principal = (UserPrincipal) request.getAttribute("userPrincipal"); if (principal == null) { return Response.status(Response.Status.UNAUTHORIZED) .entity(Map.of("error", "Authentication required")) .build(); } List history = importService.getImportHistory( principal.getUserId(), principal.isAdmin() ); return Response.ok(history).build(); } catch (Exception e) { return Response.status(Response.Status.INTERNAL_SERVER_ERROR) .entity(Map.of("error", "Failed to retrieve history: " + e.getMessage())) .build(); } } }