From 1bcbd9d2ff06e8c9f9dd8d20d656c102f10f5538 Mon Sep 17 00:00:00 2001 From: Dorothea Wagner Date: Thu, 22 Jan 2026 14:30:00 +0000 Subject: [PATCH] Add initial DB schema and connection pool --- src/db/migrations.sql | 22 ++++++++++++++++++++++ src/db/pool.rs | 7 +++++++ 2 files changed, 29 insertions(+) create mode 100644 src/db/migrations.sql create mode 100644 src/db/pool.rs 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 +}