File size: 2,219 Bytes
f368481 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | -- Snapshot schema cho docker-entrypoint-initdb (chạy lần đầu khi tạo volume DB).
-- App cũng gọi Base.metadata.create_all() lúc khởi động nên đây chủ yếu là tham
-- chiếu + tạo sẵn database 'keycloak' (Phase 5 dùng chung Postgres này).
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
is_deleted BOOLEAN NOT NULL DEFAULT false,
created_at TIMESTAMP NOT NULL DEFAULT now(),
updated_at TIMESTAMP,
email VARCHAR(255) NOT NULL UNIQUE,
password_hash VARCHAR(255),
display_name VARCHAR(100),
role VARCHAR(16) NOT NULL DEFAULT 'user',
is_active BOOLEAN NOT NULL DEFAULT true
);
CREATE TABLE IF NOT EXISTS conversations (
id SERIAL PRIMARY KEY,
is_deleted BOOLEAN NOT NULL DEFAULT false,
created_at TIMESTAMP NOT NULL DEFAULT now(),
updated_at TIMESTAMP,
user_id INTEGER REFERENCES users (id),
title VARCHAR(255),
model VARCHAR(32)
);
CREATE INDEX IF NOT EXISTS conversations_user_idx
ON conversations (user_id) WHERE is_deleted = false;
CREATE TABLE IF NOT EXISTS messages (
id SERIAL PRIMARY KEY,
is_deleted BOOLEAN NOT NULL DEFAULT false,
created_at TIMESTAMP NOT NULL DEFAULT now(),
conversation_id INTEGER NOT NULL REFERENCES conversations (id),
role VARCHAR(32) NOT NULL,
blocks JSONB NOT NULL
);
CREATE INDEX IF NOT EXISTS messages_conversation_idx ON messages (conversation_id);
CREATE TABLE IF NOT EXISTS artifacts (
id SERIAL PRIMARY KEY,
is_deleted BOOLEAN NOT NULL DEFAULT false,
created_at TIMESTAMP NOT NULL DEFAULT now(),
conversation_id INTEGER REFERENCES conversations (id),
type VARCHAR(20) NOT NULL,
title VARCHAR(255),
local_path VARCHAR(512),
preview JSONB
);
CREATE INDEX IF NOT EXISTS artifacts_conversation_idx
ON artifacts (conversation_id) WHERE is_deleted = false;
-- Database riêng cho Keycloak (Phase 5) — bỏ qua lỗi nếu đã tồn tại.
SELECT 'CREATE DATABASE keycloak'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'keycloak')\gexec
|