Files
vmall/apps/api/migrations/0009_addresses.sql
T
Chengdong ZhangandCursor 5e866d08f4 refactor(api): split Axum handlers into handler/service/repo modules
Keep the REST contract; move domain logic out of route files so checkout, fulfillment, and identity can be reused across customer, shop, and admin surfaces.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 14:59:36 +08:00

23 lines
847 B
SQL

-- Address book: per-customer saved shipping addresses with a single default.
-- The default invariant is enforced by the partial unique index; handlers keep
-- it via transactional unset-then-set.
CREATE TABLE addresses (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users (id) ON DELETE CASCADE,
recipient TEXT NOT NULL,
phone TEXT NOT NULL,
country TEXT NOT NULL,
region TEXT NOT NULL DEFAULT '',
city TEXT NOT NULL,
line1 TEXT NOT NULL,
postal_code TEXT NOT NULL DEFAULT '',
is_default BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX addresses_user_idx ON addresses (user_id);
CREATE UNIQUE INDEX addresses_one_default_idx ON addresses (user_id) WHERE is_default;