use sqlx::{SqlitePool, sqlite::SqliteConnectOptions}; pub async fn init_db(database_url: &str) -> Result> { let options = SqliteConnectOptions::new() .filename(database_url) .create_if_missing(true); let pool = SqlitePool::connect_with(options).await?; // Create users table sqlx::query( r#" CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, phone TEXT UNIQUE NOT NULL, username TEXT UNIQUE NOT NULL, password_hash TEXT NOT NULL, avatar_url TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) "#, ) .execute(&pool) .await?; // Create messages table sqlx::query( r#" CREATE TABLE IF NOT EXISTS messages ( id TEXT PRIMARY KEY, from_user TEXT NOT NULL, to_user TEXT NOT NULL, content TEXT NOT NULL, timestamp INTEGER NOT NULL, message_type TEXT NOT NULL, read BOOLEAN DEFAULT FALSE, deleted_for_sender BOOLEAN DEFAULT FALSE, deleted_for_receiver BOOLEAN DEFAULT FALSE, deleted_for_everyone BOOLEAN DEFAULT FALSE ) "#, ) .execute(&pool) .await?; // Create sessions table sqlx::query( r#" CREATE TABLE IF NOT EXISTS sessions ( token TEXT PRIMARY KEY, username TEXT NOT NULL, phone TEXT NOT NULL, expires_at DATETIME NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) "#, ) .execute(&pool) .await?; Ok(pool) }