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