hotfix-add subgroup customer
This commit is contained in:
79
docs/implementation/hotfix-1-customer-sub-group.md
Normal file
79
docs/implementation/hotfix-1-customer-sub-group.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# Hotfix 1: Customer Sub Group
|
||||
|
||||
## 1. Files Added
|
||||
|
||||
- `drizzle/0011_brief_hobgoblin.sql`
|
||||
- `docs/implementation/hotfix-1-customer-sub-group.md`
|
||||
|
||||
## 2. Files Modified
|
||||
|
||||
- `src/db/schema.ts`
|
||||
- `src/db/seeds/foundation.seed.ts`
|
||||
- `src/features/crm/customers/api/types.ts`
|
||||
- `src/features/crm/customers/schemas/customer.schema.ts`
|
||||
- `src/features/crm/customers/server/service.ts`
|
||||
- `src/app/api/crm/customers/route.ts`
|
||||
- `src/app/api/crm/customers/[id]/route.ts`
|
||||
- `src/components/forms/fields/select-field.tsx`
|
||||
- `src/features/crm/customers/components/customer-form-sheet.tsx`
|
||||
- `src/features/crm/customers/components/customer-columns.tsx`
|
||||
- `src/features/crm/customers/components/customer-detail.tsx`
|
||||
|
||||
## 3. Schema Field Used/Added
|
||||
|
||||
- Added optional field `customerSubGroup` to `crm_customers`
|
||||
- Field is stored with the same option-id pattern already used by `customerGroup`
|
||||
|
||||
## 4. Master Options Seeded
|
||||
|
||||
- `crm_customer_group`
|
||||
- `industrial`
|
||||
- `construction`
|
||||
- `government`
|
||||
- `dealer`
|
||||
- `other`
|
||||
- `crm_customer_sub_group`
|
||||
- `factory`
|
||||
- `warehouse`
|
||||
- `logistics`
|
||||
- `contractor`
|
||||
- `consultant`
|
||||
- `state_enterprise`
|
||||
- `government_agency`
|
||||
- `reseller`
|
||||
- `other`
|
||||
|
||||
Child options resolve and store `parentId` from the seeded `crm_customer_group` rows during idempotent seed execution.
|
||||
|
||||
## 5. Form Behavior Added
|
||||
|
||||
- Add/Edit Customer now includes `Customer Sub Group`
|
||||
- Sub group is disabled until a customer group is selected
|
||||
- Edit mode loads the saved group and sub group
|
||||
- Submit payload now persists `customerSubGroup`
|
||||
|
||||
## 6. Parent/Child Filtering Behavior
|
||||
|
||||
- Customer sub group options are filtered by `parentId === selectedCustomerGroup`
|
||||
- Changing group clears the sub group when the selected child no longer belongs to the new parent
|
||||
- Placeholder shows `Select customer group first` until a parent group is chosen
|
||||
|
||||
## 7. Validation Added
|
||||
|
||||
- API schemas now accept `customerSubGroup`
|
||||
- Server validation checks that:
|
||||
- the selected sub group exists in `crm_customer_sub_group`
|
||||
- a sub group cannot be submitted without a group
|
||||
- the selected sub group belongs to the selected group parent
|
||||
- Invalid parent/child combinations return a user-safe `400` error
|
||||
|
||||
## 8. Verification Result
|
||||
|
||||
- `npx tsc --noEmit` passed
|
||||
- CRUD wiring, list/detail output, and form filtering compile successfully
|
||||
|
||||
## 9. Remaining Risks
|
||||
|
||||
- Database migration `drizzle/0011_brief_hobgoblin.sql` still needs to be applied in the target environment
|
||||
- Seed changes were updated in code, but I did not run a live seed against the database in this session
|
||||
- Existing customer rows will keep `customerSubGroup = null` until edited or backfilled
|
||||
Reference in New Issue
Block a user