-157
appview/db/issues.go
-157
appview/db/issues.go
···
391
391
return issues, nil
392
392
}
393
393
394
-
func GetIssuesWithLimit(e Execer, limit int, filters ...filter) ([]Issue, error) {
395
-
issues := make([]Issue, 0, limit)
396
-
397
-
var conditions []string
398
-
var args []any
399
-
for _, filter := range filters {
400
-
conditions = append(conditions, filter.Condition())
401
-
args = append(args, filter.Arg()...)
402
-
}
403
-
404
-
whereClause := ""
405
-
if conditions != nil {
406
-
whereClause = " where " + strings.Join(conditions, " and ")
407
-
}
408
-
limitClause := ""
409
-
if limit != 0 {
410
-
limitClause = fmt.Sprintf(" limit %d ", limit)
411
-
}
412
-
413
-
query := fmt.Sprintf(
414
-
`select
415
-
i.id,
416
-
i.owner_did,
417
-
i.repo_at,
418
-
i.issue_id,
419
-
i.created,
420
-
i.title,
421
-
i.body,
422
-
i.open
423
-
from
424
-
issues i
425
-
%s
426
-
order by
427
-
i.created desc
428
-
%s`,
429
-
whereClause, limitClause)
430
-
431
-
rows, err := e.Query(query, args...)
432
-
if err != nil {
433
-
return nil, err
434
-
}
435
-
defer rows.Close()
436
-
437
-
for rows.Next() {
438
-
var issue Issue
439
-
var issueCreatedAt string
440
-
err := rows.Scan(
441
-
&issue.Id,
442
-
&issue.Did,
443
-
&issue.RepoAt,
444
-
&issue.IssueId,
445
-
&issueCreatedAt,
446
-
&issue.Title,
447
-
&issue.Body,
448
-
&issue.Open,
449
-
)
450
-
if err != nil {
451
-
return nil, err
452
-
}
453
-
454
-
issueCreatedTime, err := time.Parse(time.RFC3339, issueCreatedAt)
455
-
if err != nil {
456
-
return nil, err
457
-
}
458
-
issue.Created = issueCreatedTime
459
-
460
-
issues = append(issues, issue)
461
-
}
462
-
463
-
if err := rows.Err(); err != nil {
464
-
return nil, err
465
-
}
466
-
467
-
return issues, nil
468
-
}
469
-
470
394
func GetIssues(e Execer, filters ...filter) ([]Issue, error) {
471
395
return GetIssuesPaginated(e, pagination.FirstPage(), filters...)
472
-
}
473
-
474
-
// timeframe here is directly passed into the sql query filter, and any
475
-
// timeframe in the past should be negative; e.g.: "-3 months"
476
-
func GetIssuesByOwnerDid(e Execer, ownerDid string, timeframe string) ([]Issue, error) {
477
-
var issues []Issue
478
-
479
-
rows, err := e.Query(
480
-
`select
481
-
i.id,
482
-
i.owner_did,
483
-
i.rkey,
484
-
i.repo_at,
485
-
i.issue_id,
486
-
i.created,
487
-
i.title,
488
-
i.body,
489
-
i.open,
490
-
r.did,
491
-
r.name,
492
-
r.knot,
493
-
r.rkey,
494
-
r.created
495
-
from
496
-
issues i
497
-
join
498
-
repos r on i.repo_at = r.at_uri
499
-
where
500
-
i.owner_did = ? and i.created >= date ('now', ?)
501
-
order by
502
-
i.created desc`,
503
-
ownerDid, timeframe)
504
-
if err != nil {
505
-
return nil, err
506
-
}
507
-
defer rows.Close()
508
-
509
-
for rows.Next() {
510
-
var issue Issue
511
-
var issueCreatedAt, repoCreatedAt string
512
-
var repo Repo
513
-
err := rows.Scan(
514
-
&issue.Id,
515
-
&issue.Did,
516
-
&issue.Rkey,
517
-
&issue.RepoAt,
518
-
&issue.IssueId,
519
-
&issueCreatedAt,
520
-
&issue.Title,
521
-
&issue.Body,
522
-
&issue.Open,
523
-
&repo.Did,
524
-
&repo.Name,
525
-
&repo.Knot,
526
-
&repo.Rkey,
527
-
&repoCreatedAt,
528
-
)
529
-
if err != nil {
530
-
return nil, err
531
-
}
532
-
533
-
issueCreatedTime, err := time.Parse(time.RFC3339, issueCreatedAt)
534
-
if err != nil {
535
-
return nil, err
536
-
}
537
-
issue.Created = issueCreatedTime
538
-
539
-
repoCreatedTime, err := time.Parse(time.RFC3339, repoCreatedAt)
540
-
if err != nil {
541
-
return nil, err
542
-
}
543
-
repo.Created = repoCreatedTime
544
-
545
-
issues = append(issues, issue)
546
-
}
547
-
548
-
if err := rows.Err(); err != nil {
549
-
return nil, err
550
-
}
551
-
552
-
return issues, nil
553
396
}
554
397
555
398
func GetIssue(e Execer, repoAt syntax.ATURI, issueId int) (*Issue, error) {
+5
-1
appview/db/profile.go
+5
-1
appview/db/profile.go
···
132
132
*items = append(*items, &pull)
133
133
}
134
134
135
-
issues, err := GetIssuesByOwnerDid(e, forDid, timeframe)
135
+
issues, err := GetIssues(
136
+
e,
137
+
FilterEq("did", forDid),
138
+
FilterGte("created", time.Now().AddDate(0, -TimeframeMonths, 0)),
139
+
)
136
140
if err != nil {
137
141
return nil, fmt.Errorf("error getting issues by owner did: %w", err)
138
142
}
+2
-2
appview/pages/templates/user/overview.html
+2
-2
appview/pages/templates/user/overview.html
···
115
115
</summary>
116
116
<div class="py-2 text-sm flex flex-col gap-3 mb-2">
117
117
{{ range $items }}
118
-
{{ $repoOwner := resolve .Metadata.Repo.Did }}
119
-
{{ $repoName := .Metadata.Repo.Name }}
118
+
{{ $repoOwner := resolve .Repo.Did }}
119
+
{{ $repoName := .Repo.Name }}
120
120
{{ $repoUrl := printf "%s/%s" $repoOwner $repoName }}
121
121
122
122
<div class="flex gap-2 text-gray-600 dark:text-gray-300">
+6
-1
appview/repo/feed.go
+6
-1
appview/repo/feed.go
···
9
9
"time"
10
10
11
11
"tangled.sh/tangled.sh/core/appview/db"
12
+
"tangled.sh/tangled.sh/core/appview/pagination"
12
13
"tangled.sh/tangled.sh/core/appview/reporesolver"
13
14
14
15
"github.com/bluesky-social/indigo/atproto/syntax"
···
23
24
return nil, err
24
25
}
25
26
26
-
issues, err := db.GetIssuesWithLimit(rp.db, feedLimitPerType, db.FilterEq("repo_at", f.RepoAt()))
27
+
issues, err := db.GetIssuesPaginated(
28
+
rp.db,
29
+
pagination.Page{Limit: feedLimitPerType},
30
+
db.FilterEq("repo_at", f.RepoAt()),
31
+
)
27
32
if err != nil {
28
33
return nil, err
29
34
}