This repository has no description
0

Configure Feed

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

core / spindle / db / members.go
1.4 kB 57 lines
1package db 2 3import ( 4 "context" 5 "database/sql" 6 "errors" 7 8 "github.com/bluesky-social/indigo/atproto/syntax" 9) 10 11func (d *DB) ListAllowedMembers() ([]syntax.DID, error) { 12 rows, err := d.Query(`select did from members where blocked = 0`) 13 if err != nil { 14 return nil, err 15 } 16 defer rows.Close() 17 18 var dids []syntax.DID 19 for rows.Next() { 20 var did syntax.DID 21 if err := rows.Scan(&did); err != nil { 22 return nil, err 23 } 24 dids = append(dids, did) 25 } 26 27 return dids, rows.Err() 28} 29 30// IsAllowedMember reports whether did is known and unblocked. Unknown DIDs get fallback. 31func (d *DB) IsAllowedMember(ctx context.Context, did syntax.DID, fallback bool) (bool, error) { 32 var blocked bool 33 err := d.QueryRowContext(ctx, `select blocked from members where did = ?`, did).Scan(&blocked) 34 if errors.Is(err, sql.ErrNoRows) { 35 return fallback, nil 36 } 37 if err != nil { 38 return false, err 39 } 40 return !blocked, nil 41} 42 43func (d *DB) AllowMember(ctx context.Context, did syntax.DID) error { 44 return d.UpsertMember(ctx, did, false) 45} 46 47func (d *DB) BlockMember(ctx context.Context, did syntax.DID) error { 48 return d.UpsertMember(ctx, did, true) 49} 50 51func (d *DB) UpsertMember(ctx context.Context, did syntax.DID, block bool) error { 52 _, err := d.ExecContext(ctx, ` 53 insert into members (did, blocked) values (?, ?) 54 on conflict(did) do update set blocked = excluded.blocked 55 `, did, block) 56 return err 57}