Skip to main content

systemprompt_users/repository/user/
bulk.rs

1//! Bulk user-record mutations.
2//!
3//! Copyright (c) systemprompt.io — Business Source License 1.1.
4//! See <https://systemprompt.io> for licensing details.
5
6use systemprompt_identifiers::UserId;
7
8use crate::error::Result;
9use crate::models::UserStatus;
10use crate::repository::UserRepository;
11
12impl UserRepository {
13    pub async fn bulk_update_status(&self, user_ids: &[UserId], new_status: &str) -> Result<u64> {
14        let ids: Vec<String> = user_ids.iter().map(ToString::to_string).collect();
15        let result = sqlx::query!(
16            r#"
17            UPDATE users
18            SET status = $1, updated_at = NOW()
19            WHERE id = ANY($2)
20            "#,
21            new_status,
22            &ids[..]
23        )
24        .execute(&*self.write_pool)
25        .await?;
26        Ok(result.rows_affected())
27    }
28
29    pub async fn bulk_delete(&self, user_ids: &[UserId]) -> Result<u64> {
30        let deleted_status = UserStatus::Deleted.as_str();
31        let ids: Vec<String> = user_ids.iter().map(ToString::to_string).collect();
32        let result = sqlx::query!(
33            r#"
34            UPDATE users
35            SET status = $1, updated_at = NOW()
36            WHERE id = ANY($2)
37            "#,
38            deleted_status,
39            &ids[..]
40        )
41        .execute(&*self.write_pool)
42        .await?;
43        Ok(result.rows_affected())
44    }
45}