ed8ac34542
TaxBaik CI/CD / build-and-deploy (push) Successful in 1m46s
V018 had PostgreSQL quote escaping issues with long content strings. V019 uses 1256 quoting to avoid escaping problems and cleanly inserts all 12 blog posts (5 updates + 7 new) with middle-school level language. Deletes V018, commits V019 as replacement.
60 lines
2.1 KiB
SQL
60 lines
2.1 KiB
SQL
-- V001 - Initial Schema for TaxBaik
|
|
|
|
CREATE TABLE categories (
|
|
id SERIAL PRIMARY KEY,
|
|
name VARCHAR(100) NOT NULL,
|
|
slug VARCHAR(100) NOT NULL UNIQUE,
|
|
sort_order INT NOT NULL DEFAULT 0
|
|
);
|
|
|
|
CREATE TABLE admin_users (
|
|
id SERIAL PRIMARY KEY,
|
|
username VARCHAR(100) NOT NULL UNIQUE,
|
|
password_hash VARCHAR(500) NOT NULL,
|
|
last_login_at TIMESTAMPTZ,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE TABLE blog_posts (
|
|
id SERIAL PRIMARY KEY,
|
|
title VARCHAR(300) NOT NULL,
|
|
content TEXT NOT NULL,
|
|
slug VARCHAR(300) NOT NULL UNIQUE,
|
|
category_id INT REFERENCES categories(id) ON DELETE SET NULL,
|
|
tags TEXT,
|
|
author_id INT REFERENCES admin_users(id) ON DELETE SET NULL,
|
|
published_at TIMESTAMPTZ,
|
|
view_count INT NOT NULL DEFAULT 0,
|
|
seo_title VARCHAR(300),
|
|
seo_description VARCHAR(500),
|
|
thumbnail_url VARCHAR(500),
|
|
is_published BOOLEAN NOT NULL DEFAULT FALSE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_blog_slug ON blog_posts(slug);
|
|
CREATE INDEX idx_blog_published ON blog_posts(is_published, published_at DESC);
|
|
CREATE INDEX idx_blog_category ON blog_posts(category_id);
|
|
|
|
CREATE TABLE inquiries (
|
|
id SERIAL PRIMARY KEY,
|
|
name VARCHAR(100) NOT NULL,
|
|
phone VARCHAR(20) NOT NULL,
|
|
email VARCHAR(200),
|
|
service_type VARCHAR(100) NOT NULL,
|
|
message TEXT NOT NULL,
|
|
status VARCHAR(50) NOT NULL DEFAULT 'new',
|
|
ip_address VARCHAR(50),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_inquiry_status ON inquiries(status);
|
|
CREATE INDEX idx_inquiry_created ON inquiries(created_at DESC);
|
|
|
|
CREATE TABLE site_settings (
|
|
key VARCHAR(200) PRIMARY KEY,
|
|
value TEXT NOT NULL,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|