Skip to main content

kellnr_webhooks/
lib.rs

1use chrono::{DateTime, Utc};
2use kellnr_common::normalized_name::NormalizedName;
3use kellnr_common::version::Version;
4use kellnr_common::webhook::WebhookEvent;
5use kellnr_db::DbProvider;
6use serde_json::json;
7
8mod endpoints;
9mod service;
10#[cfg(test)]
11mod tests;
12mod types;
13
14pub use endpoints::{
15    delete_webhook, get_all_webhooks, get_webhook, register_webhook, test_webhook,
16};
17pub use service::run_webhook_service;
18
19pub async fn notify_crate(
20    event: WebhookEvent,
21    timestamp: &DateTime<Utc>,
22    normalized_name: &NormalizedName,
23    version: &Version,
24    db: &std::sync::Arc<dyn DbProvider>,
25) {
26    let payload = json!({
27        "type": event,
28        "timestamp": timestamp,
29        "data": {
30            "crate_name": format!("{}", normalized_name),
31            "crate_version": version
32        }
33    });
34
35    if let Err(err) = db.add_webhook_queue(event, payload).await {
36        tracing::error!("Db: {err:?}");
37    }
38}