diff --git a/src/db/migrations.sql b/src/db/migrations.sql new file mode 100644 index 0000000..9798aa9 --- /dev/null +++ b/src/db/migrations.sql @@ -0,0 +1,22 @@ +-- Migration 001: initial schema +CREATE EXTENSION IF NOT EXISTS "pgcrypto"; + +CREATE TABLE users ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + username VARCHAR(64) UNIQUE NOT NULL, + email VARCHAR(255) UNIQUE NOT NULL, + password_hash TEXT NOT NULL, + created_at TIMESTAMPTZ DEFAULT NOW(), + updated_at TIMESTAMPTZ DEFAULT NOW() +); + +CREATE TABLE sessions ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, + token_hash TEXT NOT NULL, + created_at TIMESTAMPTZ DEFAULT NOW(), + expires_at TIMESTAMPTZ NOT NULL +); + +CREATE INDEX idx_sessions_user_id ON sessions(user_id); +CREATE INDEX idx_sessions_expires_at ON sessions(expires_at); diff --git a/src/db/pool.rs b/src/db/pool.rs new file mode 100644 index 0000000..4f15db0 --- /dev/null +++ b/src/db/pool.rs @@ -0,0 +1,7 @@ +use sqlx::PgPool; +use std::env; + +pub async fn create_pool() -> Result { + let url = env::var("DATABASE_URL").expect("DATABASE_URL must be set"); + PgPool::connect(&url).await +}