5da1c3a12f
Split out of #801 so the public-API behavior change gets its own review: - v1 POST /events validates event_type against the live event_types catalog instead of the hardcoded whitelist — custom types created in Settings → Event Types were rejected with 400. BREAKING for the never-seeded 'family' slug, which the old whitelist silently accepted and wrote as a dangling reference; create a matching event type to keep using it - new GET /api/v1/event-types (read scope) so API-token clients can discover valid slugs; OpenAPI enum replaced accordingly - standalone contract→event conversion no longer hardcodes event_type: 'wedding' — it resolves via crm_default_event_type, then the catalog catch-all, same chain as quote→event conversion - resolveDefaultEventType moved from quoteService to eventTypeService for shared use (no behavior change)