Skip to main content

apalis_postgres/queries/
register_worker.rs

1use apalis_core::worker::context::WorkerContext;
2use sqlx::Executor;
3
4use crate::{error::Error, timestamp::Timestamp};
5
6/// Register a worker in the database
7///
8/// Errors if worker already exists
9pub async fn register_worker<E>(
10    conn: &mut E,
11    queue: &str,
12    worker: &WorkerContext,
13    last_seen: &Timestamp,
14    backend_type: &str,
15) -> Result<(), Error>
16where
17    for<'e> &'e mut E: Executor<'e, Database = sqlx::Postgres>,
18{
19    let res = sqlx::query_file!(
20        "queries/worker/register.sql",
21        worker.name(),
22        queue,
23        backend_type,
24        worker.get_service(),
25        last_seen
26    )
27    .execute(conn)
28    .await?;
29    if res.rows_affected() == 0 {
30        return Err(Error::WorkerAlreadyExists(worker.name().to_owned()));
31    }
32    Ok(())
33}