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