From e1282dacb0f58a1e6df76732bdfd65b280cfc9f1 Mon Sep 17 00:00:00 2001 From: Jef Roosens Date: Mon, 28 Jun 2021 18:37:26 +0200 Subject: [PATCH] I'm not that good with Diesel yet am I --- Cargo.lock | 11 ++++++++++ Cargo.toml | 7 ++++++- diesel.toml | 2 +- .../down.sql | 2 ++ .../up.sql | 12 +++++++++++ src/hilde/main.rs | 5 ++++- src/hilde/routes/mod.rs | 13 ++++++++++++ src/libhilde/lib.rs | 5 +++++ src/libhilde/packages.rs | 21 +++++++++++++++++++ src/libhilde/schema.rs | 12 +++++++++++ 10 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 migrations/2021-06-28-154739_distribution-metadata/down.sql create mode 100644 migrations/2021-06-28-154739_distribution-metadata/up.sql create mode 100644 src/hilde/routes/mod.rs create mode 100644 src/libhilde/packages.rs create mode 100644 src/libhilde/schema.rs diff --git a/Cargo.lock b/Cargo.lock index 9ec71b8..a7481a2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -187,6 +187,7 @@ dependencies = [ "diesel_derives", "pq-sys", "r2d2", + "uuid", ] [[package]] @@ -417,6 +418,7 @@ dependencies = [ "diesel_migrations", "rocket", "rocket_sync_db_pools", + "uuid", ] [[package]] @@ -1379,6 +1381,15 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom", +] + [[package]] name = "vcpkg" version = "0.2.15" diff --git a/Cargo.toml b/Cargo.toml index 5dd1808..c887852 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,10 +22,15 @@ doctest = true [dependencies] rocket = "0.5.0-rc.1" -diesel = { version = "1.4.7", features = ["postgres"] } +diesel = { version = "1.4.7", features = ["postgres", "uuidv07"] } diesel_migrations = "1.4.0" [dependencies.rocket_sync_db_pools] version = "0.1.0-rc.1" default_features = false features = ["diesel_postgres_pool"] + +[dependencies.uuid] +version = "0.8.2" +default_features = false +features = [ "v4" ] diff --git a/diesel.toml b/diesel.toml index 92267c8..013842c 100644 --- a/diesel.toml +++ b/diesel.toml @@ -2,4 +2,4 @@ # see diesel.rs/guides/configuring-diesel-cli [print_schema] -file = "src/schema.rs" +file = "src/libhilde/schema.rs" diff --git a/migrations/2021-06-28-154739_distribution-metadata/down.sql b/migrations/2021-06-28-154739_distribution-metadata/down.sql new file mode 100644 index 0000000..2775f52 --- /dev/null +++ b/migrations/2021-06-28-154739_distribution-metadata/down.sql @@ -0,0 +1,2 @@ +-- This file should undo anything in `up.sql` +DROP TABLE distributions; \ No newline at end of file diff --git a/migrations/2021-06-28-154739_distribution-metadata/up.sql b/migrations/2021-06-28-154739_distribution-metadata/up.sql new file mode 100644 index 0000000..8e23cb3 --- /dev/null +++ b/migrations/2021-06-28-154739_distribution-metadata/up.sql @@ -0,0 +1,12 @@ +-- Your SQL goes here +CREATE TABLE distributions ( + id uuid DEFAULT gen_random_uuid() PRIMARY KEY, + + name text UNIQUE NOT NULL, + description text, + origin text, + label text, + version text, + suite text, + codename text +); \ No newline at end of file diff --git a/src/hilde/main.rs b/src/hilde/main.rs index 5db0513..c2b9e2f 100644 --- a/src/hilde/main.rs +++ b/src/hilde/main.rs @@ -4,13 +4,15 @@ extern crate rocket; #[macro_use] extern crate diesel_migrations; +mod routes; + use rocket::{fairing::AdHoc, Build, Rocket}; use rocket_sync_db_pools::{database, diesel}; embed_migrations!(); #[database("postgres_hilde")] -struct HildeDbConn(diesel::PgConnection); +pub struct HildeDbConn(diesel::PgConnection); async fn run_db_migrations(rocket: Rocket) -> Result, Rocket> { let conn = HildeDbConn::get_one(&rocket) @@ -31,4 +33,5 @@ fn rocket() -> _ { "Run database migrations", run_db_migrations, )) + .mount("/", routes::routes()) } diff --git a/src/hilde/routes/mod.rs b/src/hilde/routes/mod.rs new file mode 100644 index 0000000..975458a --- /dev/null +++ b/src/hilde/routes/mod.rs @@ -0,0 +1,13 @@ +use rocket::Route; +use libhilde::packages::generate_release_file; +use crate::HildeDbConn; + +pub fn routes() -> Vec { + routes![get_dist_release] +} + +// NOTE: for now, only dists without slashes are supported +#[get("/dists//Release")] +async fn get_dist_release(conn: HildeDbConn, dist: String) -> String { + conn.run(|c| generate_release_file(dist, c)).await +} diff --git a/src/libhilde/lib.rs b/src/libhilde/lib.rs index e69de29..c94f87b 100644 --- a/src/libhilde/lib.rs +++ b/src/libhilde/lib.rs @@ -0,0 +1,5 @@ +#[macro_use] +extern crate diesel; + +pub mod packages; +pub mod schema; diff --git a/src/libhilde/packages.rs b/src/libhilde/packages.rs new file mode 100644 index 0000000..f35e2e3 --- /dev/null +++ b/src/libhilde/packages.rs @@ -0,0 +1,21 @@ +use diesel::{PgConnection, Queryable, QueryDsl, ExpressionMethods, RunQueryDsl}; +use crate::schema::distributions::dsl::*; + +#[derive(Queryable)] +struct Distribution { + id: uuid::Uuid, + name: String, + description: Option, + origin: Option, + label: Option, + version: Option, + suite: Option, + codename: Option +} + +/// Generate a Release file for a given distribution +pub fn generate_release_file(dist: String, conn: &PgConnection) -> String { + let results = distributions.filter(name.eq(dist)).load::(conn).unwrap(); + + format!("{}", results.len()) +} diff --git a/src/libhilde/schema.rs b/src/libhilde/schema.rs new file mode 100644 index 0000000..262bec7 --- /dev/null +++ b/src/libhilde/schema.rs @@ -0,0 +1,12 @@ +table! { + distributions (id) { + id -> Uuid, + name -> Text, + description -> Nullable, + origin -> Nullable, + label -> Nullable, + version -> Nullable, + suite -> Nullable, + codename -> Nullable, + } +}