Monorepo for Tangled tangled.org
6

Configure Feed

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

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 string) error { 35 payload := RepoDIDAssign{ 36 OwnerDid: ownerDid, 37 RepoName: repoName, 38 RepoDid: repoDid, 39 } 40 41 eventJson, err := json.Marshal(payload) 42 if err != nil { 43 return fmt.Errorf("marshal didAssign event: %w", err) 44 } 45 46 return d.InsertEvent(Event{ 47 Rkey: tid.TID(), 48 Nsid: RepoDIDAssignNSID, 49 EventJson: string(eventJson), 50 }, n) 51} 52 53func (d *DB) GetEvents(cursor int64) ([]Event, error) { 54 whereClause := "" 55 args := []any{} 56 if cursor > 0 { 57 whereClause = "where created > ?" 58 args = append(args, cursor) 59 } 60 61 query := fmt.Sprintf(` 62 select rkey, nsid, event, created 63 from events 64 %s 65 order by created asc 66 limit 100 67 `, whereClause) 68 69 rows, err := d.db.Query(query, args...) 70 if err != nil { 71 return nil, err 72 } 73 defer rows.Close() 74 75 var evts []Event 76 for rows.Next() { 77 var ev Event 78 if err := rows.Scan(&ev.Rkey, &ev.Nsid, &ev.EventJson, &ev.Created); err != nil { 79 return nil, err 80 } 81 evts = append(evts, ev) 82 } 83 84 if err := rows.Err(); err != nil { 85 return nil, err 86 } 87 88 return evts, nil 89}