5.0 KiB
FSD Final Cleanup Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development to implement task-by-task.
Goal: Complete FSD migration by fixing all remaining compliance gaps in apps/frontend/src/
Architecture: Five independent phases: (1) fix ../../../ → @/ in 8 broker files, (2) move BrokerAccountLayout from entities to widgets, (3) add api/ to entities/search, (4) fix app layer deep imports to use barrel, (5) fix test relative imports to use @/. Each phase is safe, mechanical, and independently verifiable.
Tech Stack: TypeScript, React, Feature-Sliced Design, Vitest
File Structure Changes
Create
apps/frontend/src/widgets/broker-account-layout/index.tsapps/frontend/src/widgets/broker-account-layout/ui/BrokerAccountLayout.tsxapps/frontend/src/entities/search/api/searchApi.ts
Delete
apps/frontend/src/entities/broker-account/ui/BrokerAccountLayout.tsxapps/frontend/src/entities/broker-account/ui/(if empty)
Modify (20+ files)
See per-task sections below.
Phase 1: Fix import aliases
Task 1: Fix ../../../ → @/ in 8 broker files
Files to modify:
apps/frontend/src/pages/broker-accounts/ui/BrokerAccountsPage.tsx— 3 relative importsapps/frontend/src/pages/broker-positions/ui/BrokerPositionsPage.tsx— 2 relative importsapps/frontend/src/pages/broker-operations/ui/BrokerOperationsPage.tsx— 3 relative importsapps/frontend/src/pages/broker-account/ui/BrokerAccountOverviewPage.tsx— 4 relative importsapps/frontend/src/widgets/broker-allocation-chart/ui/BrokerAllocationChart.tsx— 1 relative importapps/frontend/src/widgets/broker-operations-table/ui/BrokerOperationsTable.tsx— 2 relative importsapps/frontend/src/widgets/broker-account-card/ui/BrokerAccountCard.tsx— 2 relative importsapps/frontend/src/widgets/broker-accounts-summary/ui/BrokerAccountsSummary.tsx— 3 relative imports
Each replacement follows the same pattern: ../../../entities/... → @/entities/... and ../../../widgets/... → @/widgets/....
For pages at depth 2 (../../entities/) — same prefix. Only files at depth 3 (../../../) exist in this set.
Note: 3 pages import useBrokerAccountContext from ../../../entities/broker-account/ui/BrokerAccountLayout — these will be updated again in Phase 2 after the move.
Phase 2: Move BrokerAccountLayout to widgets
Task 2: Create widgets/broker-account-layout
widgets/broker-account-layout/index.ts— re-exportsBrokerAccountLayoutanduseBrokerAccountContextwidgets/broker-account-layout/ui/BrokerAccountLayout.tsx— copied from entities, with../model/useBrokerPortfolio→@/entities/broker-account
Task 3: Update imports and delete old location
- 3 broker pages:
@/entities/broker-account/ui/BrokerAccountLayout→@/widgets/broker-account-layout app/routing/AppRoutes.tsx: same update- Delete
entities/broker-account/ui/BrokerAccountLayout.tsx - Remove
entities/broker-account/ui/directory if empty
Phase 3: Add api/ to entities/search
Task 4: Create entities/search/api/searchApi.ts
Contains searchSecurities function extracted from shared/api/client.ts. Imports request from shared.
Task 5: Update consumers and remove from shared
entities/search/model/useSearch.ts:@/shared/api/client→../api/searchApientities/search/index.ts: add re-export ofsearchSecuritiesshared/api/client.ts: removesearchSecuritiesfunctionshared/api/index.ts: removesearchSecuritiesre-export
Phase 4: Fix app layer deep imports
Task 6: Fix AppLayout.tsx, SessionProvider.tsx, ProtectedRoute.tsx
app/layouts/AppLayout.tsx:@/entities/session/model/useSession→@/entities/sessionapp/providers/SessionProvider.tsx: both deep imports →@/entities/sessionapp/routing/ProtectedRoute.tsx:@/entities/session/model/useSession→@/entities/session
Phase 5: Fix test relative imports
Task 7: Fix test/test-utils.tsx relative import
test/test-utils.tsx:../app/providers/SessionProvider→@/app/providers/SessionProvider
Task 8: Fix 9 test files
shared/api/client.test.ts:../../test/server→@/test/serverentities/session/api/sessionApi.test.ts:../../../test/server→@/test/serverentities/stock/model/useStockDividends.test.tsx:../../../test/server→@/test/serverentities/stock/model/useStockCandles.test.tsx:../../../test/server→@/test/serverentities/bond/model/useBondCandles.test.tsx:../../../test/server→@/test/serverapp/providers/SessionProvider.test.tsx:../../test/server→@/test/serverpages/login/LoginPage.test.tsx:../../test/server→@/test/server,../../test/test-utils→@/test/test-utilspages/register/RegisterPage.test.tsx: samepages/profile/ProfilePage.test.tsx: same
Verification
Task 9: Run tests, lint, build
npm run lint -w apps/frontendnpm run test -w apps/frontendnpm run build -w apps/frontend