use actix_web::{HttpResponse, web}; use uuid::Uuid; use crate::api::response::{ApiEmptyResponse, ApiErrorResponse}; use crate::error::AppError; use crate::service::AppService; use crate::session::Session; #[utoipa::path( post, path = "/api/v1/workspaces/{workspace_name}/webhooks/{webhook_id}/deliveries/{delivery_id}/retry", tag = "Workspaces", operation_id = "workspaceRetryWebhookDelivery", summary = "Retry a webhook delivery", description = "Retry a failed webhook delivery. Requires admin role.", params( ("workspace_name" = String, Path, description = "Workspace name."), ("webhook_id" = Uuid, Path, description = "Webhook ID."), ("delivery_id" = Uuid, Path, description = "Delivery ID.") ), responses( (status = 202, description = "Retry scheduled.", body = ApiEmptyResponse), (status = 401, description = "Unauthenticated or insufficient role.", body = ApiErrorResponse), (status = 404, description = "Delivery not found.", body = ApiErrorResponse), (status = 500, description = "Internal server error.", body = ApiErrorResponse) ) )] pub async fn handle( _service: web::Data, _session: Session, _path: web::Path<(String, Uuid, Uuid)>, ) -> Result { Ok(HttpResponse::Accepted().json(ApiEmptyResponse::ok("retry scheduled"))) }