github.com/muhammedhassanm/blockchain@v0.0.0-20200120143007-697261defd4d/build-blockchain-insurance-app-master/web/chaincode/src/bcins/invoke_repairshop.go (about) 1 package main 2 3 import "github.com/hyperledger/fabric/core/chaincode/shim" 4 import ( 5 "encoding/json" 6 pb "github.com/hyperledger/fabric/protos/peer" 7 ) 8 9 func listRepairOrders(stub shim.ChaincodeStubInterface, args []string) pb.Response { 10 resultsIterator, err := stub.GetStateByPartialCompositeKey(prefixRepairOrder, []string{}) 11 if err != nil { 12 return shim.Error(err.Error()) 13 } 14 defer resultsIterator.Close() 15 16 results := []interface{}{} 17 for resultsIterator.HasNext() { 18 kvResult, err := resultsIterator.Next() 19 if err != nil { 20 return shim.Error(err.Error()) 21 } 22 23 repairOrder := repairOrder{} 24 err = json.Unmarshal(kvResult.Value, &repairOrder) 25 if err != nil { 26 return shim.Error(err.Error()) 27 } 28 if repairOrder.Ready { 29 continue 30 } 31 32 result := struct { 33 UUID string `json:"uuid"` 34 ClaimUUID string `json:"claim_uuid"` 35 ContractUUID string `json:"contract_uuid"` 36 Item item `json:"item"` 37 }{} 38 err = json.Unmarshal(kvResult.Value, &result) 39 if err != nil { 40 return shim.Error(err.Error()) 41 } 42 prefix, keyParts, err := stub.SplitCompositeKey(kvResult.Key) 43 if err != nil { 44 return shim.Error(err.Error()) 45 } 46 if len(keyParts) == 0 { 47 result.UUID = prefix 48 } else { 49 result.UUID = keyParts[0] 50 } 51 results = append(results, result) 52 } 53 54 resultsAsBytes, err := json.Marshal(results) 55 if err != nil { 56 return shim.Error(err.Error()) 57 } 58 return shim.Success(resultsAsBytes) 59 } 60 61 func completeRepairOrder(stub shim.ChaincodeStubInterface, args []string) pb.Response { 62 if len(args) != 1 { 63 return shim.Error("Invalid argument count.") 64 } 65 66 input := struct { 67 UUID string `json:"uuid"` 68 }{} 69 err := json.Unmarshal([]byte(args[0]), &input) 70 if err != nil { 71 return shim.Error(err.Error()) 72 } 73 74 repairOrderKey, err := stub.CreateCompositeKey(prefixRepairOrder, []string{input.UUID}) 75 if err != nil { 76 return shim.Error(err.Error()) 77 } 78 79 repairOrderBytes, _ := stub.GetState(repairOrderKey) 80 if len(repairOrderBytes) == 0 { 81 return shim.Error("Could not find the repair order") 82 } 83 84 repairOrder := repairOrder{} 85 err = json.Unmarshal(repairOrderBytes, &repairOrder) 86 if err != nil { 87 return shim.Error(err.Error()) 88 } 89 90 // Marking repair order as ready 91 repairOrder.Ready = true 92 93 repairOrderBytes, err = json.Marshal(repairOrder) 94 if err != nil { 95 return shim.Error(err.Error()) 96 } 97 err = stub.PutState(repairOrderKey, repairOrderBytes) 98 if err != nil { 99 return shim.Error(err.Error()) 100 } 101 102 // Reflect changes in the corresponding claim 103 claimKey, err := stub.CreateCompositeKey(prefixClaim, []string{repairOrder.ContractUUID, repairOrder.ClaimUUID}) 104 if err != nil { 105 return shim.Error(err.Error()) 106 } 107 claimBytes, _ := stub.GetState(claimKey) 108 if claimBytes != nil { 109 claim := claim{} 110 err := json.Unmarshal(claimBytes, &claim) 111 if err != nil { 112 return shim.Error(err.Error()) 113 } 114 115 claim.Repaired = true 116 claimBytes, err = json.Marshal(claim) 117 if err != nil { 118 return shim.Error(err.Error()) 119 } 120 121 err = stub.PutState(claimKey, claimBytes) 122 if err != nil { 123 return shim.Error(err.Error()) 124 } 125 } 126 127 return shim.Success(nil) 128 }