Agrego lo necesario para devolver varios assets y el endpoint para devolver los assets para recetas

This commit is contained in:
FrancoPandolfo 2025-04-03 23:22:29 +00:00
parent 6c9d40ddf0
commit 462ad74cd2
3 changed files with 89 additions and 1 deletions

View file

@ -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
}

View file

@ -79,5 +79,45 @@ public class RecetaController {
e.printStackTrace();
return new ResponseEntity<>(HttpStatus.NOT_ACCEPTABLE);
}
}
}
@PostMapping("/todas")
public ResponseEntity<List<RecetaDto>> obtenerRecetasPorIds(@RequestBody Map<String, List<String>> requestBody) {
try {
List<String> ids = requestBody.get("ids");
if (ids == null || ids.isEmpty()) {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
System.out.println("IDs solicitados: " + ids);
List<Receta> recetas = recetaService.obtenerRecetasPorIds(ids);
List<RecetaDto> 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);
}
}
}

View file

@ -161,4 +161,28 @@ public class RecetaService {
System.out.println("mapper:" + receta.getDniPaciente());
return receta;
}
public List<Receta> 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<Receta> recetas = objectMapper.readValue(evaluateResult,
objectMapper.getTypeFactory().constructCollectionType(List.class, Receta.class));
return recetas;
}
public List<Receta> obtenerRecetasPorIds(List<String> 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));
}
}