Files
msgs/src/db.rs
T
2025-11-28 01:38:59 +07:00

62 lines
1.7 KiB
Rust

use sqlx::{SqlitePool, sqlite::SqliteConnectOptions};
pub async fn init_db(database_url: &str) -> Result<SqlitePool, Box<dyn std::error::Error>> {
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)
}