From 5008a13609dbc35851e8993d4c728c216ebf5f92 Mon Sep 17 00:00:00 2001 From: FrancoPandolfo Date: Tue, 13 May 2025 22:01:30 +0000 Subject: [PATCH] cambios para vacunas --- .../chaincode-go/chaincode/smartcontract.go | 21 +++++ .../controllers/VacunaController.java | 82 +++++++++++++++++-- .../hyperledger/services/RecetaService.java | 1 - .../hyperledger/services/VacunaService.java | 18 ++++ 4 files changed, 116 insertions(+), 6 deletions(-) diff --git a/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go b/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go index 82dbeee6..d1503782 100644 --- a/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go +++ b/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go @@ -342,6 +342,27 @@ func (s *SmartContract) ReadVacuna(ctx contractapi.TransactionContextInterface, return &vacuna, nil } +func (s *SmartContract) GetMultipleVacunas(ctx contractapi.TransactionContextInterface, vacunaIDs []string) ([]*Vacuna, error) { + var vacunas []*Vacuna + for _, id := range vacunaIDs { + vacunaJSON, err := ctx.GetStub().GetState(id) + if err != nil { + return nil, fmt.Errorf("error al leer del ledger: %v", err) + } + if vacunaJSON == nil { + continue + } + + var vacuna Vacuna + err = json.Unmarshal(vacunaJSON, &vacuna) + if err != nil { + return nil, err + } + vacunas = append(vacunas, &vacuna) + } + return vacunas, nil +} + func (s *SmartContract) GetVacunasPorDniYEstado(ctx contractapi.TransactionContextInterface, dni string, estado string) ([]*Vacuna, error) { if dni == "" { return nil, fmt.Errorf("el dni es obligatorio") diff --git a/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/controllers/VacunaController.java b/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/controllers/VacunaController.java index ee999ade..c5908874 100644 --- a/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/controllers/VacunaController.java +++ b/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/controllers/VacunaController.java @@ -2,6 +2,10 @@ package com.code.hyperledger.controllers; import com.code.hyperledger.Utils.Hashing; import com.code.hyperledger.models.AssetIdDto; +import com.code.hyperledger.models.Receta; +import com.code.hyperledger.models.RecetaDto; +import com.code.hyperledger.models.Vacuna; +import com.code.hyperledger.models.VacunaDto; import com.code.hyperledger.models.Vacuna; import com.code.hyperledger.services.VacunaService; import org.hyperledger.fabric.client.*; @@ -12,6 +16,7 @@ import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -25,25 +30,52 @@ public class VacunaController { @PostMapping("/crear") public ResponseEntity crearVacuna(@RequestBody Vacuna vacuna) { System.out.println("\n--> Submit Transaction: CrearVacuna"); - + + // Log para verificar los valores iniciales + System.out.println("Vacuna recibida: " + vacuna); + + // Validación básica + if (vacuna == null || vacuna.getPatientDocumentNumber() == null || vacuna.getPatientDocumentNumber().isEmpty()) { + System.err.println("Datos de vacuna inválidos: faltan campos requeridos."); + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + String now = LocalDateTime.now().toString(); String dni = vacuna.getPatientDocumentNumber(); + + // Log para ver el DNI y el timestamp + System.out.println("DNI del paciente: " + dni); + System.out.println("Timestamp actual: " + now); + String id = dni + now; String assetId = Hashing.sha256(id); + + // Log para ver el ID generado + System.out.println("ID generado para el asset: " + assetId); + vacuna.setId(assetId); - + AssetIdDto assetIdDto = new AssetIdDto(); assetIdDto.setDni(dni); assetIdDto.setTimeStamp(now); - + try { + // Log antes de intentar registrar la vacuna + System.out.println("Intentando registrar la vacuna..."); + vacunaService.registrarVacuna(vacuna); + + // Log después de que la vacuna fue registrada + System.out.println("Vacuna registrada correctamente."); + return new ResponseEntity<>(assetIdDto, HttpStatus.OK); } catch (CommitStatusException | EndorseException | CommitException | SubmitException e) { + // Log de error + System.err.println("Error al registrar la vacuna: " + e.getMessage()); e.printStackTrace(); return new ResponseEntity<>(HttpStatus.UNAUTHORIZED); } - } + } @PostMapping("/obtener") public ResponseEntity obtenerVacuna(@RequestBody Map requestBody) { @@ -61,7 +93,7 @@ public class VacunaController { } } - @GetMapping("/todas") + @GetMapping("/all") public ResponseEntity> obtenerTodasLasVacunas() { try { List vacunas = vacunaService.obtenerTodasLasVacunas(); @@ -72,6 +104,28 @@ public class VacunaController { } } + @PostMapping("/todas") + public ResponseEntity> obtenerVacunasPorIds(@RequestBody Map> requestBody) { + try { + List ids = requestBody.get("ids"); + if (ids == null || ids.isEmpty()) { + return new ResponseEntity<>(new ArrayList<>(), HttpStatus.OK); + } + + List vacunas = vacunaService.obtenerVacunasPorIds(ids); + List vacunasDto = new ArrayList<>(); + + for (Vacuna vacuna : vacunas) { + vacunasDto.add(mapToDto(vacuna)); + } + + return new ResponseEntity<>(vacunasDto, HttpStatus.OK); + } catch (IOException | GatewayException e) { + e.printStackTrace(); + return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); + } + } + @PostMapping("/filtrar") public ResponseEntity> obtenerVacunasPorDniYEstado(@RequestBody Map filtros) { try { @@ -89,4 +143,22 @@ public class VacunaController { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } + + private VacunaDto mapToDto(Vacuna vacuna) { + VacunaDto dto = new VacunaDto(); + dto.setIdentificador(vacuna.getIdentificador()); + dto.setStatus(vacuna.getStatus()); + dto.setStatusChange(vacuna.getStatusChange()); + dto.setStatusReason(vacuna.getStatusReason()); + dto.setVaccinateCode(vacuna.getVaccinateCode()); + dto.setAdministradedProduct(vacuna.getAdministradedProduct()); + dto.setManufacturer(vacuna.getManufacturer()); + dto.setLotNumber(vacuna.getLotNumber()); + dto.setExpirationDate(vacuna.getExpirationDate()); + dto.setPatientDocumentNumber(vacuna.getPatientDocumentNumber()); + dto.setReactions(vacuna.getReactions()); + + return dto; + } + } diff --git a/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/services/RecetaService.java b/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/services/RecetaService.java index ce50d617..d9faba5e 100644 --- a/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/services/RecetaService.java +++ b/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/services/RecetaService.java @@ -117,7 +117,6 @@ public class RecetaService { } } - public Receta obtenerReceta(String recetaId) throws GatewayException, IOException { var evaluateResult = contract.evaluateTransaction("ReadReceta", recetaId); ObjectMapper objectMapper = new ObjectMapper(); diff --git a/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/services/VacunaService.java b/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/services/VacunaService.java index e6411438..7ac59616 100644 --- a/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/services/VacunaService.java +++ b/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/services/VacunaService.java @@ -1,5 +1,6 @@ package com.code.hyperledger.services; +import com.code.hyperledger.models.Receta; import com.code.hyperledger.models.Vacuna; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; @@ -11,6 +12,8 @@ import lombok.SneakyThrows; import org.hyperledger.fabric.client.*; import org.hyperledger.fabric.client.identity.*; import org.springframework.stereotype.Service; +import org.hyperledger.fabric.client.identity.Identity; +import org.hyperledger.fabric.client.identity.Signer; import javax.annotation.PostConstruct; import java.io.IOException; @@ -19,6 +22,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.security.InvalidKeyException; import java.security.cert.CertificateException; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -126,6 +130,20 @@ public class VacunaService { objectMapper.getTypeFactory().constructCollectionType(List.class, Vacuna.class)); } + public List obtenerVacunasPorIds(List vacunaIds) throws GatewayException, IOException { + ObjectMapper objectMapper = new ObjectMapper(); + String idsJson = objectMapper.writeValueAsString(vacunaIds); + var evaluateResult = contract.evaluateTransaction("GetMultipleVacunas", idsJson); + + if (evaluateResult == null || evaluateResult.length == 0) { + System.err.println("GetMultipleVacunas devolvió una respuesta vacía."); + return new ArrayList<>(); + } + + return objectMapper.readValue(evaluateResult, + objectMapper.getTypeFactory().constructCollectionType(List.class, Vacuna.class)); + } + public List obtenerVacunasPorDniYEstado(String dni, String estado) throws GatewayException, IOException { ObjectMapper objectMapper = new ObjectMapper(); byte[] evaluateResult;