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