Záznamy párované jen podle ID — host/legacy data neviditelná
import { Aside } from ‘@astrojs/starlight/components’;
Symptom
Sekce “Symptom”Přihlášený zákazník nevidí ve „svých objednávkách” nic — ani dnešní objednávku, ani historii. Přitom objednávky v DB existují a mají jeho e-mail.
Root cause
Sekce “Root cause”Dotaz párovat objednávky jen podle účtu:
.from('orders').select('*').eq('customer_id', user.id)Host (nepřihlášený) checkout ukládá customer_id = NULL a jen customer_email. Navíc e-mail bývá v jiné velikosti písmen (JIRIPUSMAN@… vs jiripusman@…), takže i exact-match by selhal. Výsledek: objednávky existují, ale na účet se nenapárují.
Fix
Sekce “Fix”Párovat podle ID nebo emailu (case-insensitive):
const email = (user.email || '').trim();ordersQuery.or(`customer_id.eq.${user.id},customer_email.ilike.${email}`);Plus jednorázový backfill — dolinkovat osiřelé záznamy na účty podle emailu:
UPDATE orders o SET customer_id = p.idFROM profiles pWHERE o.customer_id IS NULL AND lower(o.customer_email) = lower(p.email);Jak se tomu vyvarovat v jiných systémech
Sekce “Jak se tomu vyvarovat v jiných systémech”- Detection: najdi dotazy „moje X” filtrující jen
*_id = user.id. Zeptej se: co host/legacy záznamy bez ID? Co různá velikost emailu? - Anti-pattern: identita uživatele rozhozená mezi
account_idaemailbez sjednocení; exact-match na email (case-sensitive). - Lepší přístup: (1) emaily ukládat normalizovaně (lower) NEBO vždy porovnávat case-insensitive; (2) při přihlášení/registraci zpětně linkovat host záznamy přes email; (3) při vytváření vždy nastavit account_id pro přihlášené.