-
Notifications
You must be signed in to change notification settings - Fork 4
/
item_collection.i_listable.go
90 lines (72 loc) · 2.91 KB
/
item_collection.i_listable.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
package order
import (
"github.com/ottemo/commerce/app/models"
"github.com/ottemo/commerce/env"
"github.com/ottemo/commerce/utils"
)
// List enumerates items of Product model type
func (it *DefaultOrderItemCollection) List() ([]models.StructListItem, error) {
var result []models.StructListItem
dbRecords, err := it.listCollection.Load()
if err != nil {
return result, env.ErrorDispatch(err)
}
for _, dbRecordData := range dbRecords {
orderItemModel := new(DefaultOrderItem)
err = orderItemModel.FromHashMap(dbRecordData)
if err != nil {
return result, env.ErrorDispatch(err)
}
// retrieving minimal data needed for list
resultItem := new(models.StructListItem)
resultItem.ID = orderItemModel.GetID()
resultItem.Name = orderItemModel.GetName()
resultItem.Image = ""
resultItem.Desc = utils.InterfaceToString(orderItemModel.Get("description"))
// if extra attributes were required
if len(it.listExtraAtributes) > 0 {
resultItem.Extra = make(map[string]interface{})
for _, attributeName := range it.listExtraAtributes {
resultItem.Extra[attributeName] = orderItemModel.Get(attributeName)
}
}
result = append(result, *resultItem)
}
return result, nil
}
// ListAddExtraAttribute allows to obtain additional attributes from List() function
func (it *DefaultOrderItemCollection) ListAddExtraAttribute(attribute string) error {
orderItemModel := new(DefaultOrderItem)
var allowedAttributes []string
for _, attributeInfo := range orderItemModel.GetAttributesInfo() {
allowedAttributes = append(allowedAttributes, attributeInfo.Attribute)
}
if utils.IsInArray(attribute, allowedAttributes) {
if !utils.IsInListStr(attribute, it.listExtraAtributes) {
it.listExtraAtributes = append(it.listExtraAtributes, attribute)
} else {
return env.ErrorNew(ConstErrorModule, ConstErrorLevel, "fa1d634a-c6c0-4ac6-98cf-e3c5a320c46c", "attribute already in list")
}
} else {
return env.ErrorNew(ConstErrorModule, ConstErrorLevel, "205b9f78-3574-41a6-9384-b3f7dd482328", "not allowed attribute")
}
return nil
}
// ListFilterAdd adds selection filter to List() function
func (it *DefaultOrderItemCollection) ListFilterAdd(Attribute string, Operator string, Value interface{}) error {
if err := it.listCollection.AddFilter(Attribute, Operator, Value.(string)); err != nil {
_ = env.ErrorNew(ConstErrorModule, ConstErrorLevel, "7d34fbe6-ac90-430b-8ede-9768982bac7d", err.Error())
}
return nil
}
// ListFilterReset clears presets made by ListFilterAdd() and ListAddExtraAttribute() functions
func (it *DefaultOrderItemCollection) ListFilterReset() error {
if err := it.listCollection.ClearFilters(); err != nil {
_ = env.ErrorNew(ConstErrorModule, ConstErrorLevel, "a6f914e9-a6ae-4b0b-be9a-21a4fbf81a1d", err.Error())
}
return nil
}
// ListLimit specifies selection paging
func (it *DefaultOrderItemCollection) ListLimit(offset int, limit int) error {
return it.listCollection.SetLimit(offset, limit)
}