FloorVisualizer/schema.sql
dindang 1524a3215c feat(floor): 优化地板样式数据结构和AI换地板功能
- 添加 FloorOption 结构体字段支持尺寸、描述和变体信息
- 优化 loadFloorOptions 函数,实现按品牌和花色名称去重并附带多尺寸变体
- 区分木材、瓷砖、乙烯基和层压板产品,并分类返回
- 更新室内铺装纹理选项,完善图案描述和名称本地化
- 丰富Floor Options API响应数据,包含尺寸、变体、描述等字段
- 增强AI换地板功能,支持尺寸变体SKU,自动调整物理尺寸比例
- 完善地板替换的AI提示词,增加材质锁定、尺寸说明和纹理一致性要求
- 改进地板识别蒙版生成逻辑,确保精准分割地板区域
- Redis任务状态查询接口增加耗时统计字段,提供更细粒度进度信息
- 更新go.mod依赖,新增redis和gorm相关包支持
2026-07-27 16:11:15 +08:00

99 lines
3.5 KiB
SQL

-- 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 '',
is_official_price BOOLEAN DEFAULT false,
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);