Problem
`main.py:126-134` — `EnrollRequest` accepts arbitrary strings for `frequency`, `tone`, `depth`, `timezone`:
- Bad timezone (e.g., "not_a_tz") → crash in pytz
- Bad frequency (e.g., "99x") → no email slots generated, silent failure
- `EmailStr` is imported but unused — email validation is just `"@" in email` (line 401)
Solution
- Use Pydantic `Literal` or `Enum` types for frequency, tone, depth
- Validate timezone against `pytz.all_timezones`
- Use `EmailStr` for email fields
- Add `@validator` for active_days (must be valid day abbreviations)
Files
- `main.py` — `EnrollRequest` model (lines 126-134), OTP models
Acceptance Criteria
Problem
`main.py:126-134` — `EnrollRequest` accepts arbitrary strings for `frequency`, `tone`, `depth`, `timezone`:
Solution
Files
Acceptance Criteria