entertainarr_adapter_sqlite/
podcast_task.rs1use 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)), ¶ms)
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}