use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use sqlx::{any::AnyRow, FromRow, Row};
pub mod manager;
#[async_trait]
pub trait TxManager {
async fn create(
&mut self,
hash_id: &str,
publication_id: &str,
codified_date: &str,
) -> anyhow::Result<Option<i64>>;
async fn find_last_inserted_date_by_publication_id(
&mut self,
publication_id: &str,
) -> anyhow::Result<Option<PublicationVersion>>;
async fn find_all_by_publication_id(
&mut self,
publication_id: &str,
) -> anyhow::Result<Vec<PublicationVersion>>;
async fn find_all_in_publication_has_publication_versions(
&mut self,
publication_ids: Vec<String>,
) -> anyhow::Result<Vec<PublicationVersion>>;
async fn find_all_recursive_for_publication(
&mut self,
publication_id: String,
) -> anyhow::Result<Vec<PublicationVersion>>;
}
#[derive(Deserialize, Serialize, Hash, Eq, PartialEq, Clone)]
pub struct PublicationVersion {
pub id: String,
pub version: String,
pub publication_id: String,
pub build_reason: Option<String>,
}
impl FromRow<'_, AnyRow> for PublicationVersion {
fn from_row(row: &AnyRow) -> anyhow::Result<Self, sqlx::Error> {
Ok(Self {
id: row.try_get("id")?,
version: row.try_get("version")?,
publication_id: row.try_get("publication_id")?,
build_reason: row.try_get("build_reason").ok(),
})
}
}