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) GetAllReposByDid(did string) ([]Repo, error) { 17 var repos []Repo 18 19 rows, err := d.db.Query(`select did, name, knot, created from repos where did = ?`, did) 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) GetRepo(did, name string) (*Repo, error) { 41 var repo Repo 42 43 row := d.db.QueryRow(`select did, name, knot, created from repos where did = ? and name = ?`, did, name) 44 45 var createdAt string 46 if err := row.Scan(&repo.Did, &repo.Name, &repo.Knot, &createdAt); err != nil { 47 return nil, err 48 } 49 createdAtTime, _ := time.Parse(time.RFC3339, createdAt) 50 repo.Created = &createdAtTime 51 52 return &repo, nil 53} 54 55func (d *DB) AddRepo(repo *Repo) error { 56 _, err := d.db.Exec(`insert into repos (did, name, knot, rkey) values (?, ?, ?, ?)`, repo.Did, repo.Name, repo.Knot, repo.Rkey) 57 return err 58} 59 60func (d *DB) RemoveRepo(did, name, rkey string) error { 61 _, err := d.db.Exec(`delete from repos where did = ? and name = ? and rkey = ?`, did, name, rkey) 62 return err 63} 64 65func (d *DB) AddCollaborator(collaborator, repoOwnerDid, repoName, repoKnot string) error { 66 _, err := d.db.Exec( 67 `insert into collaborators (did, repo) 68 values (?, (select id from repos where did = ? and name = ? and knot = ?));`, 69 collaborator, repoOwnerDid, repoName, repoKnot) 70 return err 71} 72 73func (d *DB) CollaboratingIn(collaborator string) ([]Repo, error) { 74 var repos []Repo 75 76 rows, err := d.db.Query(`select r.* from repos r join collaborators c on r.id = c.repo where c.did = ?;`, collaborator) 77 if err != nil { 78 return nil, err 79 } 80 defer rows.Close() 81 82 for rows.Next() { 83 repo, err := scanRepo(rows) 84 if err != nil { 85 return nil, err 86 } 87 repos = append(repos, *repo) 88 } 89 90 if err := rows.Err(); err != nil { 91 return nil, err 92 } 93 94 return repos, nil 95} 96 97func scanRepo(rows *sql.Rows) (*Repo, error) { 98 var repo Repo 99 var createdAt string 100 if err := rows.Scan(&repo.Did, &repo.Name, &repo.Knot, &createdAt); err != nil { 101 return nil, err 102 } 103 104 createdAtTime, err := time.Parse(time.RFC3339, createdAt) 105 if err != nil { 106 now := time.Now() 107 repo.Created = &now 108 } 109 110 repo.Created = &createdAtTime 111 112 return &repo, nil 113}