From 9a17440194adb1158edbd9d3f6d6f71e91a462b6 Mon Sep 17 00:00:00 2001 From: justorius Date: Fri, 9 Aug 2024 18:33:23 +0200 Subject: [PATCH] update migration --- README.md | 16 ++++++++++++++++ src/db/dml.rs | 14 ++++++++++++++ src/main.rs | 3 ++- src/server/router.rs | 26 ++++++++++++++++++++++++++ 4 files changed, 58 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1dfc54a..a7bca70 100644 --- a/README.md +++ b/README.md @@ -24,3 +24,19 @@ Using a different terminal send an HTTP POST request to the running server: ```shell http http://127.0.0.1:8080/ping/get ``` + +Migrations list: +```sh +http http://127.0.0.1:8080/migration/all +``` + +Migration info: +```sh +http http://127.0.0.1:8080/migration/details/14 +``` + +Update migration: + +```sh +echo '{"id": 14, "query": "demo query edited from cli"}' | http -f --json --print hb http://127.0.0.1:8080/migration/update +``` \ No newline at end of file diff --git a/src/db/dml.rs b/src/db/dml.rs index 1e5d608..34055ab 100644 --- a/src/db/dml.rs +++ b/src/db/dml.rs @@ -68,6 +68,20 @@ pub async fn add_migration_record( client.query_one(&stmt, &[&migration.query]).await } +pub async fn update_migration_record( + client: &Client, + migration: Migration, +) -> Result { + let stmt = client + .prepare("UPDATE migrations set query = $1 where id = $2 RETURNING id;") + .await + .unwrap(); + + client + .query_one(&stmt, &[&migration.query, &migration.id]) + .await +} + // add ping record pub async fn add_ping_record(client: &Client, ping_info: Ping) -> Result { let _stmt = include_str!("./sql/ping/add_record.sql"); diff --git a/src/main.rs b/src/main.rs index 2ee40ba..3791a19 100644 --- a/src/main.rs +++ b/src/main.rs @@ -58,7 +58,8 @@ async fn main() -> std::io::Result<()> { .route( "/details/{id_migration}", web::get().to(server::router::get_migration_details), - ), + ) + .route("/update", web::post().to(server::router::update_migration)), ) }) .bind(config.server_addr.clone())? diff --git a/src/server/router.rs b/src/server/router.rs index 77eeedf..68e31ab 100644 --- a/src/server/router.rs +++ b/src/server/router.rs @@ -55,6 +55,32 @@ pub async fn get_migration_details( } } +pub async fn update_migration( + migration: web::Json, + db_pool: web::Data, +) -> Result { + let migration_info = migration.into_inner(); + + let client = db_pool + .get() + .await + .map_err(settings::errors::MyError::PoolError)?; + + let updated_migration = dml::update_migration_record(&client, migration_info).await; + + match updated_migration { + Ok(it) => { + let id: i64 = it.get(0); + Ok(HttpResponse::Ok().json(id)) + } + + Err(err) => { + println!("Error on updating migration: {}", err); + Ok(HttpResponse::InternalServerError().json("err")) + } + } +} + pub async fn add_migration_record( migration: web::Json, db_pool: web::Data,