96 lines
3.5 KiB
Java
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();
|
|
}
|
|
}
|
|
} |