forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
1package db 2 3import ( 4 "log" 5 "time" 6) 7 8type Follow struct { 9 UserDid string 10 SubjectDid string 11 FollowedAt *time.Time 12 RKey string 13} 14 15func (d *DB) AddFollow(userDid, subjectDid, rkey string) error { 16 query := `insert or ignore into follows (user_did, subject_did, rkey) values (?, ?, ?)` 17 _, err := d.db.Exec(query, userDid, subjectDid, rkey) 18 return err 19} 20 21// Get a follow record 22func (d *DB) GetFollow(userDid, subjectDid string) (*Follow, error) { 23 query := `select user_did, subject_did, followed_at, at_uri from follows where user_did = ? and subject_did = ?` 24 row := d.db.QueryRow(query, userDid, subjectDid) 25 26 var follow Follow 27 var followedAt string 28 err := row.Scan(&follow.UserDid, &follow.SubjectDid, &followedAt, &follow.RKey) 29 if err != nil { 30 return nil, err 31 } 32 33 followedAtTime, err := time.Parse(time.RFC3339, followedAt) 34 if err != nil { 35 log.Println("unable to determine followed at time") 36 follow.FollowedAt = nil 37 } else { 38 follow.FollowedAt = &followedAtTime 39 } 40 41 return &follow, nil 42} 43 44// Get a follow record 45func (d *DB) DeleteFollow(userDid, subjectDid string) error { 46 _, err := d.db.Exec(`delete from follows where user_did = ? and subject_did = ?`, userDid, subjectDid) 47 return err 48} 49 50func (d *DB) GetAllFollows() ([]Follow, error) { 51 var follows []Follow 52 53 rows, err := d.db.Query(`select user_did, subject_did, followed_at, at_uri from follows`) 54 if err != nil { 55 return nil, err 56 } 57 defer rows.Close() 58 59 for rows.Next() { 60 var follow Follow 61 var followedAt string 62 if err := rows.Scan(&follow.UserDid, &follow.SubjectDid, &followedAt, &follow.RKey); err != nil { 63 return nil, err 64 } 65 66 followedAtTime, err := time.Parse(time.RFC3339, followedAt) 67 if err != nil { 68 log.Println("unable to determine followed at time") 69 follow.FollowedAt = nil 70 } else { 71 follow.FollowedAt = &followedAtTime 72 } 73 74 follows = append(follows, follow) 75 } 76 77 if err := rows.Err(); err != nil { 78 return nil, err 79 } 80 81 return follows, nil 82}