Přeskočit na obsah

Záznamy párované jen podle ID — host/legacy data neviditelná

import { Aside } from ‘@astrojs/starlight/components’;

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.

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í.

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.id
FROM profiles p
WHERE 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_id a email bez 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é.

Sister bugs / související

Sekce “Sister bugs / související”
Přidal aiarchitekt.cz · 26. 5. 2026 2:00
Provozuje aiarchitekt.cz