this repo has no description
1package db 2 3import ( 4 "database/sql" 5 "time" 6) 7 8type Repo struct { 9 Did string 10 Name string 11 Knot string 12 Created *time.Time 13 Rkey string 14} 15 16func (d *DB) GetAllRepos() ([]Repo, error) { 17 var repos []Repo 18 19 rows, err := d.db.Query(`select did, name, knot, created from repos`) 20 if err != nil { 21 return nil, err 22 } 23 defer rows.Close() 24 25 for rows.Next() { 26 repo, err := scanRepo(rows) 27 if err != nil { 28 return nil, err 29 } 30 repos = append(repos, *repo) 31 } 32 33 if err := rows.Err(); err != nil { 34 return nil, err 35 } 36 37 return repos, nil 38} 39 40func (d *DB) GetAllReposByDid(did string) ([]Repo, error) { 41 var repos []Repo 42 43 rows, err := d.db.Query(`select did, name, knot, created from repos where did = ?`, did) 44 if err != nil { 45 return nil, err 46 } 47 defer rows.Close() 48 49 for rows.Next() { 50 repo, err := scanRepo(rows) 51 if err != nil { 52 return nil, err 53 } 54 repos = append(repos, *repo) 55 } 56 57 if err := rows.Err(); err != nil { 58 return nil, err 59 } 60 61 return repos, nil 62} 63 64func (d *DB) GetRepo(did, name string) (*Repo, error) { 65 var repo Repo 66 67 row := d.db.QueryRow(`select did, name, knot, created from repos where did = ? and name = ?`, did, name) 68 69 var createdAt string 70 if err := row.Scan(&repo.Did, &repo.Name, &repo.Knot, &createdAt); err != nil { 71 return nil, err 72 } 73 createdAtTime, _ := time.Parse(time.RFC3339, createdAt) 74 repo.Created = &createdAtTime 75 76 return &repo, nil 77} 78 79func (d *DB) AddRepo(repo *Repo) error { 80 _, err := d.db.Exec(`insert into repos (did, name, knot, rkey) values (?, ?, ?, ?)`, repo.Did, repo.Name, repo.Knot, repo.Rkey) 81 return err 82} 83 84func (d *DB) RemoveRepo(did, name, rkey string) error { 85 _, err := d.db.Exec(`delete from repos where did = ? and name = ? and rkey = ?`, did, name, rkey) 86 return err 87} 88 89func (d *DB) AddCollaborator(collaborator, repoOwnerDid, repoName, repoKnot string) error { 90 _, err := d.db.Exec( 91 `insert into collaborators (did, repo) 92 values (?, (select id from repos where did = ? and name = ? and knot = ?));`, 93 collaborator, repoOwnerDid, repoName, repoKnot) 94 return err 95} 96 97func (d *DB) CollaboratingIn(collaborator string) ([]Repo, error) { 98 var repos []Repo 99 100 rows, err := d.db.Query(`select r.* from repos r join collaborators c on r.id = c.repo where c.did = ?;`, collaborator) 101 if err != nil { 102 return nil, err 103 } 104 defer rows.Close() 105 106 for rows.Next() { 107 repo, err := scanRepo(rows) 108 if err != nil { 109 return nil, err 110 } 111 repos = append(repos, *repo) 112 } 113 114 if err := rows.Err(); err != nil { 115 return nil, err 116 } 117 118 return repos, nil 119} 120 121func scanRepo(rows *sql.Rows) (*Repo, error) { 122 var repo Repo 123 var createdAt string 124 if err := rows.Scan(&repo.Did, &repo.Name, &repo.Knot, &createdAt); err != nil { 125 return nil, err 126 } 127 128 createdAtTime, err := time.Parse(time.RFC3339, createdAt) 129 if err != nil { 130 now := time.Now() 131 repo.Created = &now 132 } 133 134 repo.Created = &createdAtTime 135 136 return &repo, nil 137}