chore: initial database schema
This commit is contained in:
commit
44356cac33
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
node_modules
|
||||
dist
|
||||
.wrangler
|
||||
.env
|
||||
.next
|
||||
68
database/01_init.sql
Normal file
68
database/01_init.sql
Normal file
@ -0,0 +1,68 @@
|
||||
CREATE TABLE IF NOT EXISTS posts (
|
||||
id TEXT PRIMARY KEY,
|
||||
anonymous_user_id TEXT NOT NULL,
|
||||
content_type TEXT NOT NULL CHECK(content_type IN ('text', 'voice', 'photo')),
|
||||
content_data TEXT NOT NULL,
|
||||
emotion_tag TEXT NOT NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
||||
expires_at DATETIME NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_posts_anonymous_user_id ON posts (anonymous_user_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_posts_expires_at ON posts (expires_at);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS holds (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
post_id TEXT NOT NULL,
|
||||
anonymous_user_id TEXT NOT NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
||||
FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE,
|
||||
UNIQUE(post_id, anonymous_user_id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS reports (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
post_id TEXT NOT NULL,
|
||||
reporter_anonymous_user_id TEXT NOT NULL,
|
||||
reason TEXT,
|
||||
status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending', 'reviewed')),
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
||||
FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_reports_status ON reports (status);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS post_summaries (
|
||||
id TEXT PRIMARY KEY,
|
||||
anonymous_user_id TEXT NOT NULL,
|
||||
emotion_tag TEXT NOT NULL,
|
||||
hold_count INTEGER NOT NULL,
|
||||
dissolved_at DATETIME NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_post_summaries_anonymous_user_id ON post_summaries (anonymous_user_id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
email TEXT PRIMARY KEY,
|
||||
username TEXT UNIQUE,
|
||||
fullName TEXT NOT NULL,
|
||||
mauth_token TEXT,
|
||||
phone TEXT,
|
||||
citizen_id TEXT,
|
||||
role TEXT DEFAULT 'visitor' CHECK(role IN ('visitor', 'moderator', 'admin')),
|
||||
avatar_url TEXT,
|
||||
bio TEXT,
|
||||
id_document_url TEXT,
|
||||
id_verification_status TEXT DEFAULT 'pending' CHECK(id_verification_status IN ('pending', 'verified', 'rejected')),
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS settings (
|
||||
key TEXT PRIMARY KEY,
|
||||
value TEXT NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO settings (key, value) VALUES ('site_name', 'Cloudflare D1 App');
|
||||
INSERT INTO settings (key, value) VALUES ('default_post_ttl_hours', '24');
|
||||
INSERT INTO settings (key, value) VALUES ('maintenance_mode', 'false');
|
||||
INSERT INTO settings (key, value) VALUES ('max_report_count_before_auto_hide', '5');
|
||||
Loading…
Reference in New Issue
Block a user