dev #105
Reference in New Issue
Block a user
Delete Branch "dev"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Lands the user-facing half of the unsubscribe preferences work. The one-click endpoint already shipped in this PR's main commit; this adds the proactive self-service path at /dashboard/settings?tab=notifications so users don't have to wait for a mail to land before tuning their preferences. Backend ------- New EmailPreferencesController at /api/email/preferences: GET → returns one row per OPTIONAL_WORKFLOWS entry, each with current optedOut boolean (false when no DB row exists). POST → body {workflow, optedOut} flips the row; source='settings_page' captured for the audit trail. Auth+payment workflows are deliberately not exposed — the server's OPTIONAL_WORKFLOWS set stays the single source of truth. Frontend -------- Adds a 'notifications' tab to /dashboard/settings (between 'preferences' and 'security'). One toggle row per optional workflow with TR copy that explains what each mail is for. Optimistic update — switch flips instantly and reverts on failure; PostHog event captures accept/reject. Static footer note clarifies that auth + payment mail keeps coming regardless of the switches above (so users don't think they've unsubscribed from password-reset). i18n ---- Added settings.tabs.notifications + settings.notifications.{title, description} to both tr.json and en.json. Body copy is hard-coded TR (matches audit §9.3 #11 TR-only decision). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>Fiat (fiatp_parts/fiatt_parts) was misconfigured as LEGACY_FIAT basePath /fca, which 404s on every request — PL24 Fiat decode was dead. Live discovery (de-708171) shows Fiat is a standard P5 Modern catalog at /p5fiat: directAccess + maingroups/subgroups/parts/images all match the existing P5 flow. Only the vinfoBasic record shape differs ({key,description} vs {values:{description,value}}). - types: fiatp_parts/fiatt_parts -> P5_MODERN, apiPath/basePath /p5fiat - parseVehicleResponse: parse the p5fiat vinfoBasic shape; friendly model from "Model bilgisi"; year from MY / production date Covers European (ZFA) Fiats + some commercial Tofas (fiatt). Turkish Tofas passenger VINs (NM4, incl. Egea) are not in this catalog. de account separation (resolveAccount Rule 1) unchanged; de auth handshake proxied, catalog data not. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>The Fiat vinfoBasic record carries the row under `values` like p5vwag, but the inner field names are swapped: p5fiat uses values.key=<label>, values.description=<value> (vwag uses values.description=<label>, values.value=<value>). The first pass read values.description as the label, so model fell back to the numeric description code ("319") and year to 0. Detect the shape via values.key. Live-verified: ZFA Panda→"Panda POP 1.2 8V 69CV 5M E6" /2014, Grande Punto/2009, 500L/2015. Spec fixture corrected to the real shape. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>