Documentation ¶
Index ¶
- Constants
- Variables
- type Clock
- type Dao
- type DaoFiller
- type Driver
- type Logger
- type Model
- type Repository
- func (r Repository[M, D, SF, SORD, SO, UF]) BuildSearchFilters(opts SF) (bson.D, error)
- func (r Repository[M, D, SF, SORD, SO, UF]) BuildSearchOptions(opts SO) (bson.D, *options.FindOptions, error)
- func (r Repository[M, D, SF, SORD, SO, UF]) BuildSearchOrders(so SearchOrderer) (bson.D, error)
- func (r Repository[M, D, SF, SORD, SO, UF]) BuildUpdateFields(fields UF) (bson.D, error)
- func (r Repository[M, D, SF, SORD, SO, UF]) Clock() Clock
- func (r Repository[M, D, SF, SORD, SO, UF]) Collection() *mongo.Collection
- func (r Repository[M, D, SF, SORD, SO, UF]) CollectionName() string
- func (r Repository[M, D, SF, SORD, SO, UF]) Count(ctx context.Context, opts SF) (int64, error)
- func (r Repository[M, D, SF, SORD, SO, UF]) Create(ctx context.Context, model M) (M, error)
- func (r Repository[M, D, SF, SORD, SO, UF]) Db() Driver
- func (r Repository[M, D, SF, SORD, SO, UF]) Delete(ctx context.Context, id string) (int64, error)
- func (r Repository[M, D, SF, SORD, SO, UF]) DeleteMany(ctx context.Context, filters SF) (int64, error)
- func (r Repository[M, D, SF, SORD, SO, UF]) Get(ctx context.Context, id string) (M, error)
- func (r Repository[M, D, SF, SORD, SO, UF]) HardDelete(ctx context.Context, id string) (int64, error)
- func (r Repository[M, D, SF, SORD, SO, UF]) HardDeleteMany(ctx context.Context, filters SF) (int64, error)
- func (r Repository[M, D, SF, SORD, SO, UF]) IsSearchFiltersEmpty(opts SF) bool
- func (r Repository[M, D, SF, SORD, SO, UF]) IsSearchOptionsEmpty(opt SO) bool
- func (r Repository[M, D, SF, SORD, SO, UF]) IsSortOptionsEmpty(opts SearchOrders) bool
- func (r Repository[M, D, SF, SORD, SO, UF]) IsUpdateFieldsEmpty(fields UF) bool
- func (r Repository[M, D, SF, SORD, SO, UF]) Logger() Logger
- func (r Repository[M, D, SF, SORD, SO, UF]) Now() primitive.DateTime
- func (r Repository[M, D, SF, SORD, SO, UF]) Search(ctx context.Context, opts SO) ([]M, error)
- func (r Repository[M, D, SF, SORD, SO, UF]) SetClock(clock Clock) Repository[M, D, SF, SORD, SO, UF]
- func (r Repository[M, D, SF, SORD, SO, UF]) SetCreatedAtField(createdAtField string) Repository[M, D, SF, SORD, SO, UF]
- func (r Repository[M, D, SF, SORD, SO, UF]) SetDefaultSearchLimit(searchLimit int) Repository[M, D, SF, SORD, SO, UF]
- func (r Repository[M, D, SF, SORD, SO, UF]) SetDeletedAtField(deletedAtField string) Repository[M, D, SF, SORD, SO, UF]
- func (r Repository[M, D, SF, SORD, SO, UF]) SetLogLevel(logLevel string) Repository[M, D, SF, SORD, SO, UF]
- func (r Repository[M, D, SF, SORD, SO, UF]) SetLogger(log Logger) Repository[M, D, SF, SORD, SO, UF]
- func (r Repository[M, D, SF, SORD, SO, UF]) SetUpdatedAtField(updatedAtField string) Repository[M, D, SF, SORD, SO, UF]
- func (r Repository[M, D, SF, SORD, SO, UF]) Update(ctx context.Context, id string, fields UF) (int64, error)
- func (r Repository[M, D, SF, SORD, SO, UF]) UpdateMany(ctx context.Context, opts SF, data UF) (int64, error)
- func (r Repository[M, D, SF, SORD, SO, UF]) WithTimestamps(withTimestamps bool) Repository[M, D, SF, SORD, SO, UF]
- type SearchFilters
- type SearchOptioner
- type SearchOptions
- func (so SearchOptions[SF, SO]) Filters() SF
- func (so SearchOptions[SF, SO]) Limit() int64
- func (so SearchOptions[SF, SO]) Orders() SO
- func (so SearchOptions[SF, SO]) Projection() map[string]int
- func (so SearchOptions[SF, SO]) Skip() int64
- func (so SearchOptions[SF, SO]) WithLimit(limit int64) SearchOptions[SF, SO]
- func (so SearchOptions[SF, SO]) WithProject(field string, project int) SearchOptions[SF, SO]
- func (so SearchOptions[SF, SO]) WithProjectFields(project map[string]int) SearchOptions[SF, SO]
- func (so SearchOptions[SF, SO]) WithSkip(skip int64) SearchOptions[SF, SO]
- type SearchOrderer
- type SearchOrders
- type UpdateFields
Constants ¶
const ( DefaultCreatedAtField = "createdAt" DefaultUpdatedAtField = "updatedAt" DefaultDeletedAtField = "deletedAt" DefaultSearchLimit = 10 MaxSearchLimit = 5000 )
const ( FieldAdd = 1 FieldRemove = 0 )
const ( OrderAsc = 1 OrderDesc = -1 )
Variables ¶
var ( ErrNotFound = errors.New("mongo-repository: model not found") ErrInvalidIDFilter = errors.New("mongo-repository: invalid id filter") ErrEmptyFilters = errors.New("mongo-repository: empty filters") ErrCreatingDAO = errors.New("mongo-repository: error creating dao") ErrCreatingModel = errors.New("mongo-repository: error creating model") ErrEmptyUpdate = errors.New("mongo-repository: empty update") ErrInvalidDaoFiller = errors.New("mongo-repository: invalid dao does not implement DaoFiller") )
Functions ¶
This section is empty.
Types ¶
type Repository ¶
type Repository[M Model, D Dao, SF SearchFilters, SORD SearchOrderer, SO SearchOptioner[SF, SORD], UF UpdateFields] struct { // contains filtered or unexported fields }
func NewRepository ¶
func NewRepository[ M Model, D Dao, SF SearchFilters, SORD SearchOrderer, SO SearchOptioner[SF, SORD], UF UpdateFields, ]( db Driver, collectionName string, filterBuilders []func(SF) (*bson.E, error), updateBuilders []func(UF) (*bson.E, error), ) Repository[M, D, SF, SORD, SO, UF]
func (Repository[M, D, SF, SORD, SO, UF]) BuildSearchFilters ¶
func (r Repository[M, D, SF, SORD, SO, UF]) BuildSearchFilters(opts SF) (bson.D, error)
BuildSearchFilters builds filters from a SearchFilters struct. It will return bson.D with the filters, or an error if one occurs. If no filters are given, it will return nil. If the deletedAtField is not explicitly set, it will filter out deleted instances if withTimestamps is set to true.
func (Repository[M, D, SF, SORD, SO, UF]) BuildSearchOptions ¶
func (r Repository[M, D, SF, SORD, SO, UF]) BuildSearchOptions(opts SO) (bson.D, *options.FindOptions, error)
BuildSearchOptions builds filters, and mongo.FindOptions from a SearchOptions struct. If no limit is given, it will default to the repository's search limit. If no orders are given, it will default to ascending order by id.
func (Repository[M, D, SF, SORD, SO, UF]) BuildSearchOrders ¶
func (r Repository[M, D, SF, SORD, SO, UF]) BuildSearchOrders(so SearchOrderer) (bson.D, error)
func (Repository[M, D, SF, SORD, SO, UF]) BuildUpdateFields ¶
func (r Repository[M, D, SF, SORD, SO, UF]) BuildUpdateFields(fields UF) (bson.D, error)
BuildUpdateFields builds the update fields from the given options and returns a bson.D that can be used to update the document. If repository is configured with timestamps, it will automatically add the updatedAtField to the update fields.
func (Repository[M, D, SF, SORD, SO, UF]) Clock ¶
func (r Repository[M, D, SF, SORD, SO, UF]) Clock() Clock
func (Repository[M, D, SF, SORD, SO, UF]) Collection ¶
func (r Repository[M, D, SF, SORD, SO, UF]) Collection() *mongo.Collection
func (Repository[M, D, SF, SORD, SO, UF]) CollectionName ¶
func (r Repository[M, D, SF, SORD, SO, UF]) CollectionName() string
func (Repository[M, D, SF, SORD, SO, UF]) Count ¶
func (r Repository[M, D, SF, SORD, SO, UF]) Count(ctx context.Context, opts SF) (int64, error)
Count returns the number of documents in the collection that match the given search options.
func (Repository[M, D, SF, SORD, SO, UF]) Create ¶
func (r Repository[M, D, SF, SORD, SO, UF]) Create(ctx context.Context, model M) (M, error)
Create creates a new record on the collection based on the model.
func (Repository[M, D, SF, SORD, SO, UF]) Db ¶
func (r Repository[M, D, SF, SORD, SO, UF]) Db() Driver
func (Repository[M, D, SF, SORD, SO, UF]) Delete ¶
Delete deletes a document by id. If the repository is configured to not use timestamps, this operation will be applied as a hard delete.
func (Repository[M, D, SF, SORD, SO, UF]) DeleteMany ¶
func (r Repository[M, D, SF, SORD, SO, UF]) DeleteMany(ctx context.Context, filters SF) (int64, error)
DeleteMany deletes many documents from the collection. It returns the number of deleted documents and an error. If the repository has timestamps enabled, it will soft delete the documents. Otherwise, it will hard delete them.
func (Repository[M, D, SF, SORD, SO, UF]) Get ¶
func (r Repository[M, D, SF, SORD, SO, UF]) Get(ctx context.Context, id string) (M, error)
func (Repository[M, D, SF, SORD, SO, UF]) HardDelete ¶
func (Repository[M, D, SF, SORD, SO, UF]) HardDeleteMany ¶
func (r Repository[M, D, SF, SORD, SO, UF]) HardDeleteMany(ctx context.Context, filters SF) (int64, error)
func (Repository[M, D, SF, SORD, SO, UF]) IsSearchFiltersEmpty ¶
func (r Repository[M, D, SF, SORD, SO, UF]) IsSearchFiltersEmpty(opts SF) bool
func (Repository[M, D, SF, SORD, SO, UF]) IsSearchOptionsEmpty ¶
func (r Repository[M, D, SF, SORD, SO, UF]) IsSearchOptionsEmpty(opt SO) bool
func (Repository[M, D, SF, SORD, SO, UF]) IsSortOptionsEmpty ¶
func (r Repository[M, D, SF, SORD, SO, UF]) IsSortOptionsEmpty(opts SearchOrders) bool
func (Repository[M, D, SF, SORD, SO, UF]) IsUpdateFieldsEmpty ¶
func (r Repository[M, D, SF, SORD, SO, UF]) IsUpdateFieldsEmpty(fields UF) bool
func (Repository[M, D, SF, SORD, SO, UF]) Logger ¶
func (r Repository[M, D, SF, SORD, SO, UF]) Logger() Logger
func (Repository[M, D, SF, SORD, SO, UF]) Now ¶
func (r Repository[M, D, SF, SORD, SO, UF]) Now() primitive.DateTime
func (Repository[M, D, SF, SORD, SO, UF]) Search ¶
func (r Repository[M, D, SF, SORD, SO, UF]) Search(ctx context.Context, opts SO) ([]M, error)
func (Repository[M, D, SF, SORD, SO, UF]) SetClock ¶
func (r Repository[M, D, SF, SORD, SO, UF]) SetClock(clock Clock) Repository[M, D, SF, SORD, SO, UF]
func (Repository[M, D, SF, SORD, SO, UF]) SetCreatedAtField ¶
func (r Repository[M, D, SF, SORD, SO, UF]) SetCreatedAtField(createdAtField string) Repository[M, D, SF, SORD, SO, UF]
func (Repository[M, D, SF, SORD, SO, UF]) SetDefaultSearchLimit ¶
func (r Repository[M, D, SF, SORD, SO, UF]) SetDefaultSearchLimit(searchLimit int) Repository[M, D, SF, SORD, SO, UF]
func (Repository[M, D, SF, SORD, SO, UF]) SetDeletedAtField ¶
func (r Repository[M, D, SF, SORD, SO, UF]) SetDeletedAtField(deletedAtField string) Repository[M, D, SF, SORD, SO, UF]
func (Repository[M, D, SF, SORD, SO, UF]) SetLogLevel ¶
func (r Repository[M, D, SF, SORD, SO, UF]) SetLogLevel(logLevel string) Repository[M, D, SF, SORD, SO, UF]
func (Repository[M, D, SF, SORD, SO, UF]) SetLogger ¶
func (r Repository[M, D, SF, SORD, SO, UF]) SetLogger(log Logger) Repository[M, D, SF, SORD, SO, UF]
func (Repository[M, D, SF, SORD, SO, UF]) SetUpdatedAtField ¶
func (r Repository[M, D, SF, SORD, SO, UF]) SetUpdatedAtField(updatedAtField string) Repository[M, D, SF, SORD, SO, UF]
func (Repository[M, D, SF, SORD, SO, UF]) UpdateMany ¶
func (r Repository[M, D, SF, SORD, SO, UF]) UpdateMany(ctx context.Context, opts SF, data UF) (int64, error)
func (Repository[M, D, SF, SORD, SO, UF]) WithTimestamps ¶
func (r Repository[M, D, SF, SORD, SO, UF]) WithTimestamps(withTimestamps bool) Repository[M, D, SF, SORD, SO, UF]
type SearchFilters ¶
type SearchFilters any
type SearchOptioner ¶ added in v0.4.0
type SearchOptioner[SF SearchFilters, O SearchOrderer] interface { Filters() SF Orders() O Limit() int64 Skip() int64 Projection() map[string]int }
type SearchOptions ¶
type SearchOptions[SF SearchFilters, SO SearchOrderer] struct { // contains filtered or unexported fields }
func NewSearchOptions ¶
func NewSearchOptions[SF SearchFilters, SO SearchOrderer](filters SF, orders SO) SearchOptions[SF, SO]
func (SearchOptions[SF, SO]) Filters ¶
func (so SearchOptions[SF, SO]) Filters() SF
func (SearchOptions[SF, SO]) Limit ¶
func (so SearchOptions[SF, SO]) Limit() int64
func (SearchOptions[SF, SO]) Orders ¶
func (so SearchOptions[SF, SO]) Orders() SO
func (SearchOptions[SF, SO]) Projection ¶
func (so SearchOptions[SF, SO]) Projection() map[string]int
func (SearchOptions[SF, SO]) Skip ¶
func (so SearchOptions[SF, SO]) Skip() int64
func (SearchOptions[SF, SO]) WithLimit ¶
func (so SearchOptions[SF, SO]) WithLimit(limit int64) SearchOptions[SF, SO]
func (SearchOptions[SF, SO]) WithProject ¶ added in v0.4.1
func (so SearchOptions[SF, SO]) WithProject(field string, project int) SearchOptions[SF, SO]
func (SearchOptions[SF, SO]) WithProjectFields ¶ added in v0.4.1
func (so SearchOptions[SF, SO]) WithProjectFields(project map[string]int) SearchOptions[SF, SO]
func (SearchOptions[SF, SO]) WithSkip ¶
func (so SearchOptions[SF, SO]) WithSkip(skip int64) SearchOptions[SF, SO]
type SearchOrderer ¶ added in v0.4.0
type SearchOrders ¶
type SearchOrders []orderField
func NewSearchOrders ¶
func NewSearchOrders() SearchOrders
func (SearchOrders) Add ¶
func (so SearchOrders) Add(name string, order int) SearchOrders
func (SearchOrders) ToMap ¶ added in v0.4.0
func (so SearchOrders) ToMap() map[string]int
type UpdateFields ¶
type UpdateFields any
Source Files ¶
- actions.go
- builders.go
- count.go
- create.go
- default.go
- delete.go
- delete_many.go
- errors.go
- get.go
- hard_delete.go
- hard_delete_many.go
- helpers.go
- interfaces.go
- repository.go
- search.go
- search_options.go
- search_orders.go
- test_builders_search_filters.go
- test_builders_update_fields.go
- test_constants.go
- test_daos.go
- test_model.go
- test_options_search_filters.go
- test_options_update_fields.go
- test_repository.go
- update.go
- update_many.go