Monorepo for Tangled tangled.org
4

Configure Feed

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

1package db 2 3import ( 4 "fmt" 5 "strings" 6 "time" 7 8 "tangled.org/core/appview/models" 9 "tangled.org/core/orm" 10) 11 12func AddCollaborator(e Execer, c models.Collaborator) error { 13 _, err := e.Exec( 14 `insert into collaborators (did, rkey, subject_did, repo_did) values (?, ?, ?, ?) 15 on conflict(repo_did, subject_did) do update set 16 did = excluded.did, 17 rkey = excluded.rkey`, 18 c.Did, c.Rkey, c.SubjectDid, string(c.RepoDid), 19 ) 20 return err 21} 22 23func DeleteCollaborator(e Execer, filters ...orm.Filter) error { 24 var conditions []string 25 var args []any 26 for _, filter := range filters { 27 conditions = append(conditions, filter.Condition()) 28 args = append(args, filter.Arg()...) 29 } 30 31 whereClause := "" 32 if conditions != nil { 33 whereClause = " where " + strings.Join(conditions, " and ") 34 } 35 36 query := fmt.Sprintf(`delete from collaborators %s`, whereClause) 37 38 _, err := e.Exec(query, args...) 39 return err 40} 41 42func CollaboratingIn(e Execer, collaborator string) ([]models.Repo, error) { 43 rows, err := e.Query(`select repo_did from collaborators where subject_did = ?`, collaborator) 44 if err != nil { 45 return nil, err 46 } 47 defer rows.Close() 48 49 var repoDids []string 50 for rows.Next() { 51 var repoDid string 52 err := rows.Scan(&repoDid) 53 if err != nil { 54 return nil, err 55 } 56 repoDids = append(repoDids, repoDid) 57 } 58 if err := rows.Err(); err != nil { 59 return nil, err 60 } 61 if repoDids == nil { 62 return nil, nil 63 } 64 65 return GetRepos(e, orm.FilterIn("repo_did", repoDids)) 66} 67 68func GetCollaborators(e Execer, filters ...orm.Filter) ([]models.Collaborator, error) { 69 var collaborators []models.Collaborator 70 var conditions []string 71 var args []any 72 for _, filter := range filters { 73 conditions = append(conditions, filter.Condition()) 74 args = append(args, filter.Arg()...) 75 } 76 whereClause := "" 77 if conditions != nil { 78 whereClause = " where " + strings.Join(conditions, " and ") 79 } 80 query := fmt.Sprintf(`select 81 id, 82 did, 83 rkey, 84 subject_did, 85 repo_did, 86 created 87 from collaborators %s`, 88 whereClause, 89 ) 90 rows, err := e.Query(query, args...) 91 if err != nil { 92 return nil, err 93 } 94 defer rows.Close() 95 for rows.Next() { 96 var collaborator models.Collaborator 97 var createdAt string 98 if err := rows.Scan( 99 &collaborator.Id, 100 &collaborator.Did, 101 &collaborator.Rkey, 102 &collaborator.SubjectDid, 103 &collaborator.RepoDid, 104 &createdAt, 105 ); err != nil { 106 return nil, err 107 } 108 collaborator.Created, err = time.Parse(time.RFC3339, createdAt) 109 if err != nil { 110 collaborator.Created = time.Now() 111 } 112 collaborators = append(collaborators, collaborator) 113 } 114 if err := rows.Err(); err != nil { 115 return nil, err 116 } 117 return collaborators, nil 118}