From 0971df3cbec06a2d2481a825ccd492f683d1298d Mon Sep 17 00:00:00 2001 From: clerie Date: Sat, 1 Feb 2025 20:00:19 +0100 Subject: [PATCH] Move database queries intothe storage struct --- src/bin/web.rs | 54 +++++--------------------------------------------- src/storage.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 49 deletions(-) diff --git a/src/bin/web.rs b/src/bin/web.rs index 88600b8..0b92d63 100644 --- a/src/bin/web.rs +++ b/src/bin/web.rs @@ -21,9 +21,6 @@ use axum::{ }; use flake_tracker::{ storage::{ - FlakeRevision, - FlakeUri, - InputModel, Storage, }, templates::{ @@ -118,19 +115,8 @@ async fn route_index( async fn route_flakes( State(state): State, ) -> Result { - let flake_revisions: Vec = sqlx::query_as(" - SELECT - uri - FROM flake_revisions - GROUP BY uri - ORDER BY uri - ") - .fetch_all(&state.storage.db) - .await - .context("Failed to fetch data from database")?; - Ok(render_template(&FlakesTemplate { - flakes: flake_revisions, + flakes: state.storage.flakes().await?, })?) } @@ -138,23 +124,9 @@ async fn route_flake_info( State(state): State, Path(uri): Path, ) -> Result { - let flake_revisions: Vec = sqlx::query_as(" - SELECT - revision_uri, - revision, - last_modified - FROM flake_revisions - WHERE uri = ? - ORDER BY last_modified - ") - .bind(&uri) - .fetch_all(&state.storage.db) - .await - .context("Failed to fetch data from database")?; - Ok(render_template(&FlakeInfoTemplate { - uri: uri, - flake_revisions: flake_revisions, + uri: uri.clone(), + flake_revisions: state.storage.revisions_from_flake(&uri).await?, })?) } @@ -162,25 +134,9 @@ async fn route_revision( State(state): State, Path(revision_uri): Path, ) -> Result { - let inputs: Vec = sqlx::query_as(" - SELECT - flake_revision_uri, - input_name, - revision_uri, - uri, - nar_hash, - last_modified - FROM flake_revisions_inputs - WHERE flake_revision_uri = ? - ORDER BY input_name - ") - .bind(&revision_uri) - .fetch_all(&state.storage.db) - .await - .context("Failed to fetch data from database")?; Ok(render_template(&RevisionTemplate { - revision_uri: revision_uri, - inputs: inputs, + revision_uri: revision_uri.clone(), + inputs: state.storage.inputs_for_revision(&revision_uri).await?, })?) } diff --git a/src/storage.rs b/src/storage.rs index d28b996..b9f2854 100644 --- a/src/storage.rs +++ b/src/storage.rs @@ -27,6 +27,54 @@ impl Storage { db, }) } + + pub async fn flakes(&self) -> Result> { + sqlx::query_as(" + SELECT + uri + FROM flake_revisions + GROUP BY uri + ORDER BY uri + ") + .fetch_all(&self.db) + .await + .context("Failed to fetch data from database") + } + + pub async fn revisions_from_flake(&self, uri: &str) -> Result> { + sqlx::query_as(" + SELECT + revision_uri, + revision, + last_modified + FROM flake_revisions + WHERE uri = ? + ORDER BY last_modified + ") + .bind(&uri) + .fetch_all(&self.db) + .await + .context("Failed to fetch data from database") + } + + pub async fn inputs_for_revision(&self, revision_uri: &str) -> Result> { + sqlx::query_as(" + SELECT + flake_revision_uri, + input_name, + revision_uri, + uri, + nar_hash, + last_modified + FROM flake_revisions_inputs + WHERE flake_revision_uri = ? + ORDER BY input_name + ") + .bind(&revision_uri) + .fetch_all(&self.db) + .await + .context("Failed to fetch data from database") + } } #[derive(FromRow)]