Added update and delete functionality to article with cascade for variants.

This commit is contained in:
2026-01-26 16:51:29 +01:00
parent b562c26a82
commit 7879f69255
7 changed files with 266 additions and 19 deletions
+51 -1
View File
@@ -9,7 +9,7 @@ use axum::routing::delete;
use dotenv::dotenv;
use env_logger::fmt::style::Reset;
use http::{header, Method};
use common::models::article::{insert_article, load_article, load_articles, Article};
use common::models::article::{delete_article, insert_article, load_article, load_articles, update_article, Article};
use common::models::origin::Origin;
use sqlx::{ postgres::PgPoolOptions, PgPool };
use tower_http::cors::{AllowOrigin, Any, CorsLayer};
@@ -49,6 +49,8 @@ async fn main() {
.route("/articles", get(get_articles))
.route("/article", post(create_article))
.route("/article/{id}", get(get_article))
.route("/article/{id}", post(update_article_route))
.route("/article/{id}", delete(delete_article_route))
.route("/article/{id}/variant", post(add_variant))
.route("/variant/{id}", post(update_variant_route))
.route("/variant/{id}", delete(delete_variant_route))
@@ -135,6 +137,54 @@ async fn create_article(
}
}
async fn update_article_route(
State(pool): State<PgPool>,
Path(article_id): Path<i64>,
Json(payload): Json<Article>,
) -> (StatusCode, Json<Article>) {
info!("Update article");
let update_article = update_article(article_id, &payload, pool).await;
match update_article {
Some(article) => {
(StatusCode::OK, Json(article))
}
None => {
let article = Article {
id: 0,
name: "".to_string(),
bio: false,
origin: Origin::EU,
description: None,
ingredients: None,
variants: vec![],
};
(StatusCode::INTERNAL_SERVER_ERROR, Json(article))
}
}
}
async fn delete_article_route(
State(pool): State<PgPool>,
Path(article_id): Path<i64>,
) -> StatusCode {
info!("Delete article");
let delete_article_result = delete_article(article_id, pool).await;
match delete_article_result {
Some(_) => {
StatusCode::OK
}
None => {
StatusCode::INTERNAL_SERVER_ERROR
}
}
}
async fn add_variant(
State(pool): State<PgPool>,
Path(article_id): Path<i64>,