forked from
tangled.org/core
Monorepo for Tangled — https://tangled.org
1package db
2
3import (
4 "database/sql"
5 "fmt"
6 "strings"
7 "time"
8
9 "tangled.org/core/appview/models"
10 "tangled.org/core/orm"
11)
12
13func GetRegistrations(e Execer, filters ...orm.Filter) ([]models.Registration, error) {
14 var registrations []models.Registration
15
16 var conditions []string
17 var args []any
18 for _, filter := range filters {
19 conditions = append(conditions, filter.Condition())
20 args = append(args, filter.Arg()...)
21 }
22
23 whereClause := ""
24 if conditions != nil {
25 whereClause = " where " + strings.Join(conditions, " and ")
26 }
27
28 query := fmt.Sprintf(`
29 select id, domain, did, created, registered, needs_upgrade
30 from registrations
31 %s
32 order by created
33 `,
34 whereClause,
35 )
36
37 rows, err := e.Query(query, args...)
38 if err != nil {
39 return nil, err
40 }
41
42 for rows.Next() {
43 var createdAt string
44 var registeredAt sql.Null[string]
45 var needsUpgrade int
46 var reg models.Registration
47
48 err = rows.Scan(®.Id, ®.Domain, ®.ByDid, &createdAt, ®isteredAt, &needsUpgrade)
49 if err != nil {
50 return nil, err
51 }
52
53 if t, err := time.Parse(time.RFC3339, createdAt); err == nil {
54 reg.Created = &t
55 }
56
57 if registeredAt.Valid {
58 if t, err := time.Parse(time.RFC3339, registeredAt.V); err == nil {
59 reg.Registered = &t
60 }
61 }
62
63 if needsUpgrade != 0 {
64 reg.NeedsUpgrade = true
65 }
66
67 registrations = append(registrations, reg)
68 }
69
70 return registrations, nil
71}
72
73func MarkRegistered(e Execer, filters ...orm.Filter) error {
74 var conditions []string
75 var args []any
76 for _, filter := range filters {
77 conditions = append(conditions, filter.Condition())
78 args = append(args, filter.Arg()...)
79 }
80
81 query := "update registrations set registered = strftime('%Y-%m-%dT%H:%M:%SZ', 'now'), needs_upgrade = 0"
82 if len(conditions) > 0 {
83 query += " where " + strings.Join(conditions, " and ")
84 }
85
86 _, err := e.Exec(query, args...)
87 return err
88}
89
90func AddKnot(e Execer, domain, did string) error {
91 _, err := e.Exec(`
92 insert into registrations (domain, did)
93 values (?, ?)
94 `, domain, did)
95 return err
96}
97
98func DeleteKnot(e Execer, filters ...orm.Filter) error {
99 var conditions []string
100 var args []any
101 for _, filter := range filters {
102 conditions = append(conditions, filter.Condition())
103 args = append(args, filter.Arg()...)
104 }
105
106 whereClause := ""
107 if conditions != nil {
108 whereClause = " where " + strings.Join(conditions, " and ")
109 }
110
111 query := fmt.Sprintf(`delete from registrations %s`, whereClause)
112
113 _, err := e.Exec(query, args...)
114 return err
115}