From 14d9a95431076ee785aacbadb52567d1c11637ea Mon Sep 17 00:00:00 2001 From: luc662 Date: Thu, 4 Sep 2025 23:23:06 +0000 Subject: [PATCH] se agrego el contract para traer vacuans paginadas --- .../statedb/couchdb/indexes/indexVacunas.json | 2 +- .../chaincode-go/chaincode/smartcontract.go | 59 +++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/asset-transfer-basic/chaincode-go/chaincode/META-INF/statedb/couchdb/indexes/indexVacunas.json b/asset-transfer-basic/chaincode-go/chaincode/META-INF/statedb/couchdb/indexes/indexVacunas.json index e42d5545..12164d97 100644 --- a/asset-transfer-basic/chaincode-go/chaincode/META-INF/statedb/couchdb/indexes/indexVacunas.json +++ b/asset-transfer-basic/chaincode-go/chaincode/META-INF/statedb/couchdb/indexes/indexVacunas.json @@ -1,6 +1,6 @@ { "index": { - "fields": ["patientDocumentNumber", "status", "expirationDate"] + "fields": ["patientDocumentNumber", "status"] }, "ddoc": "vacunas-index", "name": "indexVacunas", diff --git a/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go b/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go index 7d4d7b4c..eadb2dc8 100644 --- a/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go +++ b/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go @@ -469,6 +469,65 @@ func (s *SmartContract) GetMultipleVacunas(ctx contractapi.TransactionContextInt return vacunas, nil } +type ResultadoPaginadoVacunas struct { + Vacunas []*Vacuna `json:"componentes"` + Bookmark string `json:"bookmark"` +} + +func (s *SmartContract) GetVacunasPorDniPaginado( + ctx contractapi.TransactionContextInterface, + dni string, + pageSize int32, + bookmark string, +) (*ResultadoPaginadoVacunas, error) { + + if dni == "" { + return nil, fmt.Errorf("el dni es obligatorio") + } + + query := map[string]interface{}{ + "selector": map[string]interface{}{ + "patientDocumentNumber": dni, + }, + // primero probamos sin use_index + // "use_index": []string{"vacunas-index", "indexVacunas"}, + "limit": pageSize, + } + if bookmark != "" { + query["bookmark"] = bookmark + } + queryBytes, err := json.Marshal(query) + if err != nil { + return nil, fmt.Errorf("error al generar la query: %v", err) + } + resultsIterator, metadata, err := ctx.GetStub().GetQueryResultWithPagination(string(queryBytes), pageSize, bookmark) + if err != nil { + return nil, fmt.Errorf("error al ejecutar la query: %v", err) + } + defer resultsIterator.Close() + var vacunas []*Vacuna + for resultsIterator.HasNext() { + response, iterErr := resultsIterator.Next() + if iterErr != nil { + return nil, iterErr + } + var vacuna Vacuna + if err := json.Unmarshal(response.Value, &vacuna); err != nil { + return nil, fmt.Errorf("error al parsear vacuna: %v", err) + } + vacunas = append(vacunas, &vacuna) + } + if vacunas == nil { + vacunas = []*Vacuna{} + } + resultado := &ResultadoPaginadoVacunas{ + Vacunas: vacunas, + Bookmark: metadata.Bookmark, + } + + return resultado, nil +} + func (s *SmartContract) GetVacunasPorDniYEstado(ctx contractapi.TransactionContextInterface, dni string, estado string) ([]*Vacuna, error) { if dni == "" { return nil, fmt.Errorf("el dni es obligatorio")