From bf367fc5feb05a8c23e965f75a02ac958f7c5a23 Mon Sep 17 00:00:00 2001 From: sdarbinyan Date: Mon, 17 Aug 2026 21:38:53 +0400 Subject: [PATCH] docs: correct search-model duplication finding - three shapes, not two Re-verified GAPS-AND-IMPROVEMENTS.md's "duplicate search models" item: core/search/models/search.model.ts was already a re-export shim (fine), but core/search/models/search-state.model.ts is a real second copy, and features/search/facade/search.facade.ts has a third, private LegacySearchState interface with the same fields again. Documented as its own scoped task rather than fixed here - reconciling three shapes on the catalog rendering path needs full consumer tracing first. Co-Authored-By: Claude Sonnet 5 --- GAPS-AND-IMPROVEMENTS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GAPS-AND-IMPROVEMENTS.md b/GAPS-AND-IMPROVEMENTS.md index 733ed6e..e167634 100644 --- a/GAPS-AND-IMPROVEMENTS.md +++ b/GAPS-AND-IMPROVEMENTS.md @@ -52,7 +52,7 @@ See [BACKEND-API-REFERENCE.md](BACKEND-API-REFERENCE.md) for the full contract. 1. **Only 2 of 11 admin gateway domains (Categories, Dashboard-metrics) have a DI-token seam.** The other 9 — Orders, Products, Users, Transactions, Monitoring, Moderation, plus derived Customers/Analytics — inject their mock gateway class directly. A token has to be added to each before any real backend can be bound, independent of how easy that domain's actual endpoint is to build. 2. **FIXED (verified 2026-08-17).** ~~`AdminRole` was defined twice with unrelated shapes~~ — only one `AdminRole` export exists (`core/auth/models/permission.model.ts`); the Users-page shape is `AdminUserRoleRecord` with a disambiguating comment. 3. **Two unrelated `Category` types exist**, both fed by the same `/category` response, both still in active use. -4. **Duplicate search models** exist under two different module paths. +4. **Worse than previously stated (re-verified 2026-08-17): three overlapping `SearchState`-shaped types, not two.** `core/search/models/search.model.ts` is already a clean re-export shim (fixed), but `core/search/models/search-state.model.ts` is a genuine second copy consumed by `catalog-container.component.ts`, and `features/search/facade/search.facade.ts` additionally defines its own private `LegacySearchState` interface with the same fields again. Reconciling all three touches the highest-traffic storefront surface (catalog rendering) — needs its own careful pass with full consumer tracing, not a quick rename. 5. **The error envelope is entirely a proposal** — no interceptor in the app inspects error response bodies today; every error reaction happens at the raw HTTP-status level. Adopting an envelope is a net-new build for both sides, not a preservation of existing behavior. 6. **429 (rate limiting) has zero client-side handling anywhere** — no interceptor, facade, or component references it. If the backend rate-limits, today's frontend has no graceful path for that response. 7. **No API versioning scheme has been decided** — no version segment, no version header, anywhere in the client.