From ae8f591ca791de70924cdc223dcbfefe3fd8c159 Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Wed, 28 Jan 2026 20:17:39 +0900 Subject: [PATCH] appview: resolve md mentions from ingester As `sh.tangled.comment` now not holding the mentions and references, manually resolve them the ingester. Signed-off-by: Seongmin Lee --- appview/ingester.go | 28 +++++++++++++++++++--------- appview/models/comment.go | 23 +++++------------------ appview/state/state.go | 13 +++++++------ 3 files changed, 31 insertions(+), 33 deletions(-) diff --git a/appview/ingester.go b/appview/ingester.go index 89d5b35b..9d26902c 100644 --- a/appview/ingester.go +++ b/appview/ingester.go @@ -17,6 +17,7 @@ import ( "tangled.org/core/api/tangled" "tangled.org/core/appview/config" "tangled.org/core/appview/db" + "tangled.org/core/appview/mentions" "tangled.org/core/appview/models" "tangled.org/core/appview/serververify" "tangled.org/core/appview/validator" @@ -26,12 +27,13 @@ import ( ) type Ingester struct { - Db db.DbWrapper - Enforcer *rbac.Enforcer - IdResolver *idresolver.Resolver - Config *config.Config - Logger *slog.Logger - Validator *validator.Validator + Db db.DbWrapper + Enforcer *rbac.Enforcer + IdResolver *idresolver.Resolver + MentionResolver *mentions.Resolver + Config *config.Config + Logger *slog.Logger + Validator *validator.Validator } type processFunc func(ctx context.Context, e *jmodels.Event) error @@ -901,16 +903,22 @@ func (i *Ingester) ingestIssueComment(e *jmodels.Event) error { // convert 'sh.tangled.repo.issue.comment' to 'sh.tangled.comment' comment, err := models.CommentFromRecord(syntax.DID(did), syntax.RecordKey(rkey), tangled.Comment{ - Body: record.Body, + Body: &tangled.Comment_Body{Markup_Markdown: &tangled.Markup_Markdown{Text: record.Body}}, CreatedAt: record.CreatedAt, - Mentions: record.Mentions, - References: record.References, ReplyTo: record.ReplyTo, Subject: record.Issue, }) if err != nil { return fmt.Errorf("failed to parse comment from record: %w", err) } + comment.Mentions = make([]syntax.DID, len(record.Mentions)) + for i, did := range record.Mentions { + comment.Mentions[i] = syntax.DID(did) + } + comment.References = make([]syntax.ATURI, len(record.References)) + for i, uri := range record.References { + comment.References[i] = syntax.ATURI(uri) + } if err := comment.Validate(); err != nil { return fmt.Errorf("failed to validate comment: %w", err) @@ -985,6 +993,8 @@ func (i *Ingester) ingestComment(e *jmodels.Event) error { return fmt.Errorf("failed to validate comment: %w", err) } + comment.Mentions, comment.References = i.MentionResolver.Resolve(context.Background(), comment.Body) + tx, err := ddb.Begin() if err != nil { return fmt.Errorf("failed to start transaction: %w", err) diff --git a/appview/models/comment.go b/appview/models/comment.go index f130e0b4..0f52c3b8 100644 --- a/appview/models/comment.go +++ b/appview/models/comment.go @@ -64,12 +64,10 @@ func (c *Comment) AsRecord() typegen.CBORMarshaler { } default: // default to CommentNSID return &tangled.Comment{ - Subject: c.Subject.String(), - Body: c.Body, - CreatedAt: c.Created.Format(time.RFC3339), - ReplyTo: replyTo, - Mentions: mentions, - References: references, + Subject: c.Subject.String(), + Body: &tangled.Comment_Body{Markup_Markdown: &tangled.Markup_Markdown{Text: c.Body}}, + CreatedAt: c.Created.Format(time.RFC3339), + ReplyTo: replyTo, } } } @@ -107,15 +105,6 @@ func CommentFromRecord(did syntax.DID, rkey syntax.RecordKey, record tangled.Com return nil, err } - i := record - mentions := make([]syntax.DID, len(record.Mentions)) - for i, did := range record.Mentions { - mentions[i] = syntax.DID(did) - } - references := make([]syntax.ATURI, len(record.References)) - for i, uri := range i.References { - references[i] = syntax.ATURI(uri) - } var replyTo *syntax.ATURI if record.ReplyTo != nil { replyToAtUri := syntax.ATURI(*record.ReplyTo) @@ -126,12 +115,10 @@ func CommentFromRecord(did syntax.DID, rkey syntax.RecordKey, record tangled.Com Did: did, Collection: tangled.CommentNSID, Rkey: rkey.String(), - Body: record.Body, + Body: record.Body.Markup_Markdown.Text, Subject: syntax.ATURI(record.Subject), ReplyTo: replyTo, Created: created, - Mentions: mentions, - References: references, } return &comment, nil diff --git a/appview/state/state.go b/appview/state/state.go index 1c06300b..60cb9ae4 100644 --- a/appview/state/state.go +++ b/appview/state/state.go @@ -146,12 +146,13 @@ func Make(ctx context.Context, config *config.Config) (*State, error) { } ingester := appview.Ingester{ - Db: wrapper, - Enforcer: enforcer, - IdResolver: res, - Config: config, - Logger: log.SubLogger(logger, "ingester"), - Validator: validator, + Db: wrapper, + Enforcer: enforcer, + IdResolver: res, + MentionResolver: mentionsResolver, + Config: config, + Logger: log.SubLogger(logger, "ingester"), + Validator: validator, } err = jc.StartJetstream(ctx, ingester.Ingest()) if err != nil { -- 2.51.2