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