/
asset-engine-api.go
67 lines (56 loc) · 1.35 KB
/
asset-engine-api.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
package kasset
import (
"fmt"
"git.kanosolution.net/kano/dbflex"
"git.kanosolution.net/kano/kaos"
"github.com/google/uuid"
)
type AssetAPIEngine struct {
}
type ReferenceRequest struct {
RefType string
RefID string
}
func (ae *AssetAPIEngine) FindByRefID(ctx *kaos.Context, req *ReferenceRequest) ([]*Asset, error) {
res := []*Asset{}
h := GetTenantDBFromContext(ctx)
if h == nil {
return nil, fmt.Errorf("missing: db")
}
ars := []*AssetReference{}
if e := h.Gets(new(AssetReference),
dbflex.NewQueryParam().SetWhere(dbflex.And(dbflex.Eq("RefType", req.RefType), dbflex.Eq("RefID", req.RefID))),
&ars); e != nil {
return res, fmt.Errorf("unable to get reference. %s", e.Error())
}
for _, ar := range ars {
a := new(Asset)
a.ID = ar.AssetID
if e := h.Get(a); e != nil {
return res, fmt.Errorf("unable to get asset %s: %s", ar.AssetID, e.Error())
}
res = append(res, a)
}
return res, nil
}
func (ae *AssetAPIEngine) MakeRef(ctx *kaos.Context, req *AssetReference) (string, error) {
h := GetTenantDBFromContext(ctx)
if h == nil {
return "", fmt.Errorf("missing: db")
}
// validate asset
var e error
a := new(Asset)
a.ID = req.AssetID
if e = h.Get(a); e != nil {
return "", e
}
// write the ref
if req.ID == "" {
req.ID = uuid.New().String()
}
if e = h.Save(req); e != nil {
return "", e
}
return req.ID, nil
}