DocumentImportExceptionHandler.java

package com.taxonomy.provenance.controller;

import com.taxonomy.provenance.service.DocumentLimitException;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.multipart.MultipartException;

import java.util.Map;

/** Stable error mapping for multipart and document-processing resource limits. */
@RestControllerAdvice(assignableTypes = DocumentImportController.class)
public class DocumentImportExceptionHandler {

    @ExceptionHandler(MaxUploadSizeExceededException.class)
    ResponseEntity<Map<String, Object>> handleServletUploadLimit(
            MaxUploadSizeExceededException error) {
        return ResponseEntity.status(413).body(Map.of(
                "error", "UPLOAD_TOO_LARGE",
                "message", "The uploaded file exceeds the configured request limit"));
    }

    @ExceptionHandler(DocumentLimitException.class)
    ResponseEntity<Map<String, Object>> handleDocumentLimit(DocumentLimitException error) {
        int status = "UPLOAD_TOO_LARGE".equals(error.getCode()) ? 413
                : "EMPTY_FILE".equals(error.getCode()) ? 400 : 422;
        return ResponseEntity.status(status).body(Map.of(
                "error", error.getCode(),
                "message", error.getMessage()));
    }

    @ExceptionHandler(MultipartException.class)
    ResponseEntity<Map<String, Object>> handleMultipartFailure(MultipartException error) {
        return ResponseEntity.badRequest().body(Map.of(
                "error", "INVALID_MULTIPART_REQUEST",
                "message", "The multipart request could not be processed"));
    }
}