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  }