Added functionality to delete variant.
This commit is contained in:
@@ -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>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -68,6 +72,7 @@
|
|||||||
:flat="true"
|
:flat="true"
|
||||||
:disabled="!edit"
|
:disabled="!edit"
|
||||||
:hidden="edit"
|
:hidden="edit"
|
||||||
|
@click="deleteVariant()"
|
||||||
>
|
>
|
||||||
<v-icon>mdi-delete-empty</v-icon>
|
<v-icon>mdi-delete-empty</v-icon>
|
||||||
<v-tooltip
|
<v-tooltip
|
||||||
|
|||||||
@@ -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.');
|
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.');
|
||||||
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
+22
-2
@@ -5,6 +5,7 @@ use axum::{
|
|||||||
Json, Router,
|
Json, Router,
|
||||||
};
|
};
|
||||||
use axum::extract::{Path, State};
|
use axum::extract::{Path, State};
|
||||||
|
use axum::routing::delete;
|
||||||
use dotenv::dotenv;
|
use dotenv::dotenv;
|
||||||
use env_logger::fmt::style::Reset;
|
use env_logger::fmt::style::Reset;
|
||||||
use http::{header, Method};
|
use http::{header, Method};
|
||||||
@@ -15,7 +16,7 @@ use tower_http::cors::{AllowOrigin, Any, CorsLayer};
|
|||||||
use tracing::info;
|
use tracing::info;
|
||||||
use http::header::{AUTHORIZATION, ACCEPT, ACCESS_CONTROL_ALLOW_ORIGIN, CONTENT_TYPE, ACCESS_CONTROL_ALLOW_CREDENTIALS};
|
use http::header::{AUTHORIZATION, ACCEPT, ACCESS_CONTROL_ALLOW_ORIGIN, CONTENT_TYPE, ACCESS_CONTROL_ALLOW_CREDENTIALS};
|
||||||
use common::models::article;
|
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]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
@@ -39,7 +40,7 @@ async fn main() {
|
|||||||
sqlx::migrate!().run(&pool).await.expect("Migrations failed");
|
sqlx::migrate!().run(&pool).await.expect("Migrations failed");
|
||||||
|
|
||||||
let cors = CorsLayer::new()
|
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_headers([ACCEPT, ACCESS_CONTROL_ALLOW_ORIGIN, CONTENT_TYPE])
|
||||||
.allow_origin(AllowOrigin::any());
|
.allow_origin(AllowOrigin::any());
|
||||||
|
|
||||||
@@ -50,6 +51,7 @@ async fn main() {
|
|||||||
.route("/article/{id}", get(get_article))
|
.route("/article/{id}", get(get_article))
|
||||||
.route("/article/{id}/variant", post(add_variant))
|
.route("/article/{id}/variant", post(add_variant))
|
||||||
.route("/variant/{id}", post(update_variant_route))
|
.route("/variant/{id}", post(update_variant_route))
|
||||||
|
.route("/variant/{id}", delete(delete_variant_route))
|
||||||
.with_state(pool)
|
.with_state(pool)
|
||||||
.layer(cors);
|
.layer(cors);
|
||||||
|
|
||||||
@@ -188,3 +190,21 @@ async fn update_variant_route(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user