59 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Package model is an interface for data modelling
 | |
| package model
 | |
| 
 | |
| import (
 | |
| 	"github.com/asim/go-micro/v3/codec"
 | |
| 	"github.com/asim/go-micro/v3/store"
 | |
| 	"github.com/asim/go-micro/v3/sync"
 | |
| )
 | |
| 
 | |
| // Model provides an interface for data modelling
 | |
| type Model interface {
 | |
| 	// Initialise options
 | |
| 	Init(...Option) error
 | |
| 	// NewEntity creates a new entity to store or access
 | |
| 	NewEntity(name string, value interface{}) Entity
 | |
| 	// Create a value
 | |
| 	Create(Entity) error
 | |
| 	// Read values
 | |
| 	Read(...ReadOption) ([]Entity, error)
 | |
| 	// Update the value
 | |
| 	Update(Entity) error
 | |
| 	// Delete an entity
 | |
| 	Delete(...DeleteOption) error
 | |
| 	// Implementation of the model
 | |
| 	String() string
 | |
| }
 | |
| 
 | |
| type Entity interface {
 | |
| 	// Unique id of the entity
 | |
| 	Id() string
 | |
| 	// Name of the entity
 | |
| 	Name() string
 | |
| 	// The value associated with the entity
 | |
| 	Value() interface{}
 | |
| 	// Attributes of the entity
 | |
| 	Attributes() map[string]interface{}
 | |
| }
 | |
| 
 | |
| type Options struct {
 | |
| 	// Database to write to
 | |
| 	Database string
 | |
| 	// for serialising
 | |
| 	Codec codec.Marshaler
 | |
| 	// for locking
 | |
| 	Sync sync.Sync
 | |
| 	// for storage
 | |
| 	Store store.Store
 | |
| }
 | |
| 
 | |
| type Option func(o *Options)
 | |
| 
 | |
| type ReadOptions struct{}
 | |
| 
 | |
| type ReadOption func(o *ReadOptions)
 | |
| 
 | |
| type DeleteOptions struct{}
 | |
| 
 | |
| type DeleteOption func(o *DeleteOptions)
 |