# Customer Domain Cleanup Plan ## Problems Identified ### 1. Too Many Aliases ```typescript // Current mess: User, UserProfile, AuthenticatedUser // 3 names for same thing! UserAuth, PortalUser // 2 names for same thing! CustomerAddress, Address // 2 names for same thing! CustomerData, CustomerProfile // CustomerProfile is manually defined, not from schema! ``` ### 2. Manual Interface (BAD) ```typescript // This bypasses schema-first approach! export interface CustomerProfile { id: string; email: string; // ... manually duplicated fields } ``` ### 3. Unnecessary Schema Type Exports ```typescript export type CustomerAddressSchema = typeof customerAddressSchema; // Unused export type CustomerSchema = typeof customerSchema; // Unused // ... etc ``` ### 4. Confusing Naming - `Customer` = Full WHMCS customer schema (internal use only) - `CustomerData` = Profile subset - `CustomerProfile` = Duplicate manual interface (deprecated) ## Cleanup Plan ### Keep Only These Core Types: ```typescript // === User Entity Types === UserAuth // Auth state from portal DB User // Complete user (auth + profile) // === WHMCS Data Types === CustomerAddress // Address structure CustomerData // Profile data from WHMCS (internal provider use) // === Supporting Types === CustomerEmailPreferences CustomerUser // Sub-users CustomerStats // Billing stats AddressFormData // Form validation // === Internal Provider Types === Customer // Full WHMCS schema (only used in WHMCS mapper) // === Role === UserRole ``` ### Remove These: - ❌ `PortalUser` (use `UserAuth`) - ❌ `UserProfile` (use `User`) - ❌ `AuthenticatedUser` (use `User`) - ❌ `CustomerProfile` interface (use `User` or `CustomerData`) - ❌ `Address` alias (use `CustomerAddress`) - ❌ All schema type exports (`CustomerAddressSchema`, etc.) - ❌ `addressSchema` const alias (use `customerAddressSchema`) ## Implementation ### 1. Clean types.ts Remove: - All deprecated alias types - Manual `CustomerProfile` interface - Schema type exports - `addressSchema` alias ### 2. Clean index.ts Export only: - Core types: `User`, `UserAuth`, `UserRole` - Supporting types: `CustomerAddress`, `CustomerData`, `CustomerEmailPreferences`, `CustomerUser`, `CustomerStats`, `AddressFormData` - Internal: `Customer` (for WHMCS mapper only) ### 3. Update BFF imports (only 9 occurrences!) Replace any remaining: - `CustomerProfile` → `User` - Other deprecated → proper type ## Result: Clean & Clear ```typescript // Customer Domain Exports (CLEAN!) // === User Types === User // Complete user for APIs UserAuth // Auth state for JWT UserRole // "USER" | "ADMIN" // === WHMCS Types === CustomerAddress // Address structure CustomerData // Profile data (internal) // === Supporting === CustomerEmailPreferences CustomerUser CustomerStats AddressFormData // === Internal === Customer // Full WHMCS schema (mapper only) ``` **No aliases. No confusion. Schema-first.**