-
Notifications
You must be signed in to change notification settings - Fork 0
/
methods_read.go
104 lines (96 loc) · 2.89 KB
/
methods_read.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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package controller
import (
"sync"
error_constants "github.com/small-entropy/go-backbone/constants/error"
"github.com/small-entropy/go-backbone/datatypes/record"
"github.com/small-entropy/go-backbone/datatypes/recordset"
backbone_error "github.com/small-entropy/go-backbone/error"
store_provider "github.com/small-entropy/go-backbone/providers/store"
"github.com/small-entropy/go-backbone/stores/abstract"
)
// Метод получения одной записи по фильтрам
func (c *Controller[CONN, ID, DATA]) FindOne(
identifier ID,
deleted bool,
other_filters *map[string]interface{},
provider *store_provider.StoreProvider[CONN, ID, DATA],
) (record.Record[ID, DATA], error) {
var err error
var result record.Record[ID, DATA]
filter := map[string]interface{}{
c.Fields["Identifier"]: identifier,
c.Fields["DeletedAt"]: nil,
}
if other_filters != nil {
for k, v := range *other_filters {
filter[k] = v
}
}
if result, err = provider.Store.FindOne(filter); err != nil {
err = &backbone_error.ControllerError[DATA]{
Status: error_constants.ERR_CONTROLLER_READ,
Message: error_constants.MSG_CONTROLLER_READ,
Filter: &filter,
Err: err,
}
}
return result, err
}
// Метод получения одной записи по фильтрам
func (c *Controller[CONN, ID, DATA]) FindOneByFilter(
filter map[string]interface{},
provider *store_provider.StoreProvider[CONN, ID, DATA],
) (record.Record[ID, DATA], error) {
var err error
var result record.Record[ID, DATA]
if result, err = provider.Store.FindOne(filter); err != nil {
err = &backbone_error.ControllerError[DATA]{
Status: error_constants.ERR_CONTROLLER_READ,
Message: error_constants.MSG_CONTROLLER_READ,
Filter: &filter,
Err: err,
}
}
return result, err
}
// Метод получения списка записей по фильтрам и пагинации
func (c *Controller[CONN, ID, DATA]) Find(
filter map[string]interface{},
page *abstract.Page,
provider *store_provider.StoreProvider[CONN, ID, DATA],
) (recordset.RecordSet[ID, DATA], error) {
var err error
var result recordset.RecordSet[ID, DATA]
var total int64
var wg sync.WaitGroup
var err_total error
var err_read error
wg.Add(2)
go func() {
if total, err_total = provider.Store.GetCount(filter); err_total != nil {
err = &backbone_error.ControllerError[DATA]{
Status: error_constants.ERR_CONTROLLER_TOTAL,
Message: error_constants.MSG_CONTROLLER_TOTAL,
Filter: &filter,
Err: err,
}
}
wg.Done()
}()
go func() {
if result, err_read = provider.Store.FindAll(*page, filter); err_read != nil {
err = &backbone_error.ControllerError[DATA]{
Status: error_constants.ERR_CONTROLLER_READ,
Message: error_constants.MSG_CONTROLLER_READ,
Filter: &filter,
Err: err,
}
}
wg.Done()
}()
wg.Wait()
if err == nil {
result.Meta.Total = total
}
return result, err
}