entertainarr_adapter_sqlite/
podcast_task.rs

1use entertainarr_domain::podcast::entity::PodcastTask;
2use entertainarr_domain::task::entity::{TaskParams, TaskPayload};
3
4const INSERT_QUERY: &str = r#"insert into tasks (user_id, after, target_kind, target_id, method, parameters, status, retries, max_retries)
5values (?, ?, 'podcast', ?, ?, ?, 'pending', ?, 10)
6on conflict (target_kind, target_id, method, parameters) where status = 'pending' do update set updated_at = CURRENT_TIMESTAMP
7returning id"#;
8
9impl entertainarr_domain::podcast::prelude::PodcastTaskRepository for crate::Pool {
10    #[tracing::instrument(
11        skip(self),
12        fields(
13            otel.kind = "client",
14            db.system = "sqlite",
15            db.name = "tasks",
16            db.operation = "SELECT",
17            db.sql.table = "tasks",
18            db.query.text = INSERT_QUERY,
19            db.response.returned_rows = tracing::field::Empty,
20            error.type = tracing::field::Empty,
21            error.message = tracing::field::Empty,
22            error.stacktrace = tracing::field::Empty,
23        ),
24        err(Debug),
25    )]
26    async fn insert(&self, task: PodcastTask, params: TaskParams) -> anyhow::Result<()> {
27        self.insert_tasks(std::iter::once(TaskPayload::Podcast(task)), &params)
28            .await
29    }
30
31    async fn last(
32        &self,
33        method: entertainarr_domain::task::entity::TaskMethod,
34        podcast_ids: &[u64],
35    ) -> anyhow::Result<Vec<entertainarr_domain::task::entity::Task>> {
36        self.last_tasks_by_target_ids(method, podcast_ids).await
37    }
38}