From 28f01c136be00031b529430d8b7973baa3a95f43 Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Fri, 08 May 2026 19:13:54 +0000 Subject: [PATCH] appview: use `#comment-{rkey}` instead of appview-local id Signed-off-by: Seongmin Lee --- appview/db/reference.go | 38 +++++++++++++++++++++----------------- appview/models/reference.go | 28 +++++++--------------------- appview/pages/markup/reference_link.go | 18 +++++++++--------- appview/pages/markup/reference_link_test.go | 4 ++-- appview/pages/templates/fragments/comment/commentHeader.html | 4 ++-- appview/pages/templates/repo/fragments/backlinks.html | 2 +- appview/pages/templates/repo/pulls/pull.html | 27 --------------------------- 7 file(s) changed, 42 insertion(s)(+), 79 deletion(s)(-) diff --git a/appview/db/reference.go b/appview/db/reference.go --- a/appview/db/reference.go +++ b/appview/db/reference.go @@ -46,7 +46,7 @@ vals := make([]string, len(refLinks)) args := make([]any, 0, len(refLinks)*4) for i, ref := range refLinks { vals[i] = "(?, ?, ?, ?)" - args = append(args, ref.Handle, ref.Repo, ref.SubjectId, ref.CommentId) + args = append(args, ref.Handle, ref.Repo, ref.SubjectId, ref.CommentRkey) } query := fmt.Sprintf( `with input(owner_did, name, issue_id, comment_id) as ( @@ -106,7 +106,7 @@ vals := make([]string, len(refLinks)) args := make([]any, 0, len(refLinks)*4) for i, ref := range refLinks { vals[i] = "(?, ?, ?, ?)" - args = append(args, ref.Handle, ref.Repo, ref.SubjectId, ref.CommentId) + args = append(args, ref.Handle, ref.Repo, ref.SubjectId, ref.CommentRkey) } query := fmt.Sprintf( `with input(owner_did, name, pull_id, comment_id) as ( @@ -271,21 +271,25 @@ if err != nil { return nil, fmt.Errorf("get issue backlinks: %w", err) } backlinks = append(backlinks, ls...) - ls, err = getIssueCommentBacklinks(e, target, backlinksMap[tangled.FeedCommentNSID]) - if err != nil { - return nil, fmt.Errorf("get issue_comment backlinks: %w", err) - } - backlinks = append(backlinks, ls...) ls, err = getPullBacklinks(e, backlinksMap[tangled.RepoPullNSID]) if err != nil { return nil, fmt.Errorf("get pull backlinks: %w", err) } backlinks = append(backlinks, ls...) - ls, err = getPullCommentBacklinks(e, target, backlinksMap[tangled.FeedCommentNSID]) - if err != nil { - return nil, fmt.Errorf("get pull_comment backlinks: %w", err) + switch target.Collection() { + case tangled.RepoIssueNSID: + ls, err = getIssueCommentBacklinks(e, target, backlinksMap[tangled.FeedCommentNSID]) + if err != nil { + return nil, fmt.Errorf("get issue_comment backlinks: %w", err) + } + backlinks = append(backlinks, ls...) + case tangled.RepoPullNSID: + ls, err = getPullCommentBacklinks(e, target, backlinksMap[tangled.FeedCommentNSID]) + if err != nil { + return nil, fmt.Errorf("get pull_comment backlinks: %w", err) + } + backlinks = append(backlinks, ls...) } - backlinks = append(backlinks, ls...) return backlinks, nil } @@ -340,7 +344,7 @@ filter := orm.FilterIn("c.at_uri", aturis) exclude := orm.FilterNotEq("i.at_uri", target) rows, err := e.Query( fmt.Sprintf( - `select r.did, r.name, i.issue_id, c.id, i.title, i.open + `select r.did, r.name, i.issue_id, c.rkey, i.title, i.open from comments c join issues i on i.at_uri = c.subject_uri @@ -360,8 +364,8 @@ var refLinks []models.RichReferenceLink for rows.Next() { var l models.RichReferenceLink l.Kind = models.RefKindIssue - l.CommentId = new(int) - if err := rows.Scan(&l.Handle, &l.Repo, &l.SubjectId, l.CommentId, &l.Title, &l.State); err != nil { + l.CommentRkey = new(syntax.RecordKey) + if err := rows.Scan(&l.Handle, &l.Repo, &l.SubjectId, l.CommentRkey, &l.Title, &l.State); err != nil { return nil, err } refLinks = append(refLinks, l) @@ -422,7 +426,7 @@ filter := orm.FilterIn("c.at_uri", aturis) exclude := orm.FilterNotEq("p.at_uri", target) rows, err := e.Query( fmt.Sprintf( - `select r.did, r.name, p.pull_id, c.id, p.title, p.state + `select r.did, r.name, p.pull_id, c.rkey, p.title, p.state from repos r join pulls p on r.repo_did = p.repo_did @@ -442,8 +446,8 @@ var refLinks []models.RichReferenceLink for rows.Next() { var l models.RichReferenceLink l.Kind = models.RefKindPull - l.CommentId = new(int) - if err := rows.Scan(&l.Handle, &l.Repo, &l.SubjectId, l.CommentId, &l.Title, &l.State); err != nil { + l.CommentRkey = new(syntax.RecordKey) + if err := rows.Scan(&l.Handle, &l.Repo, &l.SubjectId, l.CommentRkey, &l.Title, &l.State); err != nil { return nil, err } refLinks = append(refLinks, l) diff --git a/appview/models/reference.go b/appview/models/reference.go --- a/appview/models/reference.go +++ b/appview/models/reference.go @@ -1,6 +1,6 @@ package models -import "fmt" +import "github.com/bluesky-social/indigo/atproto/syntax" type RefKind int @@ -18,27 +18,13 @@ } } // /@alice.com/cool-proj/issues/123 -// /@alice.com/cool-proj/issues/123#comment-321 +// /@alice.com/cool-proj/issues/123#comment-3mleetx5lhz22 type ReferenceLink struct { - Handle string - Repo string - Kind RefKind - SubjectId int - CommentId *int -} - -func (l ReferenceLink) String() string { - comment := "" - if l.CommentId != nil { - comment = fmt.Sprintf("#comment-%d", *l.CommentId) - } - return fmt.Sprintf("/%s/%s/%s/%d%s", - l.Handle, - l.Repo, - l.Kind.String(), - l.SubjectId, - comment, - ) + Handle string + Repo string + Kind RefKind + SubjectId int + CommentRkey *syntax.RecordKey } type RichReferenceLink struct { diff --git a/appview/pages/markup/reference_link.go b/appview/pages/markup/reference_link.go --- a/appview/pages/markup/reference_link.go +++ b/appview/pages/markup/reference_link.go @@ -8,6 +8,7 @@ "slices" "strconv" "strings" + "github.com/bluesky-social/indigo/atproto/syntax" "github.com/yuin/goldmark/ast" "github.com/yuin/goldmark/text" "tangled.org/core/appview/models" @@ -101,21 +102,20 @@ subjectId, err := strconv.Atoi(subjectSeg) if err != nil { return nil } - var commentId *int + var commentRkey *syntax.RecordKey if u.Fragment != "" { if strings.HasPrefix(u.Fragment, "comment-") { - commentIdStr := u.Fragment[len("comment-"):] - if id, err := strconv.Atoi(commentIdStr); err == nil { - commentId = &id + if rkey, err := syntax.ParseRecordKey(u.Fragment[len("comment-"):]); err != nil { + commentRkey = &rkey } } } return &models.ReferenceLink{ - Handle: handle, - Repo: repo, - Kind: kind, - SubjectId: subjectId, - CommentId: commentId, + Handle: handle, + Repo: repo, + Kind: kind, + SubjectId: subjectId, + CommentRkey: commentRkey, } } diff --git a/appview/pages/markup/reference_link_test.go b/appview/pages/markup/reference_link_test.go --- a/appview/pages/markup/reference_link_test.go +++ b/appview/pages/markup/reference_link_test.go @@ -20,7 +20,7 @@ name: "normal link", source: `[link](http://127.0.0.1:3000/alice.pds.tngl.boltless.dev/coolproj/issues/1)`, wantHandles: make([]string, 0), wantRefLinks: []models.ReferenceLink{ - {Handle: "alice.pds.tngl.boltless.dev", Repo: "coolproj", Kind: models.RefKindIssue, SubjectId: 1, CommentId: nil}, + {Handle: "alice.pds.tngl.boltless.dev", Repo: "coolproj", Kind: models.RefKindIssue, SubjectId: 1, CommentRkey: nil}, }, }, { @@ -28,7 +28,7 @@ name: "commonmark style autolink", source: ``, wantHandles: make([]string, 0), wantRefLinks: []models.ReferenceLink{ - {Handle: "alice.pds.tngl.boltless.dev", Repo: "coolproj", Kind: models.RefKindIssue, SubjectId: 1, CommentId: nil}, + {Handle: "alice.pds.tngl.boltless.dev", Repo: "coolproj", Kind: models.RefKindIssue, SubjectId: 1, CommentRkey: nil}, }, }, } diff --git a/appview/pages/templates/fragments/comment/commentHeader.html b/appview/pages/templates/fragments/comment/commentHeader.html --- a/appview/pages/templates/fragments/comment/commentHeader.html +++ b/appview/pages/templates/fragments/comment/commentHeader.html @@ -26,9 +26,9 @@ {{ end }} {{ end }} {{ define "timestamp" }} - + id="comment-{{ .Comment.Rkey }}"> {{ if .Comment.Deleted }} {{ template "repo/fragments/shortTimeAgo" .Comment.Deleted }} {{ else if .Comment.Edited }} diff --git a/appview/pages/templates/repo/fragments/backlinks.html b/appview/pages/templates/repo/fragments/backlinks.html --- a/appview/pages/templates/repo/fragments/backlinks.html +++ b/appview/pages/templates/repo/fragments/backlinks.html @@ -33,7 +33,7 @@ {{ i "git-pull-request-closed" "size-3" }} {{ end }} - #{{ .SubjectId }} {{ .Title }} + #{{ .SubjectId }} {{ .Title }} {{ if not (eq $.RepoInfo.FullName $repoUrl) }}
diff --git a/appview/pages/templates/repo/pulls/pull.html b/appview/pages/templates/repo/pulls/pull.html --- a/appview/pages/templates/repo/pulls/pull.html +++ b/appview/pages/templates/repo/pulls/pull.html @@ -649,33 +649,6 @@
{{ end }} -{{ define "submissionComment" }} - {{ $comment := index . 0 }} - {{ $root := index . 1 }} -
- -
- {{ template "user/fragments/picLink" (list $comment.Did.String "size-8" (index $root.VouchRelationships (did $comment.OwnerDid))) }} -
- -
- -
- {{ $handle := resolve $comment.Did.String }} - {{ $handle }} - - - {{ template "repo/fragments/shortTime" $comment.Created }} - -
- -
- {{ $comment.Body.Text | markdown }} -
-
-
-{{ end }} - {{ define "loginPrompt" }}