This commit is contained in:
CFOU
2026-09-14 20:50:19 +02:00
commit 3091fb4020
135 changed files with 10262 additions and 0 deletions
@@ -0,0 +1 @@
DROP TABLE IF EXISTS users;
@@ -0,0 +1,11 @@
CREATE EXTENSION IF NOT EXISTS pgcrypto;
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email TEXT UNIQUE NOT NULL,
password_hash TEXT NOT NULL,
role TEXT NOT NULL DEFAULT 'admin' CHECK (role IN ('admin', 'customer')),
is_active BOOLEAN NOT NULL DEFAULT true,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
@@ -0,0 +1 @@
DROP TABLE IF EXISTS site_settings;
@@ -0,0 +1,10 @@
CREATE TABLE site_settings (
id SMALLINT PRIMARY KEY DEFAULT 1 CHECK (id = 1),
name TEXT NOT NULL DEFAULT '',
description TEXT NOT NULL DEFAULT '',
slug TEXT NOT NULL DEFAULT '',
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
INSERT INTO site_settings (id) VALUES (1);
@@ -0,0 +1 @@
DROP TABLE IF EXISTS categories;
@@ -0,0 +1,10 @@
CREATE TABLE categories (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL,
slug TEXT UNIQUE NOT NULL,
description TEXT NOT NULL DEFAULT '',
position INT NOT NULL DEFAULT 0,
is_active BOOLEAN NOT NULL DEFAULT true,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
@@ -0,0 +1 @@
DROP TABLE IF EXISTS units;
@@ -0,0 +1,7 @@
CREATE TABLE units (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL,
symbol TEXT UNIQUE NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
@@ -0,0 +1 @@
DROP TABLE IF EXISTS media;
@@ -0,0 +1,11 @@
CREATE TABLE media (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
filename TEXT NOT NULL,
storage_key TEXT NOT NULL,
url TEXT NOT NULL,
mime_type TEXT NOT NULL,
size_bytes BIGINT NOT NULL,
alt_text TEXT NOT NULL DEFAULT '',
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
@@ -0,0 +1 @@
DROP TABLE IF EXISTS products;
@@ -0,0 +1,15 @@
CREATE TABLE products (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
category_id UUID REFERENCES categories(id) ON DELETE SET NULL,
name TEXT NOT NULL,
slug TEXT UNIQUE NOT NULL,
short_description TEXT NOT NULL DEFAULT '',
description TEXT NOT NULL DEFAULT '',
is_active BOOLEAN NOT NULL DEFAULT true,
is_featured BOOLEAN NOT NULL DEFAULT false,
primary_media_id UUID REFERENCES media(id) ON DELETE SET NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX idx_products_category_id ON products(category_id);
@@ -0,0 +1 @@
DROP TABLE IF EXISTS product_media;
@@ -0,0 +1,10 @@
CREATE TABLE product_media (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
product_id UUID NOT NULL REFERENCES products(id) ON DELETE CASCADE,
media_id UUID NOT NULL REFERENCES media(id) ON DELETE CASCADE,
position INT NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
UNIQUE (product_id, media_id)
);
CREATE INDEX idx_product_media_product_id ON product_media(product_id);
@@ -0,0 +1 @@
DROP TABLE IF EXISTS price_tiers;
@@ -0,0 +1,12 @@
CREATE TABLE price_tiers (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
product_id UUID NOT NULL REFERENCES products(id) ON DELETE CASCADE,
unit_id UUID NOT NULL REFERENCES units(id) ON DELETE RESTRICT,
quantity NUMERIC(14, 3) NOT NULL CHECK (quantity > 0),
price_cents BIGINT NOT NULL CHECK (price_cents >= 0),
position INT NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX idx_price_tiers_product_id ON price_tiers(product_id);
@@ -0,0 +1 @@
DROP TABLE IF EXISTS telegram_settings;
@@ -0,0 +1,12 @@
CREATE TABLE telegram_settings (
id SMALLINT PRIMARY KEY DEFAULT 1 CHECK (id = 1),
enabled BOOLEAN NOT NULL DEFAULT false,
bot_token TEXT NOT NULL DEFAULT '',
chat_id TEXT NOT NULL DEFAULT '',
notify_new_order BOOLEAN NOT NULL DEFAULT true,
notify_status_change BOOLEAN NOT NULL DEFAULT false,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
INSERT INTO telegram_settings (id) VALUES (1);
@@ -0,0 +1,2 @@
DROP TABLE IF EXISTS order_items;
DROP TABLE IF EXISTS orders;
@@ -0,0 +1,27 @@
CREATE TABLE orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
customer_name TEXT NOT NULL,
customer_email TEXT NOT NULL,
customer_phone TEXT NOT NULL DEFAULT '',
status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending', 'confirmed', 'preparing', 'shipped', 'completed', 'cancelled')),
total_cents BIGINT NOT NULL DEFAULT 0,
notes TEXT NOT NULL DEFAULT '',
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE order_items (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
order_id UUID NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
product_id UUID REFERENCES products(id) ON DELETE SET NULL,
product_name TEXT NOT NULL,
price_tier_id UUID REFERENCES price_tiers(id) ON DELETE SET NULL,
unit_symbol TEXT NOT NULL,
tier_quantity NUMERIC(14, 3) NOT NULL,
multiplier BIGINT NOT NULL DEFAULT 1,
unit_price_cents BIGINT NOT NULL,
total_cents BIGINT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX idx_order_items_order_id ON order_items(order_id);
@@ -0,0 +1 @@
ALTER TABLE products DROP COLUMN IF EXISTS position;
@@ -0,0 +1,3 @@
ALTER TABLE products ADD COLUMN position INT NOT NULL DEFAULT 0;
CREATE INDEX idx_products_position ON products(position);