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.
33 lines
1.2 KiB
Rust
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}"))
|
|
}
|