forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
at master 1.2 kB view raw
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}