Files
vmall/apps/api/migrations/0002_identity.sql
T

29 lines
911 B
SQL

CREATE TYPE user_role AS ENUM ('platform_admin', 'shop_owner', 'shop_staff', 'customer');
CREATE TYPE shop_status AS ENUM ('active', 'suspended');
CREATE TABLE shops (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name JSONB NOT NULL,
slug TEXT NOT NULL UNIQUE,
status shop_status NOT NULL DEFAULT 'active',
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email TEXT NOT NULL UNIQUE,
password_hash TEXT NOT NULL,
display_name TEXT NOT NULL,
role user_role NOT NULL DEFAULT 'customer',
shop_id UUID REFERENCES shops (id),
locale TEXT NOT NULL DEFAULT 'en',
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
CONSTRAINT shop_role_requires_shop CHECK (
role IN ('customer', 'platform_admin')
OR shop_id IS NOT NULL
)
);
CREATE INDEX idx_users_shop ON users (shop_id);