cambios minimos para probar a futuro usar couchDB

This commit is contained in:
luc662 2025-07-10 21:47:40 +00:00
parent 843c6c94fc
commit d416dc97f7
2 changed files with 40 additions and 17 deletions

View file

@ -0,0 +1,15 @@
package main.java.com.code.hyperledger.models;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResultadoPaginado<T> {
private List<T> recetas;
private String bookmark;
}

View file

@ -1,6 +1,7 @@
package com.code.hyperledger.services; package com.code.hyperledger.services;
import com.code.hyperledger.models.Receta; import com.code.hyperledger.models.Receta;
import com.code.hyperledger.models.RecetaDto;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
@ -8,6 +9,8 @@ import io.grpc.Grpc;
import io.grpc.ManagedChannel; import io.grpc.ManagedChannel;
import io.grpc.TlsChannelCredentials; import io.grpc.TlsChannelCredentials;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import main.java.com.code.hyperledger.models.ResultadoPaginado;
import org.hyperledger.fabric.client.*; import org.hyperledger.fabric.client.*;
import org.hyperledger.fabric.client.identity.*; import org.hyperledger.fabric.client.identity.*;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -17,7 +20,9 @@ import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.security.Identity;
import java.security.InvalidKeyException; import java.security.InvalidKeyException;
import java.security.Signer;
import java.security.cert.CertificateException; import java.security.cert.CertificateException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -152,24 +157,21 @@ public class RecetaService {
public List<Receta> obtenerRecetasPorIds(List<String> recetaIds) throws GatewayException, IOException { public List<Receta> obtenerRecetasPorIds(List<String> recetaIds) throws GatewayException, IOException {
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
// 🔍 Log de entrada System.out.println("Solicitando recetas con IDs: " + recetaIds);
System.out.println("⏩ Solicitando recetas con IDs: " + recetaIds);
String idsJson = objectMapper.writeValueAsString(recetaIds); String idsJson = objectMapper.writeValueAsString(recetaIds);
var evaluateResult = contract.evaluateTransaction("GetMultipleRecetas", idsJson); var evaluateResult = contract.evaluateTransaction("GetMultipleRecetas", idsJson);
if (evaluateResult == null || evaluateResult.length == 0) { if (evaluateResult == null || evaluateResult.length == 0) {
System.err.println("⚠️ GetMultipleRecetas devolvió una respuesta vacía."); System.err.println("GetMultipleRecetas devolvió una respuesta vacía.");
return new ArrayList<>(); return new ArrayList<>();
} }
List<Receta> recetas = objectMapper.readValue( List<Receta> recetas = objectMapper.readValue(
evaluateResult, evaluateResult,
objectMapper.getTypeFactory().constructCollectionType(List.class, Receta.class) objectMapper.getTypeFactory().constructCollectionType(List.class, Receta.class));
);
// Log de salida System.out.println("Recetas obtenidas del contrato:");
System.out.println("✅ Recetas obtenidas del contrato:");
for (Receta receta : recetas) { for (Receta receta : recetas) {
System.out.println(" - ID: " + receta.getId() + " | Estado: " + receta.getStatus()); System.out.println(" - ID: " + receta.getId() + " | Estado: " + receta.getStatus());
} }
@ -178,12 +180,12 @@ public class RecetaService {
} }
public void entregarReceta(String recetaId) public void entregarReceta(String recetaId)
throws CommitStatusException, EndorseException, CommitException, SubmitException { throws CommitStatusException, EndorseException, CommitException, SubmitException {
contract.submitTransaction("EntregarReceta", recetaId); contract.submitTransaction("EntregarReceta", recetaId);
} }
public void firmarReceta(String recetaId, String signature) public void firmarReceta(String recetaId, String signature)
throws CommitStatusException, EndorseException, CommitException, SubmitException { throws CommitStatusException, EndorseException, CommitException, SubmitException {
System.out.println("[INFO] Iniciando firma de receta con ID: " + recetaId); System.out.println("[INFO] Iniciando firma de receta con ID: " + recetaId);
try { try {
var evaluateResult = contract.submitTransaction("FirmarReceta", recetaId, signature); var evaluateResult = contract.submitTransaction("FirmarReceta", recetaId, signature);
@ -196,7 +198,7 @@ public class RecetaService {
} }
public void borrarReceta(String recetaId) public void borrarReceta(String recetaId)
throws CommitStatusException, EndorseException, CommitException, SubmitException { throws CommitStatusException, EndorseException, CommitException, SubmitException {
System.out.println("[INFO] Iniciando borrado de receta con ID: " + recetaId); System.out.println("[INFO] Iniciando borrado de receta con ID: " + recetaId);
try { try {
var evaluateResult = contract.submitTransaction("DeleteReceta", recetaId); var evaluateResult = contract.submitTransaction("DeleteReceta", recetaId);
@ -208,14 +210,20 @@ public class RecetaService {
} }
} }
public List<Receta> obtenerRecetasPorDniYEstado(String dni, String estado) throws GatewayException, IOException { public ResultadoPaginado<RecetaDto> obtenerRecetasPorDniYEstadoPaginado(
String dni, String estado, int pageSize, String bookmark) throws GatewayException, IOException {
if (dni == null || dni.isBlank() || estado == null || estado.isBlank()) { if (dni == null || dni.isBlank() || estado == null || estado.isBlank()) {
throw new IllegalArgumentException("DNI y estado son obligatorios"); throw new IllegalArgumentException("DNI y estado son obligatorios");
} }
var evaluateResult = contract.evaluateTransaction("GetRecetasPorDniYEstado", dni, estado); var result = contract.evaluateTransaction("GetRecetasPorDniYEstado", dni, estado, String.valueOf(pageSize),
ObjectMapper objectMapper = new ObjectMapper(); bookmark);
return objectMapper.readValue(evaluateResult,
objectMapper.getTypeFactory().constructCollectionType(List.class, Receta.class)); var type = new ObjectMapper()
.getTypeFactory()
.constructParametricType(ResultadoPaginado.class, RecetaDto.class);
return new ObjectMapper().readValue(result, type);
} }
} }