diff --git a/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go b/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go index 6a3635f7..82dbeee6 100644 --- a/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go +++ b/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go @@ -13,7 +13,7 @@ type SmartContract struct { type Receta struct { ID string `json:"id"` - Identificador string `json:"identificador"` + Identifier string `json:"identifier"` Owner string `json:"owner"` PrescripcionAnteriorId string `json:"prescripcionAnteriorId"` Status string `json:"status"` @@ -51,7 +51,7 @@ func (s *SmartContract) InitLedger(ctx contractapi.TransactionContextInterface) recetas := []Receta{ { ID: "receta1", - Identificador: "rece1234", + Identifier: "rece1234", Owner: "Tomoko", PrescripcionAnteriorId: "presc123", Status: "active", @@ -70,7 +70,7 @@ func (s *SmartContract) InitLedger(ctx contractapi.TransactionContextInterface) }, { ID: "receta2", - Identificador: "rece1235", + Identifier: "rece1235", Owner: "Alice", PrescripcionAnteriorId: "presc456", Status: "completed", diff --git a/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/controllers/RecetaController.java b/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/controllers/RecetaController.java index 90c4f6d8..6592d168 100644 --- a/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/controllers/RecetaController.java +++ b/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/controllers/RecetaController.java @@ -5,6 +5,9 @@ import com.code.hyperledger.models.AssetIdDto; import com.code.hyperledger.models.Receta; import com.code.hyperledger.models.RecetaDto; import com.code.hyperledger.services.RecetaService; + +import main.java.com.code.hyperledger.models.RecetaRequestDto; + import org.hyperledger.fabric.client.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -17,47 +20,86 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + @RestController @RequestMapping("/recetas") public class RecetaController { + private static final Logger logger = LoggerFactory.getLogger(RecetaController.class); + @Autowired private RecetaService recetaService; @PostMapping("/crear") public ResponseEntity crear(@RequestBody Receta receta) { System.out.println("\n--> Submit Transaction: CrearReceta"); - + + // Log para verificar los valores iniciales + System.out.println("Receta recibida: " + receta); + String now = LocalDateTime.now().toString(); String dni = receta.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); + receta.setId(assetId); - + AssetIdDto assetIdDto = new AssetIdDto(); assetIdDto.setDni(dni); assetIdDto.setTimeStamp(now); - + try { + // Log antes de intentar cargar la receta + System.out.println("Intentando cargar la receta..."); + recetaService.cargarReceta(receta); + + // Log después de que la receta fue cargada + System.out.println("Receta cargada correctamente."); + return new ResponseEntity<>(assetIdDto, HttpStatus.OK); } catch (CommitStatusException | EndorseException | CommitException | SubmitException e) { + // Log de error + System.err.println("Error al cargar la receta: " + e.getMessage()); e.printStackTrace(); return new ResponseEntity<>(HttpStatus.UNAUTHORIZED); } - } + } @PostMapping("/obtener") - public ResponseEntity find(@RequestBody Map requestBody) { + public ResponseEntity find(@RequestBody RecetaRequestDto requestBody) { + logger.info("Received request to obtain receta with ID: {}", requestBody.getId()); // Log de entrada + try { - String id = requestBody.get("id"); + String id = requestBody.getId(); + logger.debug("Searching for receta with ID: {}", id); // Log de búsqueda + Receta receta = recetaService.obtenerReceta(id); + logger.debug("Receta found: {}", receta); // Log cuando se encuentra la receta RecetaDto recetaDto = mapToDto(receta); + logger.info("Receta DTO created successfully for ID: {}", id); // Log de éxito + return new ResponseEntity<>(recetaDto, HttpStatus.OK); - } catch (IOException | GatewayException e) { - e.printStackTrace(); + } catch (IOException e) { + logger.error("IOException occurred while obtaining receta with ID: {}", requestBody.getId(), e); // Log de excepción específica return new ResponseEntity<>(HttpStatus.NOT_ACCEPTABLE); + } catch (GatewayException e) { + logger.error("GatewayException occurred while obtaining receta with ID: {}", requestBody.getId(), e); // Log de excepción Gateway + return new ResponseEntity<>(HttpStatus.NOT_ACCEPTABLE); + } catch (Exception e) { + logger.error("Unexpected error occurred while obtaining receta with ID: {}", requestBody.getId(), e); // Log de error inesperado + return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } diff --git a/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/models/Receta.java b/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/models/Receta.java index 2deb0d26..e4babf36 100644 --- a/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/models/Receta.java +++ b/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/models/Receta.java @@ -25,7 +25,7 @@ public class Receta { private String patientDocumentNumber; //@JsonFormat(pattern = "yyyy-MM-dd") private String fechaDeAutorizacion; - private int cantidad; + private String cantidad; //@JsonFormat(pattern = "yyyy-MM-dd") private String expectedSupplyDuration; } \ No newline at end of file diff --git a/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/models/RecetaDto.java b/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/models/RecetaDto.java index eb925d4d..5beeea26 100644 --- a/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/models/RecetaDto.java +++ b/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/models/RecetaDto.java @@ -24,7 +24,7 @@ public class RecetaDto { private String patientDocumentNumber; //@JsonFormat(pattern = "yyyy-MM-dd") private String fechaDeAutorizacion; - private int cantidad; + private String cantidad; //@JsonFormat(pattern = "yyyy-MM-dd") private String expectedSupplyDuration; } diff --git a/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/models/RecetaRequestDto.java b/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/models/RecetaRequestDto.java new file mode 100644 index 00000000..fc918b37 --- /dev/null +++ b/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/models/RecetaRequestDto.java @@ -0,0 +1,13 @@ +package main.java.com.code.hyperledger.models; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RecetaRequestDto { + private String id; +} + diff --git a/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/models/Vacuna.java b/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/models/Vacuna.java index f280d003..3a70bda9 100644 --- a/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/models/Vacuna.java +++ b/asset-transfer-basic/maven-API-SiMeDi/src/main/java/com/code/hyperledger/models/Vacuna.java @@ -11,7 +11,6 @@ public class Vacuna { private String id; private String identificador; private String status; - private String statusChange; private String statusReason; private String vaccinateCode; 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 0849307e..ce50d617 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 @@ -11,16 +11,18 @@ 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; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import org.hyperledger.fabric.client.identity.Identity; import java.security.InvalidKeyException; -import org.hyperledger.fabric.client.identity.Signer; import java.security.cert.CertificateException; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -103,26 +105,19 @@ public class RecetaService { public void cargarReceta(Receta receta) throws CommitStatusException, EndorseException, CommitException, SubmitException { - contract.submitTransaction( - "CreateReceta", - receta.getId(), - receta.getOwner(), - receta.getPrescripcionAnteriorId(), - receta.getStatus(), - receta.getStatusChange(), - receta.getPrioridad(), - receta.getMedicacion(), - receta.getRazon(), - receta.getNotas(), - receta.getPeriodoDeTratamiento(), - receta.getInstruccionesTratamiento(), - receta.getPeriodoDeValidez(), - receta.getPatientDocumentNumber(), - receta.getFechaDeAutorizacion(), - Integer.toString(receta.getCantidad()), - receta.getExpectedSupplyDuration()); + try { + ObjectMapper objectMapper = new ObjectMapper(); + String recetaJson = objectMapper.writeValueAsString(receta); + + contract.submitTransaction("CreateReceta", recetaJson); + System.out.println("Receta creada correctamente"); + } catch (Exception e) { + System.err.println("Error en submitTransaction: " + e.getMessage()); + e.printStackTrace(); + } } + public Receta obtenerReceta(String recetaId) throws GatewayException, IOException { var evaluateResult = contract.evaluateTransaction("ReadReceta", recetaId); ObjectMapper objectMapper = new ObjectMapper(); @@ -140,6 +135,12 @@ public class RecetaService { ObjectMapper objectMapper = new ObjectMapper(); String idsJson = objectMapper.writeValueAsString(recetaIds); var evaluateResult = contract.evaluateTransaction("GetMultipleRecetas", idsJson); + + if (evaluateResult == null || evaluateResult.length == 0) { + System.err.println("GetMultipleRecetas devolvió una respuesta vacía."); + return new ArrayList<>(); + } + return objectMapper.readValue(evaluateResult, objectMapper.getTypeFactory().constructCollectionType(List.class, Receta.class)); }