use crate::orchestrator::project::models::ProjectModel;
use ockam_core::async_trait;
use ockam_core::Result;
use ockam_node::database::AutoRetry;
use ockam_node::retry;
#[async_trait]
pub trait ProjectsRepository: Send + Sync + 'static {
async fn store_project(&self, project: &ProjectModel) -> Result<()>;
async fn get_project(&self, project_id: &str) -> Result<Option<ProjectModel>>;
async fn get_project_by_name(&self, name: &str) -> Result<Option<ProjectModel>>;
async fn get_projects(&self) -> Result<Vec<ProjectModel>>;
async fn get_default_project(&self) -> Result<Option<ProjectModel>>;
async fn set_default_project(&self, project_id: &str) -> Result<()>;
async fn delete_project(&self, project_id: &str) -> Result<()>;
}
#[async_trait]
impl<T: ProjectsRepository> ProjectsRepository for AutoRetry<T> {
async fn store_project(&self, project: &ProjectModel) -> Result<()> {
retry!(self.wrapped.store_project(project))
}
async fn get_project(&self, project_id: &str) -> Result<Option<ProjectModel>> {
retry!(self.wrapped.get_project(project_id))
}
async fn get_project_by_name(&self, name: &str) -> Result<Option<ProjectModel>> {
retry!(self.wrapped.get_project_by_name(name))
}
async fn get_projects(&self) -> Result<Vec<ProjectModel>> {
retry!(self.wrapped.get_projects())
}
async fn get_default_project(&self) -> Result<Option<ProjectModel>> {
retry!(self.wrapped.get_default_project())
}
async fn set_default_project(&self, project_id: &str) -> Result<()> {
retry!(self.wrapped.set_default_project(project_id))
}
async fn delete_project(&self, project_id: &str) -> Result<()> {
retry!(self.wrapped.delete_project(project_id))
}
}