use sqlx::PgExecutor;
use tracing::instrument;
use crate::auth::{OrganizationId, UserId};
#[instrument(skip(db))]
pub async fn add_user_to_organization(
db: impl PgExecutor<'_>,
organization_id: OrganizationId,
user_id: UserId,
) -> Result<(), sqlx::Error> {
sqlx::query!(
"INSERT INTO organization_members
(organization_id, user_id)
VALUES ($1, $2)
ON CONFLICT DO NOTHING",
organization_id.as_uuid(),
user_id.as_uuid()
)
.execute(db)
.await?;
Ok(())
}
#[instrument(skip(db))]
pub async fn set_user_active(
db: impl PgExecutor<'_>,
organization_id: OrganizationId,
user_id: UserId,
active: bool,
) -> Result<(), sqlx::Error> {
sqlx::query!(
"UPDATE organization_members
SET active = $3
WHERE
organization_id = $1
AND user_id = $2",
organization_id.as_uuid(),
user_id.as_uuid(),
active
)
.execute(db)
.await?;
Ok(())
}
#[instrument(skip(db))]
pub async fn remove_user_from_organization(
db: impl PgExecutor<'_>,
organization_id: OrganizationId,
user_id: UserId,
) -> Result<(), sqlx::Error> {
sqlx::query!(
"DELETE FROM organization_members
WHERE
organization_id = $1
AND user_id = $2",
organization_id.as_uuid(),
user_id.as_uuid()
)
.execute(db)
.await?;
Ok(())
}