From 9a9c2d444bef23f248d0462d34cf586efbce8cb6 Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Mon, 1 Sep 2025 19:57:06 +0100 Subject: [PATCH] appview/ingester: simplify ingesters - create/updates are unified because db handles upserts - use new DB APIs that support db.Filter Signed-off-by: oppiliappan --- appview/ingester.go | 72 ++++++++++++--------------------------------- 1 file changed, 19 insertions(+), 53 deletions(-) diff --git a/appview/ingester.go b/appview/ingester.go index 1d758982..59d011ae 100644 --- a/appview/ingester.go +++ b/appview/ingester.go @@ -6,6 +6,7 @@ import ( "fmt" "log/slog" "strings" + "time" "github.com/bluesky-social/indigo/atproto/syntax" @@ -790,7 +791,7 @@ func (i *Ingester) ingestIssue(ctx context.Context, e *models.Event) error { } switch e.Commit.Operation { - case models.CommitOperationCreate: + case models.CommitOperationCreate, models.CommitOperationUpdate: raw := json.RawMessage(e.Commit.Record) record := tangled.RepoIssue{} err = json.Unmarshal(raw, &record) @@ -814,6 +815,7 @@ func (i *Ingester) ingestIssue(ctx context.Context, e *models.Event) error { l.Error("failed to begin transaction", "err", err) return err } + defer tx.Rollback() err = db.NewIssue(tx, &issue) if err != nil { @@ -821,40 +823,20 @@ func (i *Ingester) ingestIssue(ctx context.Context, e *models.Event) error { return err } - return nil - - case models.CommitOperationUpdate: - raw := json.RawMessage(e.Commit.Record) - record := tangled.RepoIssue{} - err = json.Unmarshal(raw, &record) - if err != nil { - l.Error("invalid record", "err", err) - return err - } - - body := "" - if record.Body != nil { - body = *record.Body - } - - sanitizer := markup.NewSanitizer() - if st := strings.TrimSpace(sanitizer.SanitizeDescription(record.Title)); st == "" { - return fmt.Errorf("title is empty after HTML sanitization") - } - if sb := strings.TrimSpace(sanitizer.SanitizeDefault(body)); sb == "" { - return fmt.Errorf("body is empty after HTML sanitization") - } - - err = db.UpdateIssueByRkey(ddb, did, rkey, record.Title, body) + err = tx.Commit() if err != nil { - l.Error("failed to update issue", "err", err) + l.Error("failed to commit txn", "err", err) return err } return nil case models.CommitOperationDelete: - if err := db.DeleteIssueByRkey(ddb, did, rkey); err != nil { + if err := db.DeleteIssues( + ddb, + db.FilterEq("did", did), + db.FilterEq("rkey", rkey), + ); err != nil { l.Error("failed to delete", "err", err) return fmt.Errorf("failed to delete issue record: %w", err) } @@ -862,7 +844,7 @@ func (i *Ingester) ingestIssue(ctx context.Context, e *models.Event) error { return nil } - return fmt.Errorf("unknown operation: %s", e.Commit.Operation) + return nil } func (i *Ingester) ingestIssueComment(e *models.Event) error { @@ -880,7 +862,7 @@ func (i *Ingester) ingestIssueComment(e *models.Event) error { } switch e.Commit.Operation { - case models.CommitOperationCreate: + case models.CommitOperationCreate, models.CommitOperationUpdate: raw := json.RawMessage(e.Commit.Record) record := tangled.RepoIssueComment{} err = json.Unmarshal(raw, &record) @@ -898,40 +880,24 @@ func (i *Ingester) ingestIssueComment(e *models.Event) error { return fmt.Errorf("body is empty after HTML sanitization") } - err = db.NewIssueComment(ddb, &comment) + _, err = db.AddIssueComment(ddb, *comment) if err != nil { return fmt.Errorf("failed to create issue comment: %w", err) } return nil - case models.CommitOperationUpdate: - raw := json.RawMessage(e.Commit.Record) - record := tangled.RepoIssueComment{} - err = json.Unmarshal(raw, &record) - if err != nil { - return fmt.Errorf("invalid record: %w", err) - } - - sanitizer := markup.NewSanitizer() - if sb := strings.TrimSpace(sanitizer.SanitizeDefault(record.Body)); sb == "" { - return fmt.Errorf("body is empty after HTML sanitization") - } - - err = db.UpdateCommentByRkey(ddb, did, rkey, record.Body) - if err != nil { - return fmt.Errorf("failed to update issue comment: %w", err) - } - - return nil - case models.CommitOperationDelete: - if err := db.DeleteCommentByRkey(ddb, did, rkey); err != nil { + if err := db.DeleteIssueComments( + ddb, + db.FilterEq("did", did), + db.FilterEq("rkey", rkey), + ); err != nil { return fmt.Errorf("failed to delete issue comment record: %w", err) } return nil } - return fmt.Errorf("unknown operation: %s", e.Commit.Operation) + return nil } -- 2.51.2