instaclone/database/01_init.sql
2026-07-15 12:21:22 +05:30

62 lines
2.2 KiB
SQL

CREATE TABLE IF NOT EXISTS users (
email TEXT PRIMARY KEY,
username TEXT NOT NULL UNIQUE,
fullName TEXT NOT NULL,
mauth_token TEXT,
phone TEXT,
citizen_id TEXT,
role TEXT DEFAULT 'visitor',
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
);
CREATE TABLE IF NOT EXISTS posts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_email TEXT NOT NULL,
media_url TEXT NOT NULL,
media_type TEXT NOT NULL CHECK(media_type IN ('image', 'video')),
caption TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_email) REFERENCES users(email) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS likes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_email TEXT NOT NULL,
post_id INTEGER NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_email) REFERENCES users(email) ON DELETE CASCADE,
FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE,
UNIQUE(user_email, post_id)
);
CREATE TABLE IF NOT EXISTS comments (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_email TEXT NOT NULL,
post_id INTEGER NOT NULL,
text TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_email) REFERENCES users(email) ON DELETE CASCADE,
FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_users_username ON users(username);
CREATE INDEX IF NOT EXISTS idx_posts_user_email ON posts(user_email);
CREATE INDEX IF NOT EXISTS idx_likes_post_id ON likes(post_id);
CREATE INDEX IF NOT EXISTS idx_comments_post_id ON comments(post_id);
CREATE INDEX IF NOT EXISTS idx_comments_user_email ON comments(user_email);
INSERT INTO settings (key, value) VALUES
('site_name', 'Cloudflare Social'),
('site_description', 'A social media platform powered by Cloudflare D1.'),
('allow_registration', 'true'),
('default_role', 'visitor'),
('valid_roles', '["visitor", "admin", "moderator"]');