3.8 KiB
3.8 KiB
Body Dimensions Transition Plan (Stakeholder Draft)
Goal
Prevent edit-form failures for existing bookings while we transition from legacy body-dimension values to a better long-term field model.
This plan introduces a temporary compatibility phase and keeps sunsetting manual and straightforward.
Current Problem
- Existing bookings may contain legacy values such as
-148,149-157, or195+. - Integer-only form fields can fail when these legacy strings are loaded.
- Result: participant edit forms can crash before submit.
Proposed Transition Strategy
Use text input fields for body dimensions during transition, with explicit server-side format validation.
Key Decisions
- No gating by booking create date.
- One unified behavior for all bookings.
- Accept both legacy and numeric formats during transition.
- Keep manual sunsetting later (no automated migration switch).
Functional Scope
Affected fields:
heightweightshoeSize
Affected components:
src/Form/BodyDimensionsType.phpsrc/Validator/Constraints/ParticipantValidator.phpsrc/Form/BookingParticipantType.php(option passthrough already in place)config/services.yaml(ranges remain as validation/config source)
Validation Rules During Transition
Accepted formats
- Numeric value:
^\d+$(e.g.176) - Legacy lower/open/range tokens:
^-\d+$(e.g.-148)^\d+\+$(e.g.195+)^\d+\s*-\s*\d+$(e.g.149-157)
Requiredness
- Keep existing rule: body dimensions required when rentals are selected.
Range checks
- Keep current numeric range checks based on
body_dimension_ranges. - Apply range checks only to plain numeric values in transition phase.
UX/Behavior Expectations
- Existing legacy values render without form initialization errors.
- New numeric entries are accepted and validated.
- Invalid free text (e.g.
abc,17x) shows clear validation errors. - HTMX refresh behavior remains unchanged.
Implementation Steps
-
Form type change
- In
BodyDimensionsType, replace integer fields with text fields for all three body dimensions. - Keep labels/help text; keep placeholders based on configured ranges.
- In
-
Validator extension
- Add format validation for all three fields in
ParticipantValidator. - Keep existing required-when-rentals logic.
- Keep existing range validation for numeric values.
- Add format validation for all three fields in
-
Message tuning
- Add one clear message for invalid format.
- Retain existing range message for numeric out-of-range values.
-
Testing and QA
- Validate old bookings with legacy values open/edit successfully.
- Validate numeric path (valid and invalid range).
- Validate invalid format handling.
- Validate rental-required behavior.
Acceptance Criteria
- No 500 error when editing participants with legacy body-dimension values.
- Legacy values can be loaded and submitted in transition phase.
- Numeric values are accepted and range-validated.
- Invalid text is rejected with a user-facing validation message.
- Existing participant edit/refresh flows continue to work.
Risks and Mitigations
-
Risk: Free-text field semantics are less strict than integer fields.
- Mitigation: strict server-side regex + range checks.
-
Risk: Inconsistent data representations during transition.
- Mitigation: explicit acceptance policy and manual sunset plan.
Effort Estimate
- Implementation: 0.5 day
- Validation/message tuning: 0.25 day
- QA/manual testing: 0.5 day
- Total: ~1 to 1.5 days
Manual Sunset Plan (Later)
When stakeholders approve end of transition:
- Replace text fields with final semantic field type(s).
- Remove legacy format acceptance from validator.
- Keep only final numeric/range validation behavior.
- Remove transition-specific tests and copy.
Expected cleanup effort: ~0.25 to 0.5 day.