/
db-addresses.go
74 lines (59 loc) · 2.13 KB
/
db-addresses.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
package locations
import (
"github.com/go-pg/pg/orm"
. "github.com/Liquid-Labs/lc-entities-model/go/entities"
)
type queriesCallback func (*Address, int) []*orm.Query
func (a *Addresses) gatherQueries(f queriesCallback) []*orm.Query {
qs := make([]*orm.Query, 0, 3*len([]*Address(*a)))
for i, address := range []*Address(*a) {
qs = append(qs, f(address, i + 1)...)
}
return qs
}
func (a *Addresses) CreateQueries(db orm.DB) []*orm.Query {
f := func (a *Address, i int) []*orm.Query {
return a.createQueries(db, i)
}
return a.gatherQueries(f)
}
// Addresses, as a group, are currently updated by deleting and clearing
// Addresses are not archived
func (a *Addresses) DeleteQueries(db orm.DB) []*orm.Query {
return a.gatherQueries(func (a *Address, i int) []*orm.Query { return a.deleteQueries(db) })
}
func (a *Addresses) RetrieveByIDRaw(id EID, db orm.DB) error {
q := db.Model(a).Where(`"address".entity_id=?`, id)
if err := q.Select(); err != nil {
return err
} else {
return nil
}
}
// A single Address is not directly managed. Management is at the Addresses level.
func (a *Address) CreateQueries(db orm.DB) []*orm.Query {
panic("Do not crete Addresses directly. Use Addresses to manage.")
}
func (a *Address) createQueries(db orm.DB, i int) []*orm.Query {
return append((&a.Location).CreateQueries(db),
db.Model(&AddressInsertable{Address: a, Idx: i}).ExcludeColumn(LocationFields...))
}
// only update label
func (a *Address) UpdateQueries(db orm.DB) []*orm.Query {
qs := (&a.Location).UpdateQueries(db)
q := db.Model(a).
Set(`label=?label`).
Where(`"address".id=?id`).
Where(`"address".entity_id=?entity_id`)
q.GetModel().Table().SoftDeleteField = nil
return append(qs, q)
}
func (a *Address) DeleteQueries(db orm.DB) []*orm.Query {
panic("Do not crete Addresses directly. Use Addresses to manage.")
}
func (a *Address) deleteQueries(db orm.DB) []*orm.Query {
q := db.Model(a).Where(`"address".id=?id`).Where(`"address".entity_id=?entity_id`)
q.GetModel().Table().SoftDeleteField = nil
qs := []*orm.Query{ q }
return append(qs, (&a.Location).DeleteQueries(db)...)
}