Mirror of @tangled.org/core. Running on a Raspberry Pi Zero 2 (Please be gentle).
0
fork

Configure Feed

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

appview/db: add spindle_members table and crud ops

Signed-off-by: oppiliappan <me@oppi.li>

oppiliappan f1a8e659 93f3a461

+113 -1
+17 -1
appview/db/db.go
··· 330 330 verified text, -- time of verification 331 331 created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), 332 332 333 - unique(instance) 333 + unique(did, instance) 334 + ); 335 + 336 + create table if not exists spindle_members ( 337 + -- identifiers for the record 338 + id integer primary key autoincrement, 339 + did text not null, 340 + rkey text not null, 341 + 342 + -- data 343 + instance text not null, 344 + subject text not null, 345 + created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), 346 + 347 + -- constraints 348 + foreign key (did, instance) references spindles(owner, instance) on delete cascade, 349 + unique (did, instance, subject) 334 350 ); 335 351 336 352 create table if not exists pipelines (
+96
appview/db/spindle.go
··· 17 17 Created time.Time 18 18 } 19 19 20 + type SpindleMember struct { 21 + Id int 22 + Did syntax.DID // owner of the record 23 + Rkey string // rkey of the record 24 + Instance string 25 + Subject syntax.DID // the member being added 26 + Created time.Time 27 + } 28 + 20 29 func GetSpindles(e Execer, filters ...filter) ([]Spindle, error) { 21 30 var spindles []Spindle 22 31 ··· 142 133 143 134 _, err := e.Exec(query, args...) 144 135 return err 136 + } 137 + 138 + func AddSpindleMember(e Execer, member SpindleMember) error { 139 + _, err := e.Exec( 140 + `insert or ignore into spindle_members (did, rkey, instance, subject) values (?, ?, ?, ?)`, 141 + member.Did, 142 + member.Rkey, 143 + member.Instance, 144 + member.Subject, 145 + ) 146 + return err 147 + } 148 + 149 + func RemoveSpindleMember(e Execer, filters ...filter) error { 150 + var conditions []string 151 + var args []any 152 + for _, filter := range filters { 153 + conditions = append(conditions, filter.Condition()) 154 + args = append(args, filter.Arg()...) 155 + } 156 + 157 + whereClause := "" 158 + if conditions != nil { 159 + whereClause = " where " + strings.Join(conditions, " and ") 160 + } 161 + 162 + query := fmt.Sprintf(`delete from spindle_members %s`, whereClause) 163 + 164 + _, err := e.Exec(query, args...) 165 + return err 166 + } 167 + 168 + func GetSpindleMembers(e Execer, filters ...filter) ([]SpindleMember, error) { 169 + var members []SpindleMember 170 + 171 + var conditions []string 172 + var args []any 173 + for _, filter := range filters { 174 + conditions = append(conditions, filter.Condition()) 175 + args = append(args, filter.Arg()...) 176 + } 177 + 178 + whereClause := "" 179 + if conditions != nil { 180 + whereClause = " where " + strings.Join(conditions, " and ") 181 + } 182 + 183 + query := fmt.Sprintf( 184 + `select id, did, rkey, instance, subject, created 185 + from spindle_members 186 + %s 187 + order by created 188 + `, 189 + whereClause, 190 + ) 191 + 192 + rows, err := e.Query(query, args...) 193 + 194 + if err != nil { 195 + return nil, err 196 + } 197 + defer rows.Close() 198 + 199 + for rows.Next() { 200 + var member SpindleMember 201 + var createdAt string 202 + 203 + if err := rows.Scan( 204 + &member.Id, 205 + &member.Did, 206 + &member.Rkey, 207 + &member.Instance, 208 + &member.Subject, 209 + &createdAt, 210 + ); err != nil { 211 + return nil, err 212 + } 213 + 214 + member.Created, err = time.Parse(time.RFC3339, createdAt) 215 + if err != nil { 216 + member.Created = time.Now() 217 + } 218 + 219 + members = append(members, member) 220 + } 221 + 222 + return members, nil 145 223 }