appview: db: issues: add method for getting any issues a repo might have #474

merged
opened by ptr.pet targeting master from [deleted fork]: repo-feed
Changed files
+64 -2
appview
+64 -2
appview/db/issues.go
··· 142 142 body, 143 143 open, 144 144 comment_count 145 - from 145 + from 146 146 numbered_issue 147 - where 147 + where 148 148 row_num between ? and ?`, 149 149 repoAt, openValue, page.Offset+1, page.Offset+page.Limit) 150 150 if err != nil { ··· 178 178 return issues, nil 179 179 } 180 180 181 + func GetAnyIssues(e Execer, repoAt syntax.ATURI, count int) ([]Issue, error) { 182 + issues := make([]Issue, 0, count) 183 + 184 + rows, err := e.Query( 185 + `select 186 + i.id, 187 + i.owner_did, 188 + i.repo_at, 189 + i.issue_id, 190 + i.created, 191 + i.title, 192 + i.body, 193 + i.open 194 + from 195 + issues i 196 + where 197 + i.repo_at = ? 198 + order by 199 + i.created desc`, 200 + repoAt) 201 + if err != nil { 202 + return nil, err 203 + } 204 + defer rows.Close() 205 + 206 + for rows.Next() { 207 + if len(issues) >= count { 208 + break 209 + } 210 + 211 + var issue Issue 212 + var issueCreatedAt string 213 + err := rows.Scan( 214 + &issue.ID, 215 + &issue.OwnerDid, 216 + &issue.RepoAt, 217 + &issue.IssueId, 218 + &issueCreatedAt, 219 + &issue.Title, 220 + &issue.Body, 221 + &issue.Open, 222 + ) 223 + if err != nil { 224 + return nil, err 225 + } 226 + 227 + issueCreatedTime, err := time.Parse(time.RFC3339, issueCreatedAt) 228 + if err != nil { 229 + return nil, err 230 + } 231 + issue.Created = issueCreatedTime 232 + 233 + issues = append(issues, issue) 234 + } 235 + 236 + if err := rows.Err(); err != nil { 237 + return nil, err 238 + } 239 + 240 + return issues, nil 241 + } 242 + 181 243 // timeframe here is directly passed into the sql query filter, and any 182 244 // timeframe in the past should be negative; e.g.: "-3 months" 183 245 func GetIssuesByOwnerDid(e Execer, ownerDid string, timeframe string) ([]Issue, error) {