PdfReportController.java
package com.wavii.controller;
import com.wavii.model.PdfDocument;
import com.wavii.model.PdfReport;
import com.wavii.model.User;
import com.wavii.repository.PdfReportRepository;
import com.wavii.service.OdooService;
import com.wavii.service.PdfStorageService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RequestMapping("/api/pdfs")
@RequiredArgsConstructor
@Slf4j
public class PdfReportController {
private final PdfStorageService pdfStorageService;
private final PdfReportRepository pdfReportRepository;
private final OdooService odooService;
@PostMapping("/{id}/report")
public ResponseEntity<?> reportPdf(
@PathVariable Long id,
@AuthenticationPrincipal User currentUser,
@RequestBody ReportRequest request) {
if (currentUser == null) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
}
if (request.reason() == null || request.reason().isBlank()) {
return ResponseEntity.badRequest().body(Map.of("message", "La razón es obligatoria"));
}
try {
PdfDocument pdf = pdfStorageService.findById(id);
PdfReport report = PdfReport.builder()
.pdfDocument(pdf)
.reporter(currentUser)
.reason(request.reason())
.details(request.details())
.build();
pdfReportRepository.save(report);
odooService.createModerationReport(
"pdf",
currentUser.getName(),
currentUser.getEmail(),
pdf.getSongTitle() != null && !pdf.getSongTitle().isBlank() ? pdf.getSongTitle() : pdf.getOriginalName(),
"pdf:" + pdf.getId(),
request.reason(),
request.details()
);
return ResponseEntity.ok(Map.of("message", "Reporte enviado"));
} catch (Exception e) {
log.error("Error al reportar PDF {}: {}", id, e.getMessage());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(Map.of("message", "Error al enviar el reporte"));
}
}
record ReportRequest(String reason, String details) {}
}