mod error;
mod repo;
use sqlx::PgPool;
use crate::{
outbox::OutboxPublisher,
primitives::{AccountId, AccountSetId},
};
pub(crate) use error::AccountSetMemberError;
pub use repo::members_cursor;
use repo::AccountSetMemberRepo;
#[derive(Clone)]
pub(crate) struct AccountSetMembers {
repo: AccountSetMemberRepo,
}
impl AccountSetMembers {
pub(crate) fn new(pool: &PgPool, publisher: &OutboxPublisher) -> Self {
Self {
repo: AccountSetMemberRepo::new(pool, publisher),
}
}
pub(crate) async fn lock_members_in_op(
&self,
db: &mut impl es_entity::AtomicOperation,
account_ids: &[AccountId],
) -> Result<(), sqlx::Error> {
self.repo.lock_members_in_op(db, account_ids).await
}
pub(crate) async fn add_in_op(
&self,
db: &mut impl es_entity::AtomicOperation,
pairs: &[(AccountSetId, AccountId)],
) -> Result<(), sqlx::Error> {
self.repo.add_in_op(db, pairs).await
}
pub(crate) async fn attach_new_accounts_in_op(
&self,
db: &mut impl es_entity::AtomicOperation,
pairs: &[(AccountSetId, AccountId)],
) -> Result<(), AccountSetMemberError> {
self.repo.attach_new_accounts_in_op(db, pairs).await
}
pub(crate) async fn remove_in_op(
&self,
db: &mut impl es_entity::AtomicOperation,
account_set_id: AccountSetId,
account_id: AccountId,
) -> Result<(), sqlx::Error> {
self.repo.remove_in_op(db, account_set_id, account_id).await
}
pub(crate) async fn list_by_created_at(
&self,
id: AccountSetId,
args: es_entity::PaginatedQueryArgs<members_cursor::AccountSetMemberByCreatedAtCursor>,
) -> Result<
es_entity::PaginatedQueryRet<
cala_types::account_set::AccountSetMember,
members_cursor::AccountSetMemberByCreatedAtCursor,
>,
sqlx::Error,
> {
self.repo.list_by_created_at(id, args).await
}
pub(crate) async fn list_by_created_at_in_op(
&self,
op: &mut impl es_entity::AtomicOperation,
id: AccountSetId,
args: es_entity::PaginatedQueryArgs<members_cursor::AccountSetMemberByCreatedAtCursor>,
) -> Result<
es_entity::PaginatedQueryRet<
cala_types::account_set::AccountSetMember,
members_cursor::AccountSetMemberByCreatedAtCursor,
>,
sqlx::Error,
> {
self.repo.list_by_created_at_in_op(op, id, args).await
}
pub(crate) async fn list_by_external_id(
&self,
id: AccountSetId,
args: es_entity::PaginatedQueryArgs<members_cursor::AccountSetMemberByExternalIdCursor>,
) -> Result<
es_entity::PaginatedQueryRet<
cala_types::account_set::AccountSetMemberByExternalId,
members_cursor::AccountSetMemberByExternalIdCursor,
>,
sqlx::Error,
> {
self.repo.list_by_external_id(id, args).await
}
pub(crate) async fn list_by_external_id_in_op(
&self,
op: &mut impl es_entity::AtomicOperation,
id: AccountSetId,
args: es_entity::PaginatedQueryArgs<members_cursor::AccountSetMemberByExternalIdCursor>,
) -> Result<
es_entity::PaginatedQueryRet<
cala_types::account_set::AccountSetMemberByExternalId,
members_cursor::AccountSetMemberByExternalIdCursor,
>,
sqlx::Error,
> {
self.repo.list_by_external_id_in_op(op, id, args).await
}
}