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