feat(b3-1): interest dimensions dual-source — yacht dims for the recommender
Per docs/superpowers/audits/alpha-uat-master.md Bucket 3 #1. When a yacht is linked to the interest the rep can flip a per-interest toggle so the berth recommender reads dimensions off the yacht record instead of the rep-entered desired_* columns. - Migration 0087 + interests.useYachtDimensions boolean (default false). - Validator (createInterestSchema) accepts the new field; service insert + update paths spread it through automatically. - berth-recommender.service.loadInterestInput dual-source resolution: when toggle=true AND yachtId is set AND the yacht has at least one measurement on file, the recommender uses the yacht's length / width / draft instead of the desired_* values. Falls back to the desired columns whenever any precondition fails (no yacht link, toggle off, or the yacht carries no measurements). Returned InterestInput gains a `dimensionsSource: 'interest' | 'yacht'` trace field. - Interest form: under the "Berth size desired" section, when a yacht is linked, a checkbox surfaces — "Use the linked yacht's dimensions for the recommender". When checked, the three dimension inputs grey out (DimensionInput gains a `disabled` prop) so the rep can't accidentally edit the now-overridden values. Hint text spells out the fallback behaviour. Verified: tsc clean, 1493/1493 vitest, migration applied. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
11
src/lib/db/migrations/0087_interest_use_yacht_dims.sql
Normal file
11
src/lib/db/migrations/0087_interest_use_yacht_dims.sql
Normal file
@@ -0,0 +1,11 @@
|
||||
-- 0087_interest_use_yacht_dims.sql
|
||||
-- Adds a per-interest toggle so the berth recommender can read the
|
||||
-- linked yacht's dimensions instead of the rep-entered `desired_*`
|
||||
-- values. Defaults to false so existing data continues to use the
|
||||
-- desired-dims path the recommender has always used.
|
||||
--
|
||||
-- Per docs/superpowers/audits/alpha-uat-master.md Bucket 3 #1:
|
||||
-- "Interest dimensions: dual-source model".
|
||||
|
||||
ALTER TABLE interests
|
||||
ADD COLUMN IF NOT EXISTS use_yacht_dimensions boolean NOT NULL DEFAULT false;
|
||||
@@ -102,6 +102,12 @@ export const interests = pgTable(
|
||||
desiredLengthUnit: text('desired_length_unit').notNull().default('ft'),
|
||||
desiredWidthUnit: text('desired_width_unit').notNull().default('ft'),
|
||||
desiredDraftUnit: text('desired_draft_unit').notNull().default('ft'),
|
||||
/** Per-interest source-of-truth toggle for the berth recommender.
|
||||
* When true AND a yacht is linked, the recommender uses the yacht's
|
||||
* length/width/draft instead of the rep-entered desired_* columns
|
||||
* on this row. Defaults false so existing data continues to use the
|
||||
* desired-dims path. Migration 0087. */
|
||||
useYachtDimensions: boolean('use_yacht_dimensions').notNull().default(false),
|
||||
archivedAt: timestamp('archived_at', { withTimezone: true }),
|
||||
createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
|
||||
updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
|
||||
|
||||
Reference in New Issue
Block a user