synops/tools/synops-common/src/db.rs
vegard 6496434bd3 synops-common: delt lib for alle CLI-verktøy (oppgave 21.16)
Ny crate `tools/synops-common` samler duplisert kode som var
spredt over 13 CLI-verktøy:

- db::connect() — PG-pool fra DATABASE_URL (erstatter 10+ identiske blokker)
- cas::path() — CAS-stioppslag med to-nivå hash-katalog
- cas::root() — CAS_ROOT env med default
- cas::hash_bytes() / hash_file() / store() — SHA-256 hashing og lagring
- cas::mime_to_extension() — MIME → filendelse
- logging::init() — tracing til stderr med env-filter
- types::{NodeRow, EdgeRow, NodeSummary} — delte FromRow-structs

Alle verktøy (unntatt synops-tasks som ikke bruker DB) er refaktorert
til å bruke synops-common. Alle kompilerer og tester passerer.
2026-03-18 10:51:40 +00:00

33 lines
1.2 KiB
Rust

//! PostgreSQL-tilkobling via DATABASE_URL.
//!
//! Standardisert oppkobling brukt av alle CLI-verktøy.
//! Leser DATABASE_URL fra miljøvariabel, oppretter en pool med
//! et lite antall connections (CLI-verktøy trenger sjelden mer enn 2).
use sqlx::postgres::{PgPool, PgPoolOptions};
/// Opprett en PostgreSQL-pool fra DATABASE_URL miljøvariabel.
///
/// Returnerer feil hvis DATABASE_URL ikke er satt eller tilkobling feiler.
pub async fn connect() -> Result<PgPool, String> {
let db_url = std::env::var("DATABASE_URL")
.map_err(|_| "DATABASE_URL er ikke satt".to_string())?;
PgPoolOptions::new()
.max_connections(2)
.connect(&db_url)
.await
.map_err(|e| format!("Kunne ikke koble til database: {e}"))
}
/// Opprett en PostgreSQL-pool med egendefinert maks connections.
pub async fn connect_with(max_connections: u32) -> Result<PgPool, String> {
let db_url = std::env::var("DATABASE_URL")
.map_err(|_| "DATABASE_URL er ikke satt".to_string())?;
PgPoolOptions::new()
.max_connections(max_connections)
.connect(&db_url)
.await
.map_err(|e| format!("Kunne ikke koble til database: {e}"))
}