diff --git a/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go b/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go index f10c5b69..82f108d2 100644 --- a/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go +++ b/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go @@ -256,3 +256,27 @@ func (s *SmartContract) GetAllAssets(ctx contractapi.TransactionContextInterface return assets, nil } + +// GetMultipleAssets devuelve mĂșltiples activos basados en sus IDs +func (s *SmartContract) GetMultipleAssets(ctx contractapi.TransactionContextInterface, assetIDs []string) ([]*Receta, error) { + var recetas []*Receta + + for _, id := range assetIDs { + assetJSON, err := ctx.GetStub().GetState(id) + if err != nil { + return nil, fmt.Errorf("failed to read from world state: %v", err) + } + if assetJSON == nil { + continue // o puedes devolver error si prefieres + } + + var receta Receta + err = json.Unmarshal(assetJSON, &receta) + if err != nil { + return nil, err + } + recetas = append(recetas, &receta) + } + + return recetas, nil +} diff --git a/asset-transfer-basic/maven-example/src/main/java/com/code/hyperledger/controllers/RecetaController.java b/asset-transfer-basic/maven-example/src/main/java/com/code/hyperledger/controllers/RecetaController.java index c0515bde..45cacdb8 100644 --- a/asset-transfer-basic/maven-example/src/main/java/com/code/hyperledger/controllers/RecetaController.java +++ b/asset-transfer-basic/maven-example/src/main/java/com/code/hyperledger/controllers/RecetaController.java @@ -79,5 +79,45 @@ public class RecetaController { e.printStackTrace(); return new ResponseEntity<>(HttpStatus.NOT_ACCEPTABLE); } - } + } + + @PostMapping("/todas") + public ResponseEntity> obtenerRecetasPorIds(@RequestBody Map> requestBody) { + try { + List ids = requestBody.get("ids"); + if (ids == null || ids.isEmpty()) { + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + + System.out.println("IDs solicitados: " + ids); + List recetas = recetaService.obtenerRecetasPorIds(ids); + List recetasDto = new ArrayList<>(); + + for (Receta receta : recetas) { + RecetaDto recetaDto = new RecetaDto(); + recetaDto.setOwner(receta.getOwner()); + recetaDto.setPrescripcionAnteriorId(receta.getPrescripcionAnteriorId()); + recetaDto.setStatus(receta.getStatus()); + recetaDto.setStatusChange(receta.getStatusChange()); + recetaDto.setPrioridad(receta.getPrioridad()); + recetaDto.setMedicacion(receta.getMedicacion()); + recetaDto.setRazon(receta.getRazon()); + recetaDto.setNotas(receta.getNotas()); + recetaDto.setPeriodoDeTratamiento(receta.getPeriodoDeTratamiento()); + recetaDto.setInstruccionesTratamiento(receta.getInstruccionesTratamiento()); + recetaDto.setPeriodoDeValidez(receta.getPeriodoDeValidez()); + recetaDto.setDniPaciente(receta.getDniPaciente()); + recetaDto.setFechaDeAutorizacion(receta.getFechaDeAutorizacion()); + recetaDto.setCantidad(receta.getCantidad()); + recetaDto.setExpectedSupplyDuration(receta.getExpectedSupplyDuration()); + + recetasDto.add(recetaDto); + } + + return new ResponseEntity<>(recetasDto, HttpStatus.OK); + } catch (IOException | GatewayException e) { + e.printStackTrace(); + return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); + } + } } diff --git a/asset-transfer-basic/maven-example/src/main/java/com/code/hyperledger/services/RecetaService.java b/asset-transfer-basic/maven-example/src/main/java/com/code/hyperledger/services/RecetaService.java index a57f4937..4e49d3f0 100644 --- a/asset-transfer-basic/maven-example/src/main/java/com/code/hyperledger/services/RecetaService.java +++ b/asset-transfer-basic/maven-example/src/main/java/com/code/hyperledger/services/RecetaService.java @@ -161,4 +161,28 @@ public class RecetaService { System.out.println("mapper:" + receta.getDniPaciente()); return receta; } + + public List obtenerTodosLosAssets() throws GatewayException, IOException { + System.out.println("\n--> Evaluate Transaction: GetAllAssets"); + + var evaluateResult = contract.evaluateTransaction("GetAllAssets"); + ObjectMapper objectMapper = new ObjectMapper(); + + // Leer como array de Recetas + List recetas = objectMapper.readValue(evaluateResult, + objectMapper.getTypeFactory().constructCollectionType(List.class, Receta.class)); + + return recetas; + } + + public List obtenerRecetasPorIds(List assetIds) throws GatewayException, IOException { + System.out.println("\n--> Evaluate Transaction: GetMultipleAssets"); + + ObjectMapper objectMapper = new ObjectMapper(); + String idsJson = objectMapper.writeValueAsString(assetIds); + + var evaluateResult = contract.evaluateTransaction("GetMultipleAssets", idsJson); + return objectMapper.readValue(evaluateResult, + objectMapper.getTypeFactory().constructCollectionType(List.class, Receta.class)); + } }