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