You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
4.6 KiB
126 lines
4.6 KiB
package com.gcc.restapiservices.servicesPdf.controller;
|
|
|
|
import com.gcc.restapiservices.servicesPdf.service.ServicePdfService;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.core.io.Resource;
|
|
import org.springframework.core.io.UrlResource;
|
|
import org.springframework.http.HttpHeaders;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.http.MediaType;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.web.bind.annotation.GetMapping;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RequestParam;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
import java.net.MalformedURLException;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
@RestController
|
|
@RequestMapping("/gccrestservices/api/servicespdf")
|
|
public class ServicePdfController {
|
|
|
|
@Autowired
|
|
private ServicePdfService servicePdfService;
|
|
|
|
@GetMapping("/get-services")
|
|
public ResponseEntity<List<Map<String, Object>>> listServices() {
|
|
List<Map<String, Object>> services = servicePdfService.findAllServices();
|
|
if (services.isEmpty()) {
|
|
return ResponseEntity.noContent().build();
|
|
}
|
|
return ResponseEntity.ok(services);
|
|
}
|
|
|
|
@GetMapping("/get-types")
|
|
public ResponseEntity<List<Map<String, Object>>> getTypesByService(
|
|
@RequestParam("serviceId") int serviceId
|
|
) {
|
|
List<Map<String,Object>> types = servicePdfService.findTypesByService(serviceId);
|
|
if (types.isEmpty()) {
|
|
return ResponseEntity.noContent().build();
|
|
}
|
|
return ResponseEntity.ok(types);
|
|
}
|
|
|
|
@GetMapping("/download")
|
|
public ResponseEntity<?> downloadPdf(
|
|
@RequestParam(value = "serviceId") String serviceIdStr,
|
|
@RequestParam(value = "typeId") String typeIdStr
|
|
) {
|
|
if (serviceIdStr == null || serviceIdStr.isBlank()) {
|
|
return ResponseEntity
|
|
.badRequest()
|
|
.body(Map.of(
|
|
"status", "error",
|
|
"message", "Missing required parameter: serviceId"
|
|
));
|
|
}
|
|
if (typeIdStr == null || typeIdStr.isBlank()) {
|
|
return ResponseEntity
|
|
.badRequest()
|
|
.body(Map.of(
|
|
"status", "error",
|
|
"message", "Missing required parameter: typeId"
|
|
));
|
|
}
|
|
|
|
if (!serviceIdStr.matches("\\d+")) {
|
|
return ResponseEntity
|
|
.badRequest()
|
|
.body(Map.of(
|
|
"status", "error",
|
|
"message", "Invalid parameter: 'serviceId' must be an integer"
|
|
));
|
|
}
|
|
if (!typeIdStr.matches("\\d+")) {
|
|
return ResponseEntity
|
|
.badRequest()
|
|
.body(Map.of(
|
|
"status", "error",
|
|
"message", "Invalid parameter: 'typeId' must be an integer"
|
|
));
|
|
}
|
|
|
|
int serviceId = Integer.parseInt(serviceIdStr);
|
|
int typeId = Integer.parseInt(typeIdStr);
|
|
|
|
try {
|
|
String pdfFullPath = servicePdfService.getPdfPathByServiceAndType(serviceId, typeId);
|
|
if (pdfFullPath == null) {
|
|
return ResponseEntity.status(404).body(Map.of(
|
|
"status", "error",
|
|
"message", "No PDF found for serviceId=" + serviceId + ", typeId=" + typeId
|
|
));
|
|
}
|
|
|
|
Resource resource = new UrlResource(pdfFullPath);
|
|
if (!resource.exists()) {
|
|
return ResponseEntity.status(404).body(Map.of(
|
|
"status", "error",
|
|
"message", "PDF file not found on server for serviceId=" + serviceId +
|
|
", typeId=" + typeId
|
|
));
|
|
}
|
|
|
|
String fileName = pdfFullPath.substring(pdfFullPath.lastIndexOf("/") + 1);
|
|
return ResponseEntity.ok(Map.of(
|
|
"status", "success",
|
|
"serviceId", serviceId,
|
|
"typeId", typeId,
|
|
"fileName", fileName,
|
|
"url", pdfFullPath
|
|
));
|
|
|
|
} catch (MalformedURLException e) {
|
|
e.printStackTrace();
|
|
return ResponseEntity.status(500).body(Map.of(
|
|
"status", "error",
|
|
"message", "Invalid URL format for PDF file."
|
|
));
|
|
}
|
|
}
|
|
|
|
}
|