This application is used for whatsapp governance, which contains the API for the several services provided by GCC.
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

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."
));
}
}
}