github.com/s7techlab/cckit@v0.10.5/state/mapping/testdata/cc_indexes.go (about)

     1  package testdata
     2  
     3  import (
     4  	"github.com/s7techlab/cckit/extensions/owner"
     5  	"github.com/s7techlab/cckit/router"
     6  	"github.com/s7techlab/cckit/router/param/defparam"
     7  	"github.com/s7techlab/cckit/state/mapping"
     8  	"github.com/s7techlab/cckit/state/mapping/testdata/schema"
     9  )
    10  
    11  var (
    12  	EntityWithIndexesStateMapping = mapping.StateMappings{}.
    13  		Add(&schema.EntityWithIndexes{},
    14  			mapping.PKeyId(),
    15  			mapping.List(&schema.EntityWithIndexesList{}),
    16  			mapping.UniqKey(`ExternalId`),
    17  			mapping.WithIndex(&mapping.StateIndexDef{
    18  				Name:     `OptionalExternalIds`,
    19  				Required: false,
    20  				Multi:    true,
    21  			}))
    22  )
    23  
    24  func NewIndexesCC() *router.Chaincode {
    25  	r := router.New("indexes")
    26  
    27  	r.Use(mapping.MapStates(EntityWithIndexesStateMapping))
    28  
    29  	r.Init(owner.InvokeSetFromCreator)
    30  
    31  	r.
    32  		Query("list", queryListIndexes).
    33  		Query("get", queryByIdIndexes, defparam.String()).
    34  		Query("getByExternalId", queryByExternalId, defparam.String()).
    35  		Query("getByOptMultiExternalId", queryByOptMultiExternalId, defparam.String()).
    36  		Invoke("create", invokeCreateIndexes, defparam.Proto(&schema.CreateEntityWithIndexes{})).
    37  		Invoke("update", invokeUpdateIndexes, defparam.Proto(&schema.UpdateEntityWithIndexes{})).
    38  		Invoke("delete", invokeDeleteIndexes, defparam.String())
    39  
    40  	return router.NewChaincode(r)
    41  }
    42  
    43  func queryByIdIndexes(c router.Context) (interface{}, error) {
    44  	return c.State().Get(&schema.EntityWithIndexes{Id: c.Param().(string)})
    45  }
    46  
    47  func queryListIndexes(c router.Context) (interface{}, error) {
    48  	return c.State().List(&schema.EntityWithIndexes{})
    49  }
    50  
    51  func invokeCreateIndexes(c router.Context) (interface{}, error) {
    52  	create := c.Param().(*schema.CreateEntityWithIndexes)
    53  	entity := &schema.EntityWithIndexes{
    54  		Id:                  create.Id,
    55  		ExternalId:          create.ExternalId,
    56  		RequiredExternalIds: create.RequiredExternalIds,
    57  		OptionalExternalIds: create.OptionalExternalIds,
    58  		Value:               create.Value,
    59  	}
    60  
    61  	return entity, c.State().Insert(entity)
    62  }
    63  
    64  func invokeUpdateIndexes(c router.Context) (interface{}, error) {
    65  	update := c.Param().(*schema.UpdateEntityWithIndexes)
    66  	entity := &schema.EntityWithIndexes{
    67  		Id:                  update.Id,
    68  		ExternalId:          update.ExternalId,
    69  		RequiredExternalIds: update.RequiredExternalIds,
    70  		OptionalExternalIds: update.OptionalExternalIds,
    71  		Value:               update.Value,
    72  	}
    73  
    74  	return entity, c.State().Put(entity)
    75  }
    76  
    77  func invokeDeleteIndexes(c router.Context) (interface{}, error) {
    78  	return nil, c.State().(mapping.MappedState).Delete(&schema.EntityWithIndexes{Id: c.Param().(string)})
    79  }
    80  
    81  func queryByExternalId(c router.Context) (interface{}, error) {
    82  	externalId := c.Param().(string)
    83  	return c.State().(mapping.MappedState).GetByKey(
    84  		&schema.EntityWithIndexes{}, "ExternalId", []string{externalId})
    85  }
    86  
    87  func queryByOptMultiExternalId(c router.Context) (interface{}, error) {
    88  	externalId := c.Param().(string)
    89  	return c.State().(mapping.MappedState).GetByKey(
    90  		&schema.EntityWithIndexes{}, "OptionalExternalIds", []string{externalId})
    91  }