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
27        Ok(result.rows_affected())
28    }
29
30    pub async fn bulk_delete(&self, user_ids: &[UserId]) -> Result<u64> {
31        let deleted_status = UserStatus::Deleted.as_str();
32        let ids: Vec<String> = user_ids.iter().map(ToString::to_string).collect();
33        let result = sqlx::query!(
34            r#"
35            UPDATE users
36            SET status = $1, updated_at = NOW()
37            WHERE id = ANY($2)
38            "#,
39            deleted_status,
40            &ids[..]
41        )
42        .execute(&*self.write_pool)
43        .await?;
44
45        Ok(result.rows_affected())
46    }
47}