Monorepo for Tangled
tangled.org
1package db
2
3import (
4 "github.com/bluesky-social/indigo/atproto/syntax"
5)
6
7type SpindleMember struct {
8 Id int
9 Did syntax.DID // owner of the record
10 Rkey string // rkey of the record
11 Instance string
12 Subject syntax.DID // the member being added
13}
14
15func AddSpindleMember(q DBTX, member SpindleMember) error {
16 _, err := q.Exec(
17 `insert or ignore into spindle_members (did, rkey, instance, subject) values (?, ?, ?, ?)`,
18 member.Did,
19 member.Rkey,
20 member.Instance,
21 member.Subject,
22 )
23 return err
24}
25
26func RemoveSpindleMember(q DBTX, ownerDid, rkey string) error {
27 _, err := q.Exec(
28 "delete from spindle_members where did = ? and rkey = ?",
29 ownerDid,
30 rkey,
31 )
32 return err
33}
34
35func CountSpindleMembersBySubject(q DBTX, subject string) (int, error) {
36 var count int
37 err := q.QueryRow(
38 `select count(*) from spindle_members where subject = ?`,
39 subject,
40 ).Scan(&count)
41 return count, err
42}
43
44func GetSpindleMember(q DBTX, did, rkey string) (*SpindleMember, error) {
45 query :=
46 `select id, did, rkey, instance, subject
47 from spindle_members
48 where did = ? and rkey = ?`
49
50 var member SpindleMember
51 err := q.QueryRow(query, did, rkey).Scan(
52 &member.Id,
53 &member.Did,
54 &member.Rkey,
55 &member.Instance,
56 &member.Subject,
57 )
58 if err != nil {
59 return nil, err
60 }
61
62 return &member, nil
63}