diff --git a/src/bin/web.rs b/src/bin/web.rs index 6f2ed1a..ee47dd5 100644 --- a/src/bin/web.rs +++ b/src/bin/web.rs @@ -136,5 +136,6 @@ async fn route_revision( Ok(render_template(&RevisionTemplate { revision_uri: revision_uri.clone(), inputs: state.storage.inputs_for_revision(&revision_uri).await?, + input_of: state.storage.input_of_for_revision(&revision_uri).await?, })?) } diff --git a/src/storage.rs b/src/storage.rs index c54d998..57f6500 100644 --- a/src/storage.rs +++ b/src/storage.rs @@ -86,6 +86,25 @@ impl Storage { .await .context("Failed to fetch data from database") } + + pub async fn input_of_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 revision_uri = ? + ORDER BY input_name + ") + .bind(&revision_uri) + .fetch_all(&self.db) + .await + .context("Failed to fetch data from database") + } } #[derive(FromRow)] @@ -132,6 +151,10 @@ pub struct InputModel { } impl InputModel { + pub fn flake_revision_link(&self) -> String { + format!("/r/{}", urlencode(&self.flake_revision_uri)) + } + pub fn revision_link(&self) -> String { match &self.revision_uri { Some(revision_uri) => format!("/r/{}", urlencode(&revision_uri)), diff --git a/src/templates.rs b/src/templates.rs index 4df8ec7..d09e236 100644 --- a/src/templates.rs +++ b/src/templates.rs @@ -32,4 +32,5 @@ pub struct FlakeTemplate { pub struct RevisionTemplate { pub revision_uri: String, pub inputs: Vec, + pub input_of: Vec, } diff --git a/templates/revision.html b/templates/revision.html index 2b75cfe..275d585 100644 --- a/templates/revision.html +++ b/templates/revision.html @@ -29,5 +29,13 @@ {% endfor %} + +

Input of

+ + {% endblock %}