github.com/s7techlab/cckit@v0.10.5/examples/cpaper_proxy/cpaper_proxy.go (about) 1 package cpaper_proxy 2 3 import ( 4 "fmt" 5 6 cpservice "github.com/s7techlab/cckit/examples/cpaper_asservice" 7 "github.com/s7techlab/cckit/extensions/crosscc" 8 "github.com/s7techlab/cckit/router" 9 ) 10 11 type ( 12 CPaperProxyService struct { 13 CPaperServiceResolver cpservice.CPaperServiceChaincodeResolver 14 } 15 ) 16 17 // NewServiceWithLocalCPaperResolver - crosscc service and cpaper service in one chaincode 18 func NewServiceWithLocalCPaperResolver(cpaperService cpservice.CPaperServiceChaincode) *CPaperProxyService { 19 return &CPaperProxyService{ 20 CPaperServiceResolver: cpservice.NewCPaperServiceChaincodeLocalResolver(cpaperService), 21 } 22 } 23 24 func NewServiceWithRemoteCPaperResolver(setting crosscc.SettingServiceChaincode) *CPaperProxyService { 25 return &CPaperProxyService{ 26 CPaperServiceResolver: cpservice.NewCPaperServiceChaincodeResolver(crosscc.LocatorResolver(setting)), 27 } 28 } 29 30 func (c *CPaperProxyService) GetFromCPaper(ctx router.Context, id *Id) (*InfoFromCPaper, error) { 31 cpaperService, err := c.CPaperServiceResolver.Resolve(ctx) 32 if err != nil { 33 return nil, fmt.Errorf(`resolve Commercial Paper service: %w`, err) 34 } 35 // It can be cross chaincode invocation or local, if commercial paper service works in same chaincode 36 cpaper, err := cpaperService.Get(ctx, &cpservice.CommercialPaperId{Issuer: id.Issuer, PaperNumber: id.PaperNumber}) 37 if err != nil { 38 return nil, fmt.Errorf(`get commercial paper from service: %w`, err) 39 } 40 41 return &InfoFromCPaper{ 42 Issuer: cpaper.Issuer, 43 PaperNumber: cpaper.PaperNumber, 44 Owner: cpaper.Owner, 45 }, nil 46 }