Added functionality to delete variant.

This commit is contained in:
2026-01-24 03:02:52 +01:00
parent cec9e3754f
commit a06ec2f980
4 changed files with 68 additions and 3 deletions
+20
View File
@@ -123,3 +123,23 @@ pub async fn update_variant(variant_id: i64, variant: &Variant, pool: PgPool) ->
}
}
}
pub async fn delete_variant(variant_id: i64, pool: PgPool) -> Option<()> {
let result = sqlx::query(
format!("DELETE FROM {} WHERE id = {}",
"variant",
variant_id
).as_str()
).execute(&pool).await;
match result {
Ok(_) => {
Some(())
}
Err(err) => {
println!("Error deleting variant: {:#?}", err);
None
}
}
}
@@ -49,6 +49,10 @@
}
}
async function deleteVariant() {
await store.deleteVariant(props.variant.id);
}
</script>
<template>
@@ -68,6 +72,7 @@
:flat="true"
:disabled="!edit"
:hidden="edit"
@click="deleteVariant()"
>
<v-icon>mdi-delete-empty</v-icon>
<v-tooltip
+20
View File
@@ -207,5 +207,25 @@ export const useLabelEditorStore = defineStore('label_editor_store', {
this.addNotification(true, 'Kann Variante nicht aktualisiert werden. Es ist kein Artikel ausgewählt.');
}
},
async deleteVariant(variantID: number) {
if(this.article != null) {
let variantIndex = this.article.variants.findIndex(i => i.id === variantID);
try {
await $fetch(this.config.public.url + '/variant/' + variantID, {
method: 'DELETE',
});
this.article.variants.splice(variantIndex, 1);
this.addNotification(false, 'Variante gelöscht.');
} catch {
this.addNotification(true, 'Fehler beim löschen der Variante.');
}
} else {
this.addNotification(true, 'Kann Variante nicht gelöscht werden. Es ist kein Artikel ausgewählt.');
}
},
},
});
+23 -3
View File
@@ -5,6 +5,7 @@ use axum::{
Json, Router,
};
use axum::extract::{Path, State};
use axum::routing::delete;
use dotenv::dotenv;
use env_logger::fmt::style::Reset;
use http::{header, Method};
@@ -15,7 +16,7 @@ use tower_http::cors::{AllowOrigin, Any, CorsLayer};
use tracing::info;
use http::header::{AUTHORIZATION, ACCEPT, ACCESS_CONTROL_ALLOW_ORIGIN, CONTENT_TYPE, ACCESS_CONTROL_ALLOW_CREDENTIALS};
use common::models::article;
use common::models::variant::{insert_variant, update_variant, Variant};
use common::models::variant::{delete_variant, insert_variant, update_variant, Variant};
#[tokio::main]
async fn main() {
@@ -39,7 +40,7 @@ async fn main() {
sqlx::migrate!().run(&pool).await.expect("Migrations failed");
let cors = CorsLayer::new()
.allow_methods([Method::GET, Method::POST])
.allow_methods([Method::GET, Method::POST, Method::DELETE])
.allow_headers([ACCEPT, ACCESS_CONTROL_ALLOW_ORIGIN, CONTENT_TYPE])
.allow_origin(AllowOrigin::any());
@@ -50,6 +51,7 @@ async fn main() {
.route("/article/{id}", get(get_article))
.route("/article/{id}/variant", post(add_variant))
.route("/variant/{id}", post(update_variant_route))
.route("/variant/{id}", delete(delete_variant_route))
.with_state(pool)
.layer(cors);
@@ -187,4 +189,22 @@ async fn update_variant_route(
(StatusCode::INTERNAL_SERVER_ERROR, Json(variant))
}
}
}
}
async fn delete_variant_route(
State(pool): State<PgPool>,
Path(variant_id): Path<i64>,
) -> StatusCode {
info!("Update variant");
let delete_variant_result = delete_variant(variant_id, pool).await;
match delete_variant_result {
Some(_) => {
StatusCode::OK
}
None => {
StatusCode::INTERNAL_SERVER_ERROR
}
}
}