Assist_Design/docs/MONOREPO-ARCHITECTURE.md
T. Narantuya a95ec60859 Refactor address management and update related services for improved clarity and functionality
- Updated address retrieval in user service to replace billing info with a dedicated address method.
- Adjusted API endpoints to use `PATCH /api/me/address` for address updates instead of billing updates.
- Enhanced documentation to reflect changes in address management processes and API usage.
- Removed deprecated types and services related to billing address handling, streamlining the codebase.
2025-09-17 18:43:43 +09:00

2.0 KiB

Monorepo Architecture (2025)

Structure

apps/
  portal/              # Next.js frontend
  bff/                 # NestJS Backend-for-Frontend
packages/
  domain/              # Pure domain/types/utils (isomorphic)

Portal (Next.js)

src/
  app/                 # App Router routes
  components/          # Design system (ui, layout, common)
  features/            # Feature modules (auth, billing, ...)
  lib/                 # Core utils/services (api, query, env, utils, types)
  providers/           # Context providers (QueryProvider, ThemeProvider)
  styles/              # Global styles

Conventions:

  • Use @/lib/* for shared frontend utilities and services.
  • Avoid duplicate layers: do not reintroduce core/ or shared/ inside the app.
  • Feature modules own their components/, hooks/, services/, and types/ as needed.
  • Cross-feature UI belongs in components (atomic design).

BFF (NestJS)

src/
  modules/             # Feature-aligned modules (auth, orders, billing, ...)
  common/              # Nest providers/interceptors/guards
  shared/              # Backend-only shared types if any
  main.ts              # Entry point

Conventions:

  • Prefer modules/* over flat directories per domain.
  • Keep DTOs and validators in-module; reuse packages/domain for domain types.

packages/domain

  • Domain models, status enums, validation helpers, logger, etc.
  • Must be framework-agnostic (no React/Nest imports).

Path Aliases

  • Portal: @/*, @/lib/*, @/features/*, @/components/*, @/providers/*.
  • BFF: @/* mapped to apps/bff/src (via tsconfig/jest config).
  • Domain: import via @customer-portal/domain.

Error Handling & Security

  • Never leak sensitive details to end users; map errors to user-friendly messages.
  • Centralize fetch/api concerns in @/lib/api/* with interceptors and strict typing.

Testing & DX (optional enhancements)

  • Consider adding unit/integration tests per feature module.
  • Enforce ESLint/Prettier consistent across repo.
  • Optional: generators for feature scaffolding.