forked from
tangled.org/core
Monorepo for Tangled — https://tangled.org
1package db
2
3import (
4 "fmt"
5
6 "tangled.sh/tangled.sh/core/knotserver/notifier"
7)
8
9type Event struct {
10 Rkey string `json:"rkey"`
11 Nsid string `json:"nsid"`
12 EventJson string `json:"event"`
13}
14
15func (d *DB) InsertEvent(event Event, notifier *notifier.Notifier) error {
16 _, err := d.db.Exec(
17 `insert into events (rkey, nsid, event) values (?, ?, ?)`,
18 event.Rkey,
19 event.Nsid,
20 event.EventJson,
21 )
22
23 notifier.NotifyAll()
24
25 return err
26}
27
28func (d *DB) GetEvents(cursor string) ([]Event, error) {
29 whereClause := ""
30 args := []any{}
31 if cursor != "" {
32 whereClause = "where rkey > ?"
33 args = append(args, cursor)
34 }
35
36 query := fmt.Sprintf(`
37 select rkey, nsid, event
38 from events
39 %s
40 order by rkey asc
41 limit 100
42 `, whereClause)
43
44 rows, err := d.db.Query(query, args...)
45 if err != nil {
46 return nil, err
47 }
48 defer rows.Close()
49
50 var evts []Event
51 for rows.Next() {
52 var ev Event
53 rows.Scan(&ev.Rkey, &ev.Nsid, &ev.EventJson)
54 evts = append(evts, ev)
55 }
56
57 if err := rows.Err(); err != nil {
58 return nil, err
59 }
60
61 return evts, nil
62}