this repo has no description
1package db 2 3import ( 4 "database/sql" 5 "fmt" 6 "strings" 7 "time" 8 9 "github.com/bluesky-social/indigo/atproto/syntax" 10) 11 12type Spindle struct { 13 Id int 14 Owner syntax.DID 15 Instance string 16 Verified *time.Time 17 Created time.Time 18} 19 20func GetSpindles(e Execer, filters ...filter) ([]Spindle, error) { 21 var spindles []Spindle 22 23 var conditions []string 24 var args []any 25 for _, filter := range filters { 26 conditions = append(conditions, filter.Condition()) 27 args = append(args, filter.arg) 28 } 29 30 whereClause := "" 31 if conditions != nil { 32 whereClause = " where " + strings.Join(conditions, " and ") 33 } 34 35 query := fmt.Sprintf( 36 `select id, owner, instance, verified, created 37 from spindles 38 %s 39 order by created 40 `, 41 whereClause, 42 ) 43 44 rows, err := e.Query(query, args...) 45 46 if err != nil { 47 return nil, err 48 } 49 defer rows.Close() 50 51 for rows.Next() { 52 var spindle Spindle 53 var createdAt string 54 var verified sql.NullTime 55 56 if err := rows.Scan( 57 &spindle.Id, 58 &spindle.Owner, 59 &spindle.Instance, 60 &verified, 61 &createdAt, 62 ); err != nil { 63 return nil, err 64 } 65 66 spindle.Created, err = time.Parse(time.RFC3339, createdAt) 67 if err != nil { 68 spindle.Created = time.Now() 69 } 70 71 if verified.Valid { 72 spindle.Verified = &verified.Time 73 } 74 75 spindles = append(spindles, spindle) 76 } 77 78 return spindles, nil 79} 80 81// if there is an existing spindle with the same instance, this returns an error 82func AddSpindle(e Execer, spindle Spindle) error { 83 _, err := e.Exec( 84 `insert into spindles (owner, instance) values (?, ?)`, 85 spindle.Owner, 86 spindle.Instance, 87 ) 88 return err 89} 90 91func VerifySpindle(e Execer, filters ...filter) (int64, error) { 92 var conditions []string 93 var args []any 94 for _, filter := range filters { 95 conditions = append(conditions, filter.Condition()) 96 args = append(args, filter.arg) 97 } 98 99 whereClause := "" 100 if conditions != nil { 101 whereClause = " where " + strings.Join(conditions, " and ") 102 } 103 104 query := fmt.Sprintf(`update spindles set verified = strftime('%%Y-%%m-%%dT%%H:%%M:%%SZ', 'now') %s`, whereClause) 105 106 res, err := e.Exec(query, args...) 107 if err != nil { 108 return 0, err 109 } 110 111 return res.RowsAffected() 112} 113 114func DeleteSpindle(e Execer, filters ...filter) error { 115 var conditions []string 116 var args []any 117 for _, filter := range filters { 118 conditions = append(conditions, filter.Condition()) 119 args = append(args, filter.arg) 120 } 121 122 whereClause := "" 123 if conditions != nil { 124 whereClause = " where " + strings.Join(conditions, " and ") 125 } 126 127 query := fmt.Sprintf(`delete from spindles %s`, whereClause) 128 129 _, err := e.Exec(query, args...) 130 return err 131}