Project, groups and Users being implemented in PDC2

This commit is contained in:
Fernando Garzon 2023-02-24 10:16:32 -08:00
parent ea2bd84eb8
commit 4aa12017bf
4 changed files with 57 additions and 3 deletions

View file

@ -50,6 +50,17 @@ type PrivateSchemaContent struct {
Project string `json:"Project` Project string `json:"Project`
} }
type PrivateProjectsContent struct {
OrgName string `json:OrgName`
ProjectName string `json:ProjectName`
AdmninGroup []User `json:AdminGroup`
UsersGroup []User `json:UsersGroup`
ProjectID string `json:ProjectID`
}
// Not being persisted
type Schema struct { type Schema struct {
JsonSchemaContent map[string]interface{} `json:"JsonSchemaContent"` JsonSchemaContent map[string]interface{} `json:"JsonSchemaContent"`
SchemaId string `json:"SchemaId"` SchemaId string `json:"SchemaId"`
@ -834,7 +845,6 @@ func (s *SmartContract) WriteSchemaToPDC(ctx contractapi.TransactionContextInter
type transientInput struct { type transientInput struct {
JsonSchemaContent map[string]interface{} `json:"JsonSchemaContent"` JsonSchemaContent map[string]interface{} `json:"JsonSchemaContent"`
//JsonSchemaContent string `json:"JsonSchemaContent"`
SchemaId string `json:"SchemaId"` SchemaId string `json:"SchemaId"`
Project string `json:"Project` Project string `json:"Project`
} }
@ -959,3 +969,44 @@ func (s *SmartContract) GetAllPDCSchemas(ctx contractapi.TransactionContextInter
return schemas, nil return schemas, nil
} }
// Could also be called "Create Project"
func (s *SmartContract) writeProjectToPDC(ctx contractapi.TransactionContextInterface) error{
// Get new asset from transient map
transientMap, err := ctx.GetStub().GetTransient()
if err != nil {
return fmt.Errorf("error getting transient: %v", err)
}
// Project properties are private, therefore they get passed in transient field, instead of func args
transientAssetJSON, ok := transientMap["asset_properties"]
if !ok {
//log error to stdout
return fmt.Errorf("asset not found in the transient map input")
}
type transientInput struct {
OrgName string `json:OrgName`
ProjectName string `json:ProjectName`
AdmninGroup []User `json:AdminGroup`
UsersGroup []User `json:UsersGroup`
ProjectID string `json:ProjectID`
}
var assetInput transientInput
err = json.Unmarshal(transientAssetJSON, &assetInput)
if err != nil {
return fmt.Errorf("failed to unmarshal JSON: %v", err)
}
assetAsBytes, err := ctx.GetStub().GetPrivateData(PDC2, assetInput.ProjectID)
if err != nil {
return fmt.Errorf("failed to get Project: %v", err)
} else if assetAsBytes != nil {
fmt.Println("Project already exists: " + assetInput.SchemaId)
return fmt.Errorf("this Project already exists: " + assetInput.SchemaId)
}
}

View file

@ -226,6 +226,7 @@ echo "========= Setting Up Network with PDC and SmartContract ==========="
cd /Users/fernando/Projects/OSC-IS/fabric-samples/test-network cd /Users/fernando/Projects/OSC-IS/fabric-samples/test-network
./network.sh down ./network.sh down
export PATH=$PATH:/usr/local/go/bin
./network.sh up createChannel -ca -s couchdb ./network.sh up createChannel -ca -s couchdb
./network.sh deployCC -ccn private -ccp ../asset-transfer-private-data/chaincode-go/ -ccl go -ccep "OR('Org1MSP.peer','Org2MSP.peer')" -cccg ../asset-transfer-private-data/chaincode-go/collections_config.json ./network.sh deployCC -ccn private -ccp ../asset-transfer-private-data/chaincode-go/ -ccl go -ccep "OR('Org1MSP.peer','Org2MSP.peer')" -cccg ../asset-transfer-private-data/chaincode-go/collections_config.json
@ -265,6 +266,8 @@ peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.exa
echo "========= CC Invoke: Reading of Schema in PDC ===========" echo "========= CC Invoke: Reading of Schema in PDC ==========="
peer chaincode query -C mychannel -n private -c '{"function":"ReadSchemaFromPDC","Args":["Project1.Schema1"]}'
peer chaincode query -C mychannel -n private -c '{"function":"ReadSchemaFromPDC","Args":["Project2.Schema1"]}' peer chaincode query -C mychannel -n private -c '{"function":"ReadSchemaFromPDC","Args":["Project2.Schema1"]}'
peer chaincode query -C mychannel -n private -c '{"function":"ReadSchemaFromPDC","Args":["Project1.Schema2"]}' peer chaincode query -C mychannel -n private -c '{"function":"ReadSchemaFromPDC","Args":["Project1.Schema2"]}'
@ -272,8 +275,8 @@ peer chaincode query -C mychannel -n private -c '{"function":"ReadSchemaFromPDC"
echo "========= CC Invoke: Reading all Schemas in PDC ===========" echo "========= CC Invoke: Reading all Schemas in PDC ==========="
peer chaincode query -C mychannel -n private -c '{"function":"GetAllPDCSchemas","Args":["1"]}' peer chaincode query -C mychannel -n private -c '{"function":"GetAllPDCSchemas","Args":[""]}'
echo "========= CC Invoke: Creation of DataSample ===========" echo "========= CC Invoke: Creation of DataSample ==========="
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"CreateDataSample","Args":["CIA Org", "Project 1", "Comment: Proof of live in Mars", "13/13/13", "Project1.Schema1", "{ \"number\": 1603, \"street_name\": \"Pennsylvania\", \"street_type\": \"Avenue\"}"]}' peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n private --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"CreateDataSample","Args":["CIA Org", "Project 1", "Comment: Proof of life presence in Mars", "13/13/13", "jhon@email.com", "{ \"number\": 1603, \"street_name\": \"Pennsylvania\", \"street_type\": \"Avenue\"}", ,"Project1.Schema1"]}'