forked from
tangled.org/core
fork
Configure Feed
Select the types of activity you want to include in your feed.
Monorepo for Tangled
fork
Configure Feed
Select the types of activity you want to include in your feed.
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 defer rows.Close()
42
43 for rows.Next() {
44 var createdAt string
45 var registeredAt sql.Null[string]
46 var needsUpgrade int
47 var reg models.Registration
48
49 err = rows.Scan(®.Id, ®.Domain, ®.ByDid, &createdAt, ®isteredAt, &needsUpgrade)
50 if err != nil {
51 return nil, err
52 }
53
54 if t, err := time.Parse(time.RFC3339, createdAt); err == nil {
55 reg.Created = &t
56 }
57
58 if registeredAt.Valid {
59 if t, err := time.Parse(time.RFC3339, registeredAt.V); err == nil {
60 reg.Registered = &t
61 }
62 }
63
64 if needsUpgrade != 0 {
65 reg.NeedsUpgrade = true
66 }
67
68 registrations = append(registrations, reg)
69 }
70
71 return registrations, nil
72}
73
74func MarkRegistered(e Execer, filters ...orm.Filter) error {
75 var conditions []string
76 var args []any
77 for _, filter := range filters {
78 conditions = append(conditions, filter.Condition())
79 args = append(args, filter.Arg()...)
80 }
81
82 query := "update registrations set registered = strftime('%Y-%m-%dT%H:%M:%SZ', 'now'), needs_upgrade = 0"
83 if len(conditions) > 0 {
84 query += " where " + strings.Join(conditions, " and ")
85 }
86
87 _, err := e.Exec(query, args...)
88 return err
89}
90
91func AddKnot(e Execer, domain, did string) error {
92 _, err := e.Exec(`
93 insert into registrations (domain, did)
94 values (?, ?)
95 `, domain, did)
96 return err
97}
98
99func DeleteKnot(e Execer, filters ...orm.Filter) error {
100 var conditions []string
101 var args []any
102 for _, filter := range filters {
103 conditions = append(conditions, filter.Condition())
104 args = append(args, filter.Arg()...)
105 }
106
107 whereClause := ""
108 if conditions != nil {
109 whereClause = " where " + strings.Join(conditions, " and ")
110 }
111
112 query := fmt.Sprintf(`delete from registrations %s`, whereClause)
113
114 _, err := e.Exec(query, args...)
115 return err
116}