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