is-1/src/main/java/ru/akarpov/is1/rest/ImportResource.java
2025-10-20 13:50:49 +03:00

96 lines
3.5 KiB
Java

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<ImportHistoryResponse> 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();
}
}
}