CREATE TABLE IF NOT EXISTS settings ( key TEXT PRIMARY KEY, value TEXT NOT NULL ); CREATE TABLE IF NOT EXISTS roles ( name TEXT PRIMARY KEY NOT NULL, description TEXT ); 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', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (role) REFERENCES roles(name) ON UPDATE CASCADE ON DELETE SET DEFAULT ); CREATE TABLE IF NOT EXISTS posts ( id TEXT PRIMARY KEY, user_email TEXT NOT NULL, media_url TEXT NOT NULL, media_type TEXT NOT NULL, caption TEXT, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_email) REFERENCES users(email) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS likes ( id TEXT PRIMARY KEY, user_email TEXT NOT NULL, post_id 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, UNIQUE(user_email, post_id) ); CREATE TABLE IF NOT EXISTS comments ( id TEXT PRIMARY KEY, user_email TEXT NOT NULL, post_id TEXT NOT NULL, content TEXT NOT NULL, created_at DATETIME NOT NULL 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_users_role ON users(role); CREATE INDEX IF NOT EXISTS idx_posts_user_email ON posts(user_email); CREATE INDEX IF NOT EXISTS idx_likes_user_email ON likes(user_email); CREATE INDEX IF NOT EXISTS idx_likes_post_id ON likes(post_id); CREATE INDEX IF NOT EXISTS idx_comments_user_email ON comments(user_email); CREATE INDEX IF NOT EXISTS idx_comments_post_id ON comments(post_id); INSERT OR IGNORE INTO settings (key, value) VALUES ('site_name', 'Social Media App'), ('site_description', 'A vibrant community social media platform.'), ('maintenance_mode', 'false'), ('allow_registration', 'true'); INSERT OR IGNORE INTO roles (name, description) VALUES ('visitor', 'Read-only access to public content.'), ('member', 'Standard user with posting and interaction rights.'), ('moderator', 'Can manage content and users.'), ('admin', 'Full administrative access to the application.');