Assist_Design/CODEBASE_ANALYSIS.md

187 lines
5.8 KiB
Markdown
Raw Normal View History

# Codebase Analysis: Remaining Errors & Redundancies
## 🔴 **Critical Type Errors**
### 1. **Portal API Client Method Case Issue**
**Location**: `apps/portal/src/features/checkout/services/checkout.service.ts`
```typescript
// ❌ ERROR: Property 'post' does not exist on type 'ApiClient'. Did you mean 'POST'?
return apiClient.post("/checkout/cart", { ... });
await apiClient.post("/checkout/validate", cart);
```
**Fix**: Use uppercase method names
```typescript
return apiClient.POST("/checkout/cart", { ... });
await apiClient.POST("/checkout/validate", cart);
```
### 2. **PricingTier Export Issue**
**Location**: `apps/portal/src/features/catalog/components/index.ts:29`
```typescript
// ❌ ERROR: Module declares 'PricingTier' locally, but it is not exported
export type { PricingDisplayProps, PricingTier } from "./base/PricingDisplay";
```
**Fix**: Remove PricingTier from local export since it's now imported from domain
```typescript
export type { PricingDisplayProps } from "./base/PricingDisplay";
```
### 3. **Checkout Hook Type Issue**
**Location**: `apps/portal/src/features/checkout/hooks/useCheckout.ts:115`
```typescript
// ❌ ERROR: Type 'null' is not assignable to parameter type 'OrderConfigurations | undefined'
const cart = await checkoutService.buildCart(orderType, selections, simConfig);
```
**Fix**: Handle null case
```typescript
const cart = await checkoutService.buildCart(orderType, selections, simConfig || undefined);
```
### 4. **Response Helper Type Issue**
**Location**: `apps/portal/src/lib/api/response-helpers.ts:91`
```typescript
// ❌ ERROR: Property 'data' is missing in type
```
**Fix**: Ensure response structure matches expected type
---
## 🟠 **High Priority Redundancies**
### 1. **SIM Action Request Types Duplication**
**Location**: `apps/portal/src/features/subscriptions/services/sim-actions.service.ts`
**Problem**: Portal defines its own request types instead of using domain types
```typescript
// ❌ Portal defines locally
export interface TopUpRequest {
quotaMb: number;
}
export interface ChangePlanRequest {
newPlanCode: string;
assignGlobalIp: boolean;
scheduledAt?: string;
}
```
**Domain already has** (`packages/domain/sim/schema.ts`):
```typescript
// ✅ Domain has validated types
export type SimTopUpRequest = z.infer<typeof simTopUpRequestSchema>;
export type SimPlanChangeRequest = z.infer<typeof simPlanChangeRequestSchema>;
export type SimCancelRequest = z.infer<typeof simCancelRequestSchema>;
```
**Impact**:
- Portal types lack validation (no min/max for quotaMb, no format validation for scheduledAt)
- Types could diverge over time
- No runtime type checking before API calls
### 2. **SIM Configuration Schema Missing**
**Location**: `apps/portal/src/features/catalog/hooks/useSimConfigure.ts`
**Problem**: Broken imports from wrong domain
```typescript
// ❌ Wrong imports
import {
simConfigureFormSchema, // Does not exist
simConfigureFormToRequest, // Does not exist
type SimConfigureFormData, // Does not exist
type SimType, // Exists in domain/sim
type ActivationType, // Does not exist in billing
type MnpData, // Does not exist in billing
} from "@customer-portal/domain/billing"; // Wrong domain
```
**Fix**: Create proper schemas in domain/sim or domain/orders
---
## 🟡 **Medium Priority Issues**
### 3. **BFF Auth Workflow Type Issues**
**Location**: `apps/bff/src/modules/auth/infra/workflows/workflows/whmcs-link-workflow.service.ts`
**Problem**: Type '{}' is not assignable to type 'string'
```typescript
// Lines 144-147: Empty object assignments to string fields
```
**Fix**: Ensure proper string values or handle empty cases
### 4. **Prisma Type Issue**
**Location**: `apps/bff/src/modules/id-mappings/mappings.service.ts:71`
**Problem**: `Prisma.IdMapping` does not exist
```typescript
// ❌ ERROR: Namespace has no exported member 'IdMapping'
```
**Fix**: Check Prisma schema or use correct type name
### 5. **Users Service Type Issue**
**Location**: `apps/bff/src/modules/users/users.service.ts:535`
**Problem**: Type '{}' is not assignable to type 'string'
```typescript
// Line 535: Empty object assignment to string field
```
---
## 🟢 **Low Priority Cleanup Opportunities**
### 6. **Validation Schema Organization**
**Current State**: Good separation between `common/validation.ts` and `toolkit/validation/`
**Recommendation**: Keep current structure, toolkit is for utilities, common is for validation
### 7. **Domain Package Structure**
**Current State**: Well-organized with clear separation
**Recommendation**: No changes needed, follows good DDD principles
### 8. **BFF Service Architecture**
**Current State**: Good separation of concerns
**Recommendation**: Consider extracting shared validation logic to domain layer
---
## 📋 **Implementation Priority**
### **Phase 1: Fix Critical Type Errors** (30 minutes)
1. Fix API client method case (`post``POST`)
2. Remove PricingTier from local export
3. Handle null simConfig in checkout hook
4. Fix response helper type issue
### **Phase 2: Remove Type Duplications** (1 hour)
1. Replace Portal SIM request types with domain types
2. Create missing SIM configuration schemas
3. Update imports to use correct domain
### **Phase 3: Fix BFF Type Issues** (30 minutes)
1. Fix auth workflow string assignments
2. Fix Prisma type reference
3. Fix users service string assignment
### **Phase 4: Cleanup & Documentation** (30 minutes)
1. Update any remaining documentation
2. Run full type check
3. Verify all functionality works
---
## 🎯 **Success Criteria**
- ✅ All TypeScript errors resolved
- ✅ No duplicate type definitions between Portal and Domain
- ✅ All validation schemas centralized in Domain
- ✅ Portal uses Domain types exclusively
- ✅ BFF uses Domain types exclusively
- ✅ All tests passing
- ✅ Type checking passes across all workspaces