mod crud;
use super::DAL;
use crate::database::universal_types::UniversalUuid;
use crate::error::ValidationError;
use crate::models::trigger_execution::{NewTriggerExecution, TriggerExecution};
use chrono::{DateTime, Utc};
#[derive(Clone)]
pub struct TriggerExecutionDAL<'a> {
dal: &'a DAL,
}
impl<'a> TriggerExecutionDAL<'a> {
pub fn new(dal: &'a DAL) -> Self {
Self { dal }
}
pub async fn create(
&self,
new_execution: NewTriggerExecution,
) -> Result<TriggerExecution, ValidationError> {
crate::dispatch_backend!(
self.dal.backend(),
self.create_postgres(new_execution).await,
self.create_sqlite(new_execution).await
)
}
pub async fn get_by_id(&self, id: UniversalUuid) -> Result<TriggerExecution, ValidationError> {
crate::dispatch_backend!(
self.dal.backend(),
self.get_by_id_postgres(id).await,
self.get_by_id_sqlite(id).await
)
}
pub async fn has_active_execution(
&self,
trigger_name: &str,
context_hash: &str,
) -> Result<bool, ValidationError> {
crate::dispatch_backend!(
self.dal.backend(),
self.has_active_execution_postgres(trigger_name, context_hash)
.await,
self.has_active_execution_sqlite(trigger_name, context_hash)
.await
)
}
pub async fn complete(
&self,
id: UniversalUuid,
completed_at: DateTime<Utc>,
) -> Result<(), ValidationError> {
crate::dispatch_backend!(
self.dal.backend(),
self.complete_postgres(id, completed_at).await,
self.complete_sqlite(id, completed_at).await
)
}
pub async fn link_pipeline_execution(
&self,
id: UniversalUuid,
pipeline_execution_id: UniversalUuid,
) -> Result<(), ValidationError> {
crate::dispatch_backend!(
self.dal.backend(),
self.link_pipeline_execution_postgres(id, pipeline_execution_id)
.await,
self.link_pipeline_execution_sqlite(id, pipeline_execution_id)
.await
)
}
pub async fn get_recent(
&self,
trigger_name: &str,
limit: i64,
) -> Result<Vec<TriggerExecution>, ValidationError> {
crate::dispatch_backend!(
self.dal.backend(),
self.get_recent_postgres(trigger_name, limit).await,
self.get_recent_sqlite(trigger_name, limit).await
)
}
pub async fn list_by_trigger(
&self,
trigger_name: &str,
limit: i64,
offset: i64,
) -> Result<Vec<TriggerExecution>, ValidationError> {
crate::dispatch_backend!(
self.dal.backend(),
self.list_by_trigger_postgres(trigger_name, limit, offset)
.await,
self.list_by_trigger_sqlite(trigger_name, limit, offset)
.await
)
}
pub async fn complete_by_pipeline(
&self,
pipeline_execution_id: UniversalUuid,
completed_at: DateTime<Utc>,
) -> Result<(), ValidationError> {
crate::dispatch_backend!(
self.dal.backend(),
self.complete_by_pipeline_postgres(pipeline_execution_id, completed_at)
.await,
self.complete_by_pipeline_sqlite(pipeline_execution_id, completed_at)
.await
)
}
}