Add delete endpoint

This commit is contained in:
Mubelotix
2025-07-31 12:38:14 +02:00
parent ad68245186
commit 94733a4a18

View File

@ -23,7 +23,7 @@ use crate::extractors::sequential_extractor::SeqHandler;
#[derive(OpenApi)] #[derive(OpenApi)]
#[openapi( #[openapi(
paths(get_webhooks, patch_webhooks, get_webhook, post_webhook), paths(get_webhooks, patch_webhooks, get_webhook, post_webhook, delete_webhook),
tags(( tags((
name = "Webhooks", name = "Webhooks",
description = "The `/webhooks` route allows you to register endpoints to be called once tasks are processed.", description = "The `/webhooks` route allows you to register endpoints to be called once tasks are processed.",
@ -39,7 +39,11 @@ pub fn configure(cfg: &mut web::ServiceConfig) {
.route(web::patch().to(SeqHandler(patch_webhooks))) .route(web::patch().to(SeqHandler(patch_webhooks)))
.route(web::post().to(SeqHandler(post_webhook))), .route(web::post().to(SeqHandler(post_webhook))),
) )
.service(web::resource("/{uuid}").route(web::get().to(get_webhook))); .service(
web::resource("/{uuid}")
.route(web::get().to(get_webhook))
.route(web::delete().to(SeqHandler(delete_webhook))),
);
} }
#[derive(Debug, Deserr, ToSchema)] #[derive(Debug, Deserr, ToSchema)]
@ -400,3 +404,41 @@ async fn post_webhook(
debug!(returns = ?webhook, "Created webhook {}", uuid); debug!(returns = ?webhook, "Created webhook {}", uuid);
Ok(HttpResponse::Created().json(WebhookWithMetadata { uuid, is_editable: true, webhook })) Ok(HttpResponse::Created().json(WebhookWithMetadata { uuid, is_editable: true, webhook }))
} }
#[utoipa::path(
delete,
path = "/{uuid}",
tag = "Webhooks",
security(("Bearer" = ["webhooks.update", "*"])),
responses(
(status = 204, description = "Webhook deleted successfully"),
(status = 404, description = "Webhook not found", body = ResponseError, content_type = "application/json"),
(status = 401, description = "The authorization header is missing", body = ResponseError, content_type = "application/json"),
),
params(
("uuid" = Uuid, Path, description = "The universally unique identifier of the webhook")
)
)]
async fn delete_webhook(
index_scheduler: GuardedData<ActionPolicy<{ actions::WEBHOOKS_UPDATE }>, Data<IndexScheduler>>,
uuid: Path<Uuid>,
req: HttpRequest,
analytics: Data<Analytics>,
) -> Result<HttpResponse, ResponseError> {
let uuid = uuid.into_inner();
let webhooks = index_scheduler.webhooks();
if !webhooks.webhooks.contains_key(&uuid) {
return Err(WebhooksError::WebhookNotFound(uuid).into());
}
patch_webhooks_inner(
&index_scheduler,
WebhooksSettings { webhooks: Setting::Set(BTreeMap::from([(uuid, Setting::Reset)])) },
)?;
analytics.publish(PatchWebhooksAnalytics::patch_webhooks(), &req);
debug!("Deleted webhook {}", uuid);
Ok(HttpResponse::NoContent().finish())
}