engine

package
v0.0.0-...-40fc3ee Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 19, 2019 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Condition

type Condition byte

Condition represents a filter comparison operation between a field and a value

const (
	// Equal if it should be the same
	Equal Condition = 1 << iota

	// LessThan if it should be smaller
	LessThan

	// LessThanOrEqual if it should be smaller or equal
	LessThanOrEqual

	// GreaterThan if it should be larger
	GreaterThan

	// GreaterThanOrEqual if it should be equal or greater than
	GreaterThanOrEqual
)

type Direction

type Direction byte

Direction represents a query sort direction

const (
	// Ascending means going up, A-Z
	Ascending Direction = 1 << iota

	// Descending means reverse order, Z-A
	Descending
)

type Factory

type Factory interface {
	// NewPost creates a new Post interactor
	NewPost() Post
}

Factory interface allows us to provide other parts of the system with a way to make instances of our use-case / interactors when they need to

func NewEngine

func NewEngine(s StorageFactory) Factory

NewEngine creates a new engine factory that will make use of the passed in StorageFactory for any data persistence needs.

type Filter

type Filter struct {
	Property  string
	Condition Condition
	Value     interface{}
}

Filter represents a filter operation on a single field

func NewFilter

func NewFilter(property string, condition Condition, value interface{}) *Filter

NewFilter creates a new property filter

type JWTSignParser

type JWTSignParser interface {
	Sign(claims map[string]interface{}, secret string) (map[string]interface{}, error)
	Parse(tokenStr string, secret string) (map[string]interface{}, error)
}

JWTSignParser ...

type Order

type Order struct {
	Property  string
	Direction Direction
}

Order represents a sort operation on a single field

func NewOrder

func NewOrder(property string, direction Direction) *Order

NewOrder creates a new query order

type Post

type Post interface {
	Insert(ctx context.Context, author, topic, category, contentText, contentPhoto string) error

	// Update is the update-a-post use-case
	Update(ctx context.Context, author, topic, category, contentText, contentPhoto string, id string) error

	// Query is the list-the-posts use-case
	Query(ctx context.Context, skip uint64, take uint64) ([]domain.Post, error)

	// FindOne ...
	FindOne(ctx context.Context, id string) (*domain.Post, error)

	// RemoveDelete ...
	Remove(ctx context.Context, id string) (string, error)

	// ListAllPosts ...
	ListAllPosts(ctx context.Context, skip, take uint64) (*[]domain.Post, error)
}

Post ...

type PostRepository

type PostRepository interface {

	// Post adds a new Post to the datastore
	Insert(c context.Context, post domain.Post) error

	// Put adds a new Post to the datastore
	Update(c context.Context, post domain.Post, id string) error

	// Query returns existing posts matching the
	// query provided
	Query(c context.Context, query *Query) []*domain.Post

	// FindOne returns ...
	FindOne(c context.Context, id string) (*domain.Post, error)

	// Remove ...
	Remove(c context.Context, id string) (string, error)

	// ListAllPosts ...
	ListAllPosts(ctx context.Context, skip uint64, take uint64) ([]domain.Post, error)
}

PostRepository defines the methods that any data storage provider needs to implement to get and store posts

type Query

type Query struct {
	Name    string
	Offset  int
	Limit   int
	Filters []*Filter
	Orders  []*Order
}

Query represents a query specification for filtering sorting, paging and limiting the data requested

func NewQuery

func NewQuery(name string) *Query

NewQuery creates a new database query spec. The name is what the storage system should use to identify the types, usually a table or collection name.

func (*Query) Filter

func (q *Query) Filter(property string, condition Condition, value interface{}) *Query

Filter adds a filter to the query

func (*Query) Order

func (q *Query) Order(property string, direction Direction) *Query

Order adds a sort order to the query

func (*Query) Slice

func (q *Query) Slice(offset, limit int) *Query

Slice adds a slice operation to the query

type QueryBuilder

type QueryBuilder interface {
	Filter(property string, value interface{}) QueryBuilder
	Order(property string, direction Direction)
}

QueryBuilder helps with query creation

type SecurityFactory

type SecurityFactory interface {
	// NewSecurityFactory ...
	NewSecurityFactory() JWTSignParser
}

SecurityFactory ...

type StorageFactory

type StorageFactory interface {
	// NewPostRepository returns a storage specific
	// PostRepository implementation
	NewPostRepository() PostRepository

	Close()
}

StorageFactory is the interface that a storage provider needs to implement so that the engine can request repository instances as it needs them

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL