use async_trait::async_trait;
use crate::cqrs::core::data::Entity;
use crate::cqrs::core::repositories::can_fetch_all::CanFetchAll;
use crate::cqrs::core::repositories::CanFetchMany;
use crate::cqrs::models::errors::ResultErr;
#[async_trait]
pub trait RepositoryEntity<DATA: Clone, ID: Clone>: ReadOnlyEntityRepo<DATA, ID> + WriteOnlyEntityRepo<DATA, ID> {}
#[async_trait]
pub trait ReadOnlyEntityRepo<DATA: Clone, ID: Clone>: CanFetchAll<Entity<DATA, ID>> + CanFetchMany<Entity<DATA, ID>> + Sync + Send {
async fn fetch_one(&self, id: &ID) -> ResultErr<Option<Entity<DATA, ID>>>;
}
#[async_trait]
pub trait WriteOnlyEntityRepo<DATA: Clone, ID: Clone> {
async fn insert(&self, entity: &Entity<DATA, ID>) -> ResultErr<ID>;
async fn update(&self, id: &ID, entity: &Entity<DATA, ID>) -> ResultErr<ID>;
}