Skip to content

Commit fa33887

Browse files
committed
Fix TypeScript errors and update email/order logic
Resolved multiple TypeScript errors across API routes, services, and email templates. Fixed Prisma model mismatches in E2E tests, added explicit types to transaction callbacks, updated email service and templates to use simplified data structures, and improved audit logging. Also removed unused imports and variables, and updated analytics dashboard types.
1 parent 341bef5 commit fa33887

18 files changed

Lines changed: 653 additions & 216 deletions

TYPESCRIPT_ERRORS_FIX_SUMMARY.md

Lines changed: 339 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,339 @@
1+
# TypeScript Errors Fix Summary
2+
3+
## Completed Fixes ✅
4+
5+
### 1. Shop Layout Headers (FIXED)
6+
- **File**: `src/app/shop/layout.tsx`
7+
- **Issue**: `headers()` returns Promise in Next.js 16
8+
- **Fix**: Added `await` to `headers()` call
9+
- **Status**: ✅ COMPLETE
10+
11+
### 2. Email Template Duplicate Attributes (FIXED)
12+
- **Files**:
13+
- `src/emails/account-verification.tsx`
14+
- `src/emails/password-reset.tsx`
15+
- **Issue**: JSX elements had duplicate `style` attributes
16+
- **Fix**: Merged styles using spread operator
17+
- **Status**: ✅ COMPLETE
18+
19+
### 3. Store Service PrismaClient Types (FIXED)
20+
- **File**: `src/services/store-service.ts`
21+
- **Issue**: Transaction callback parameter had implicit `any` type
22+
- **Fix**: Added explicit `Omit<PrismaClient, '$connect' | '$disconnect' | '$on' | '$transaction' | '$use' | '$extends'>` type to all 5 transaction callbacks
23+
- **Status**: ✅ COMPLETE
24+
25+
### 4. Subscriptions API Route (FIXED)
26+
- **File**: `src/app/api/subscriptions/route.ts`
27+
- **Issue**: `plan` property not in `createSubscriptionCheckoutSession` parameters
28+
- **Fix**:
29+
- Imported `SUBSCRIPTION_PLANS` from subscription-service
30+
- Converted `plan` enum to `stripePriceId`
31+
- Removed `plan` from function call
32+
- **Status**: ✅ COMPLETE
33+
34+
### 5. Analytics Components (FIXED)
35+
- **File**: `src/components/analytics/analytics-dashboard.tsx`
36+
- **Issues**:
37+
- Wrong import name `CustomerMetricsData` (should be `CustomerMetrics`)
38+
- Missing type definitions
39+
- **Fix**:
40+
- Fixed imports to actual component names
41+
- Added missing type definitions for `MetricsData`, `RevenueData`, `TopProduct`, `CustomerMetricsData`
42+
- **Status**: ✅ COMPLETE
43+
44+
### 6. Top Products Percent Type (FIXED)
45+
- **File**: `src/components/analytics/top-products.tsx`
46+
- **Issue**: `percent` parameter had unknown type
47+
- **Fix**: Added explicit type `{ name: string; percent: number }`
48+
- **Status**: ✅ COMPLETE
49+
50+
### 7. E2E Test Prisma Schema Mismatches (FIXED)
51+
- **File**: `tests/e2e/emails/order-confirmation.spec.ts`
52+
- **Issues**: 16 errors from incorrect Prisma model field names
53+
- **Fixes**:
54+
- Removed non-existent `Store.domain` field
55+
- Removed non-existent `Product.stock` and `Product.status` fields
56+
- Added required Product fields: `sku`, `images`, `metaKeywords`
57+
- Created Address records separately with `firstName/lastName/address1/address2`
58+
- Connected addresses via `shippingAddressId/billingAddressId` foreign keys
59+
- Fixed OrderItem to use `price/subtotal/totalAmount` (not `unitPrice/totalPrice`)
60+
- Added required `sku` field to OrderItem
61+
- Fixed all 5 test cases (T181-1 through T181-5)
62+
- **Status**: ✅ COMPLETE
63+
64+
---
65+
66+
## Remaining Issues ⚠️
67+
68+
### Critical Errors (Block Compilation)
69+
70+
#### 1. Missing Analytics API Routes
71+
**Count**: 25+ errors across multiple test files
72+
**Affected Files**:
73+
- `tests/unit/app/api/analytics-api.test.ts`
74+
- `tests/unit/app/api/analytics-routes.test.ts`
75+
76+
**Issue**: Test files import non-existent API routes:
77+
- `@/app/api/analytics/sales/route`
78+
- `@/app/api/analytics/revenue/route`
79+
- `@/app/api/analytics/customers/route`
80+
- `@/app/api/analytics/products/route`
81+
82+
**Fix Required**: Either:
83+
1. Create the missing API route files in `src/app/api/analytics/`
84+
2. OR update tests to skip/mock these routes
85+
86+
**Priority**: HIGH
87+
88+
---
89+
90+
#### 2. E2E Test Prisma Schema Mismatches (FIXED ✅)
91+
**Count**: 16 errors in `tests/e2e/emails/order-confirmation.spec.ts`
92+
93+
**Issues Fixed**:
94+
-`Store.domain` doesn't exist in schema (removed)
95+
-`Product.stock` doesn't exist (removed)
96+
-`Product.status` doesn't exist (removed)
97+
-`Product` missing required fields (added `sku`, `images`, `metaKeywords`)
98+
- ✅ Address uses `line1/line2` (changed to `address1/address2`)
99+
- ✅ Address missing required fields (added `firstName`, `lastName`)
100+
- ✅ OrderItem uses `unitPrice/totalPrice` (changed to `price/subtotal/totalAmount`)
101+
- ✅ OrderItem missing required `sku` field (added)
102+
103+
**Fixes Applied**:
104+
1. Removed `domain` from Store creation
105+
2. Removed `stock` and `status` from Product creation
106+
3. Added required Product fields: `sku`, `images`, `metaKeywords`
107+
4. Created separate Address records with `firstName/lastName/address1/address2`
108+
5. Connected addresses via `shippingAddressId/billingAddressId` foreign keys
109+
6. Fixed OrderItem to use `price/subtotal/totalAmount` and added `sku`
110+
7. Fixed all 5 test cases in the file
111+
112+
**Example Fix Applied**:
113+
```typescript
114+
// Create addresses first
115+
const shippingAddress = await prisma.address.create({
116+
data: {
117+
firstName: 'John', // REQUIRED
118+
lastName: 'Doe', // REQUIRED
119+
address1: '123 Main St', // NOT line1
120+
city: 'New York',
121+
state: 'NY',
122+
postalCode: '10001',
123+
country: 'US',
124+
},
125+
});
126+
127+
// Then create order with address IDs
128+
const order = await prisma.order.create({
129+
data: {
130+
shippingAddressId: shippingAddress.id, // Connect via ID
131+
items: {
132+
create: [{
133+
price: 1299.99, // NOT unitPrice
134+
totalAmount: 1299.99, // NOT totalPrice
135+
}]
136+
}
137+
}
138+
});
139+
```
140+
141+
**Priority**: HIGH
142+
143+
---
144+
145+
#### 3. Subscription Test Type Mismatches
146+
**Count**: 7 errors across subscription test files
147+
148+
**Affected Files**:
149+
- `tests/unit/app/api/subscription/checkout/route.test.ts`
150+
- `tests/unit/app/api/subscription/portal/route.test.ts`
151+
- `tests/unit/app/api/subscription/webhook/route.test.ts`
152+
153+
**Issues**:
154+
- Mock objects don't match full `Stripe.Checkout.Session` type
155+
- Mock objects don't match full `Stripe.BillingPortal.Session` type
156+
- Webhook response expects `{ received: boolean }` not `{ success: boolean }`
157+
158+
**Fix Required**:
159+
1. Create proper Stripe session mocks with all required properties
160+
2. Update webhook tests to return `{ received: boolean }`
161+
162+
**Priority**: MEDIUM
163+
164+
---
165+
166+
#### 4. Missing Service/Utility Modules
167+
**Count**: 20+ import errors
168+
169+
**Missing Files**:
170+
-`@/hooks/use-toast` (theme-editor.tsx)
171+
-`@/hooks/use-plan-enforcement` (use-plan-enforcement.test.ts)
172+
-`@/hooks/use-analytics` (analytics-hooks.test.ts)
173+
-`@/lib/auth-helpers` (multiple test files)
174+
-`@/lib/format-utils` (analytics-hooks.test.ts)
175+
-`@/lib/analytics-utils` (analytics-hooks.test.ts)
176+
-`@/lib/chart-utils` (analytics-hooks.test.ts)
177+
-`@/lib/date-utils` (analytics-hooks.test.ts)
178+
-`@/lib/performance-utils` (analytics-hooks.test.ts)
179+
-`@/lib/error-utils` (analytics-hooks.test.ts)
180+
-`@/components/analytics/metrics-cards` (test file)
181+
-`@/components/analytics/revenue-chart` (test file)
182+
-`@/components/analytics/top-products-table` (test file)
183+
-`@/components/analytics/customer-metrics` (test file)
184+
185+
**Fix Required**:
186+
1. Create missing utility modules with proper exports
187+
2. OR update imports to existing modules
188+
3. OR skip tests that depend on non-existent modules
189+
190+
**Priority**: MEDIUM
191+
192+
---
193+
194+
#### 5. Plan Enforcement Export Issues
195+
**Count**: 4 errors in `tests/unit/lib/plan-enforcement.test.ts`
196+
197+
**Issues**:
198+
- Test imports `withPlanLimits`, `enforcePlanLimits`, `checkProductCreationLimit`, `checkOrderCreationLimit`
199+
- But `@/lib/plan-enforcement` doesn't export these (or exports them differently)
200+
201+
**Fix Required**:
202+
Check actual exports from `src/lib/plan-enforcement.ts` and update test imports
203+
204+
**Priority**: LOW
205+
206+
---
207+
208+
#### 6. SessionData Type Mismatches
209+
**Count**: 3 errors in analytics-api.test.ts
210+
211+
**Issue**: Mock SessionData objects missing required properties:
212+
- Missing: `email`, `createdAt`, `lastAccessedAt`
213+
214+
**Fix**: Add missing properties to test mocks:
215+
```typescript
216+
const mockSession: SessionData = {
217+
id: 'test-session',
218+
userId: 'test-user',
219+
storeId: 'test-store',
220+
role: 'STORE_ADMIN',
221+
email: 'test@example.com', // Add
222+
createdAt: new Date(), // Add
223+
lastAccessedAt: new Date(), // Add
224+
expiresAt: new Date(Date.now() + 3600000),
225+
};
226+
```
227+
228+
**Priority**: LOW
229+
230+
---
231+
232+
#### 7. Analytics Service Test Mock Issues
233+
**Count**: 30+ errors in `tests/unit/services/analytics-service.test.ts`
234+
235+
**Issue**: Test uses `.mockResolvedValue()` and `.mockResolvedValueOnce()` on Prisma methods, but TypeScript doesn't recognize these (Prisma types don't have Jest mock methods)
236+
237+
**Fix Required**:
238+
Update test mocking strategy - use `vi.mocked()` from Vitest or proper Prisma mocking library
239+
240+
**Priority**: LOW
241+
242+
---
243+
244+
#### 8. Email Service Test Type Issues
245+
**Count**: 8 errors in `tests/unit/services/email-service.test.ts`
246+
247+
**Issues**:
248+
- Cannot assign to `process.env.NODE_ENV` (read-only)
249+
- Mock User/Store objects missing required Prisma type properties
250+
251+
**Fix**:
252+
1. Use test environment variables instead of reassigning NODE_ENV
253+
2. Create proper test fixtures with all required Prisma model properties
254+
255+
**Priority**: LOW
256+
257+
---
258+
259+
### Warnings (Non-Blocking) ⚠️
260+
261+
#### Unused Imports/Variables
262+
**Count**: 20+ warnings across multiple files
263+
264+
**Examples**:
265+
- `React` imported but never used
266+
- `Link` imported but never used
267+
- `SessionService` imported but never used
268+
- `isLoading`, `storeEmail`, `receiver`, etc. declared but not used
269+
270+
**Fix**: Remove all unused imports and variables
271+
272+
**Priority**: LOW (cleanup)
273+
274+
---
275+
276+
## Recommended Fix Order
277+
278+
1. **Phase 1: Critical Compilation Blockers**
279+
- Fix E2E test Prisma schema mismatches (12 errors)
280+
- Create missing analytics API routes OR update tests (25+ errors)
281+
282+
2. **Phase 2: Service/Utility Modules**
283+
- Create missing utility modules (20+ errors)
284+
- Fix plan-enforcement exports (4 errors)
285+
286+
3. **Phase 3: Test Mocking Issues**
287+
- Fix Stripe session type mismatches (7 errors)
288+
- Fix SessionData in tests (3 errors)
289+
- Fix analytics-service.test.ts mocks (30+ errors)
290+
- Fix email-service.test.ts types (8 errors)
291+
292+
4. **Phase 4: Cleanup**
293+
- Remove all unused imports/variables (20+ warnings)
294+
295+
---
296+
297+
## Statistics
298+
299+
**Total Errors Found**: 146
300+
**Total Errors Fixed**: 24 errors across 8 files ✅
301+
**Total Errors Remaining**: 122
302+
303+
**Fixed Breakdown**:
304+
- Shop layout headers: 1 error
305+
- Email template duplicates: 2 errors
306+
- Store service types: 5 errors
307+
- Subscriptions API: 1 error
308+
- Analytics components: 3 errors
309+
- Top-products type: 1 error
310+
- E2E test Prisma schema: 16 errors
311+
312+
**Remaining Breakdown**:
313+
- **Critical (Severity 8)**: ~96 errors
314+
- **Warnings (Severity 4)**: ~26 unused declarations
315+
316+
**Files Affected**: 25+ files
317+
- Production code: 8 files (6 FIXED ✅)
318+
- Test files: 17+ files (1 FIXED ✅)
319+
320+
**Progress**: 16.4% complete (24 of 146 errors fixed)
321+
322+
---
323+
324+
## Next Steps
325+
326+
To complete the fixes, run:
327+
```bash
328+
# Check specific file errors
329+
npx tsc --noEmit <file-path>
330+
331+
# Fix E2E tests first (highest priority)
332+
npx tsc --noEmit tests/e2e/emails/order-confirmation.spec.ts
333+
334+
# Then fix test infrastructure
335+
npm run test -- --run
336+
337+
# Finally cleanup warnings
338+
npm run lint -- --fix
339+
```

0 commit comments

Comments
 (0)