feat(search): fuzzy/typo tolerance (pg_trgm) (#16)
CI / backend (push) Successful in 48s
CI / frontend (push) Successful in 13s
Deploy Staging / deploy (push) Successful in 25s
Security / secrets (push) Successful in 3s
Security / dependencies (push) Successful in 55s
CI / backend (pull_request) Successful in 49s
CI / frontend (pull_request) Successful in 12s
Security / secrets (pull_request) Successful in 3s
Security / dependencies (pull_request) Successful in 53s

This commit was merged in pull request #16.
This commit is contained in:
2026-07-01 22:45:10 +02:00
parent 9bbab5d32a
commit c0c1777d3f
6 changed files with 813 additions and 21 deletions
+7 -4
View File
@@ -2,6 +2,13 @@ using InboxIntel.Domain.Enums;
namespace InboxIntel.Application.DTOs;
/// <summary>
/// Row summary for search/list results. <c>MatchHighlight</c> is a "why this matched" body
/// fragment (ts_headline) with matched terms wrapped in U+E000/U+E001 sentinels — NOT HTML;
/// the client renders them as escaped &lt;mark&gt; elements, so untrusted email content can
/// never inject markup. Null unless the search had a free-text query; optional/last so other
/// DTO constructors are unaffected.
/// </summary>
public record EmailSummaryDto(
Guid Id,
string GmailMessageId,
@@ -17,10 +24,6 @@ public record EmailSummaryDto(
EmailCategory Category,
bool HasListUnsubscribe,
bool SupportsOneClick,
// "Why this matched": a ts_headline fragment of the body with matched terms wrapped in
// U+E000/U+E001 sentinels (NOT HTML — the client renders them as escaped <mark> elements,
// so untrusted email content can never inject markup). Null unless the search had a
// free-text query. Optional/last so other DTO constructors are unaffected.
string? MatchHighlight = null);
/// <summary>Full single-email view, including body text, for the detail pane.</summary>