/
repository.go
55 lines (45 loc) · 1.57 KB
/
repository.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// Package repository provides wrapper for go-pg package to simplify unit testing
package repository
import (
"context"
"github.com/go-pg/pg/v10"
"github.com/go-pg/pg/v10/orm"
)
// Repository list of repository interfaces
type Repository interface {
SelectOrCreator
Creator
Updater
Finder
Deleter
Transactor
Executor
}
// SelectOrCreator interface to select or create new model
type SelectOrCreator interface {
SelectOrCreate(ctx context.Context, model interface{}, modifier func(*orm.Query) *orm.Query, values ...interface{}) (bool, error)
}
// Creator interface for creating models
type Creator interface {
Create(ctx context.Context, model interface{}, values ...interface{}) (orm.Result, error)
}
// Updater updater interface for updating the model int database
type Updater interface {
Update(ctx context.Context, model interface{}, modifier func(*orm.Query) *orm.Query, fields ...interface{}) (orm.Result, error)
}
// Finder find model inside the repo
type Finder interface {
Find(ctx context.Context, model interface{}, modifier func(*orm.Query) *orm.Query, values ...interface{}) error
}
// Deleter delete model from the repo
type Deleter interface {
Delete(ctx context.Context, model interface{}, modifier func(*orm.Query) *orm.Query, values ...interface{}) (orm.Result, error)
}
// Transactor run set of operations in transaction
type Transactor interface {
Transaction(ctx context.Context, callback func(db *pg.Tx) error) error
}
// Executor execute db query
type Executor interface {
Exec(ctx context.Context, query string, params ...interface{}) (orm.Result, error)
}