apalis_sqlite/queries/
register_worker.rs

1use apalis_core::worker::context::WorkerContext;
2use sqlx::SqlitePool;
3
4use crate::Config;
5
6/// Register a new worker in the database
7pub async fn register_worker(
8    pool: SqlitePool,
9    config: Config,
10    worker: WorkerContext,
11    storage_type: &str,
12) -> Result<(), sqlx::Error> {
13    let worker_id = worker.name().to_owned();
14    let queue = config.queue().to_string();
15    let layers = worker.get_service().to_owned();
16    let keep_alive = config.keep_alive().as_secs() as i64;
17    let res = sqlx::query_file!(
18        "queries/backend/register_worker.sql",
19        worker_id,
20        queue,
21        storage_type,
22        layers,
23        keep_alive,
24    )
25    .execute(&pool)
26    .await?;
27    if res.rows_affected() == 0 {
28        return Err(sqlx::Error::Io(std::io::Error::new(
29            std::io::ErrorKind::AlreadyExists,
30            "WORKER_ALREADY_EXISTS",
31        )));
32    }
33    Ok(())
34}