forked from tangled.org/core
Monorepo for Tangled

appview: fix issues in profile timeline

simplify issue getters

Signed-off-by: oppiliappan <me@oppi.li>

oppi.li 1ec70a31 792c658c

verified
Changed files
+13 -161
appview
db
pages
templates
repo
-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
··· 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
··· 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
··· 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 }