Monorepo for Tangled
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 90 lines 1.7 kB view raw
1package db 2 3import ( 4 "encoding/json" 5 "fmt" 6 "time" 7 8 "tangled.org/core/notifier" 9 "tangled.org/core/tid" 10) 11 12type Event struct { 13 Rkey string `json:"rkey"` 14 Nsid string `json:"nsid"` 15 EventJson string `json:"event"` 16 Created int64 `json:"created"` 17} 18 19func (d *DB) InsertEvent(event Event, notifier *notifier.Notifier) error { 20 21 _, err := d.db.Exec( 22 `insert into events (rkey, nsid, event, created) values (?, ?, ?, ?)`, 23 event.Rkey, 24 event.Nsid, 25 event.EventJson, 26 time.Now().UnixNano(), 27 ) 28 29 notifier.NotifyAll() 30 31 return err 32} 33 34func (d *DB) EmitDIDAssign(n *notifier.Notifier, ownerDid, repoName, repoDid, oldRepoAt string) error { 35 payload := RepoDIDAssign{ 36 OwnerDid: ownerDid, 37 RepoName: repoName, 38 RepoDid: repoDid, 39 OldRepoAt: oldRepoAt, 40 } 41 42 eventJson, err := json.Marshal(payload) 43 if err != nil { 44 return fmt.Errorf("marshal didAssign event: %w", err) 45 } 46 47 return d.InsertEvent(Event{ 48 Rkey: tid.TID(), 49 Nsid: RepoDIDAssignNSID, 50 EventJson: string(eventJson), 51 }, n) 52} 53 54func (d *DB) GetEvents(cursor int64) ([]Event, error) { 55 whereClause := "" 56 args := []any{} 57 if cursor > 0 { 58 whereClause = "where created > ?" 59 args = append(args, cursor) 60 } 61 62 query := fmt.Sprintf(` 63 select rkey, nsid, event, created 64 from events 65 %s 66 order by created asc 67 limit 100 68 `, whereClause) 69 70 rows, err := d.db.Query(query, args...) 71 if err != nil { 72 return nil, err 73 } 74 defer rows.Close() 75 76 var evts []Event 77 for rows.Next() { 78 var ev Event 79 if err := rows.Scan(&ev.Rkey, &ev.Nsid, &ev.EventJson, &ev.Created); err != nil { 80 return nil, err 81 } 82 evts = append(evts, ev) 83 } 84 85 if err := rows.Err(); err != nil { 86 return nil, err 87 } 88 89 return evts, nil 90}