Files
backend/database/migrations/014_addresses.sql
T
Ali Reza bb59d5e9ba Initial commit: Meshkee CMS API
NestJS backend with Prisma, Docker Compose for Postgres/Redis, and deploy docs for the production VM.
2026-07-21 17:52:36 +03:30

39 lines
1.6 KiB
SQL

-- Meshkee CMS — addresses owned by exactly one user or business
CREATE TABLE addresses (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
user_id BIGINT,
business_id BIGINT,
province VARCHAR(100) NOT NULL,
city VARCHAR(100) NOT NULL,
address TEXT NOT NULL,
postal_code VARCHAR(20) NOT NULL,
landline VARCHAR(30),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CONSTRAINT addresses_user_id_fkey
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE,
CONSTRAINT addresses_business_id_fkey
FOREIGN KEY (business_id) REFERENCES businesses (id) ON DELETE CASCADE,
CONSTRAINT addresses_exactly_one_owner CHECK (
(user_id IS NOT NULL AND business_id IS NULL)
OR (user_id IS NULL AND business_id IS NOT NULL)
),
CONSTRAINT addresses_province_nonempty CHECK (char_length(trim(province)) > 0),
CONSTRAINT addresses_city_nonempty CHECK (char_length(trim(city)) > 0),
CONSTRAINT addresses_address_nonempty CHECK (char_length(trim(address)) > 0),
CONSTRAINT addresses_postal_code_nonempty CHECK (char_length(trim(postal_code)) > 0),
CONSTRAINT addresses_landline_nonempty_optional CHECK (
landline IS NULL OR char_length(trim(landline)) > 0
)
);
CREATE INDEX idx_addresses_user_id ON addresses (user_id) WHERE user_id IS NOT NULL;
CREATE INDEX idx_addresses_business_id ON addresses (business_id) WHERE business_id IS NOT NULL;
CREATE TRIGGER addresses_set_updated_at
BEFORE UPDATE ON addresses
FOR EACH ROW
EXECUTE FUNCTION set_updated_at();