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  }