From 367fc9800eaf16b75dfa9b7aac6d5782c188836f Mon Sep 17 00:00:00 2001 From: Matt Ciaccio Date: Fri, 24 Apr 2026 14:25:10 +0200 Subject: [PATCH] refactor(clients): strip yacht/company/proxy fields from validator Remove deprecated companyName, isProxy, proxyType, actualOwnerName, yacht dimensions, and berthSizeDesired fields from createClientSchema and the isProxy filter from listClientsSchema. First step of PR 8; cascading TS errors in clients.service.ts and client-form.tsx are addressed in 8.2/8.3. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/lib/validators/clients.ts | 20 +++----------------- tests/unit/validators.test.ts | 9 ++++++++- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/src/lib/validators/clients.ts b/src/lib/validators/clients.ts index 22a7341..2b81ef2 100644 --- a/src/lib/validators/clients.ts +++ b/src/lib/validators/clients.ts @@ -17,19 +17,7 @@ export const contactSchema = z.object({ export const createClientSchema = z.object({ fullName: z.string().min(1).max(200), contacts: z.array(contactSchema).min(1, 'At least one contact is required'), - companyName: z.string().optional(), nationality: z.string().optional(), - isProxy: z.boolean().optional().default(false), - proxyType: z.string().optional(), - actualOwnerName: z.string().optional(), - yachtName: z.string().optional(), - yachtLengthFt: z.string().optional(), - yachtWidthFt: z.string().optional(), - yachtDraftFt: z.string().optional(), - yachtLengthM: z.string().optional(), - yachtWidthM: z.string().optional(), - yachtDraftM: z.string().optional(), - berthSizeDesired: z.string().optional(), preferredContactMethod: z.enum(['email', 'phone', 'whatsapp']).optional(), preferredLanguage: z.string().optional(), timezone: z.string().optional(), @@ -40,17 +28,15 @@ export const createClientSchema = z.object({ // ─── Update ────────────────────────────────────────────────────────────────── -export const updateClientSchema = createClientSchema.omit({ contacts: true, tagIds: true }).partial(); +export const updateClientSchema = createClientSchema + .omit({ contacts: true, tagIds: true }) + .partial(); // ─── List ───────────────────────────────────────────────────────────────────── export const listClientsSchema = baseListQuerySchema.extend({ source: z.enum(['website', 'manual', 'referral', 'broker']).optional(), nationality: z.string().optional(), - isProxy: z - .string() - .transform((v) => v === 'true') - .optional(), tagIds: z .string() .transform((v) => v.split(',').filter(Boolean)) diff --git a/tests/unit/validators.test.ts b/tests/unit/validators.test.ts index 9a60899..370abbf 100644 --- a/tests/unit/validators.test.ts +++ b/tests/unit/validators.test.ts @@ -62,12 +62,19 @@ describe('createClientSchema', () => { it('accepts optional fields', () => { const result = createClientSchema.safeParse({ ...validClient, - companyName: 'ACME', nationality: 'AU', source: 'manual' as const, }); expect(result.success).toBe(true); }); + + it('accepts minimal valid input (no deprecated yacht/company fields)', () => { + const result = createClientSchema.safeParse({ + fullName: 'Alice', + contacts: [{ channel: 'email', value: 'a@example.com' }], + }); + expect(result.success).toBe(true); + }); }); describe('updateClientSchema (partial)', () => {