FloorVisualizer/schema.sql

98 lines
3.4 KiB
MySQL
Raw Normal View History

-- FloorVisualizer Database Schema
-- Generated from PostgreSQL
-- Users
CREATE TABLE IF NOT EXISTS users (
id TEXT PRIMARY KEY,
username TEXT NOT NULL UNIQUE,
password TEXT NOT NULL DEFAULT '',
name TEXT NOT NULL DEFAULT '',
avatar_url TEXT NOT NULL DEFAULT '',
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
-- Products
CREATE TABLE IF NOT EXISTS products (
id SERIAL PRIMARY KEY,
brand TEXT DEFAULT '',
group_name TEXT DEFAULT '',
sku TEXT DEFAULT '',
series_name TEXT DEFAULT '',
style_name TEXT DEFAULT '',
category TEXT DEFAULT '',
material TEXT DEFAULT '',
color_tone TEXT DEFAULT '',
finish TEXT DEFAULT '',
price_per_sqft NUMERIC(10,2) DEFAULT 0,
price_tier TEXT DEFAULT '',
price_source TEXT DEFAULT '',
main_image_url TEXT DEFAULT '',
room_image_url TEXT DEFAULT '',
source_url TEXT DEFAULT '',
description TEXT DEFAULT '',
status TEXT DEFAULT '',
coverage_sqft_per_box NUMERIC(10,2) DEFAULT 0,
wood_species TEXT DEFAULT '',
size_label TEXT DEFAULT '',
width_in NUMERIC(10,2),
length_in NUMERIC(10,2)
);
CREATE INDEX IF NOT EXISTS idx_p_sku ON products(sku);
CREATE INDEX IF NOT EXISTS idx_p_cat ON products(category);
CREATE INDEX IF NOT EXISTS idx_p_brand ON products(brand);
CREATE INDEX IF NOT EXISTS idx_p_style ON products(style_name);
-- Articles
CREATE TABLE IF NOT EXISTS articles (
id SERIAL PRIMARY KEY,
title TEXT NOT NULL DEFAULT '',
summary TEXT NOT NULL DEFAULT '',
content TEXT NOT NULL DEFAULT '',
cover_url TEXT NOT NULL DEFAULT '',
image_urls JSONB NOT NULL DEFAULT '[]',
created_at TIMESTAMPTZ DEFAULT now()
);
-- Favorites
CREATE TABLE IF NOT EXISTS favorites (
id SERIAL PRIMARY KEY,
user_id TEXT NOT NULL,
sku TEXT NOT NULL,
brand TEXT DEFAULT '',
series_name TEXT DEFAULT '',
style_name TEXT DEFAULT '',
main_image_url TEXT DEFAULT '',
category TEXT DEFAULT '',
material TEXT DEFAULT '',
color_tone TEXT DEFAULT '',
price_per_sqft NUMERIC(10,2) DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT now(),
UNIQUE(user_id, sku)
);
CREATE INDEX IF NOT EXISTS idx_fav_user ON favorites(user_id);
-- Projects
CREATE TABLE IF NOT EXISTS projects (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
name TEXT NOT NULL DEFAULT 'Untitled',
original_image_url TEXT DEFAULT '',
generated_image_url TEXT DEFAULT '',
floor_style TEXT DEFAULT '',
pattern TEXT DEFAULT '',
room_type TEXT DEFAULT '',
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
-- Brand Views
CREATE TABLE IF NOT EXISTS user_brand_views (
id SERIAL PRIMARY KEY,
user_id TEXT NOT NULL,
brand TEXT NOT NULL,
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_ubv_user ON user_brand_views(user_id, brand);
CREATE INDEX IF NOT EXISTS idx_ubv_time ON user_brand_views(user_id, created_at);