systemprompt_users/repository/user/
bulk.rs1use 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 mut tx = self.write_pool.begin().await?;
15 sqlx::query!("SELECT public.begin_user_privacy() AS prepared")
16 .fetch_one(&mut *tx)
17 .await?;
18 let ids: Vec<String> = user_ids.iter().map(ToString::to_string).collect();
19 let result = sqlx::query!(
20 r#"
21 UPDATE users
22 SET status = $1, updated_at = NOW()
23 WHERE id = ANY($2)
24 "#,
25 new_status,
26 &ids[..]
27 )
28 .execute(&mut *tx)
29 .await?;
30
31 sqlx::query!("SELECT public.finish_user_privacy() AS finished")
32 .fetch_one(&mut *tx)
33 .await?;
34 tx.commit().await?;
35 Ok(result.rows_affected())
36 }
37
38 pub async fn bulk_delete(&self, user_ids: &[UserId]) -> Result<u64> {
39 let deleted_status = UserStatus::Deleted.as_str();
40 let mut tx = self.write_pool.begin().await?;
41 sqlx::query!("SELECT public.begin_user_privacy() AS prepared")
42 .fetch_one(&mut *tx)
43 .await?;
44 let ids: Vec<String> = user_ids.iter().map(ToString::to_string).collect();
45 let result = sqlx::query!(
46 r#"
47 UPDATE users
48 SET status = $1, updated_at = NOW()
49 WHERE id = ANY($2)
50 "#,
51 deleted_status,
52 &ids[..]
53 )
54 .execute(&mut *tx)
55 .await?;
56
57 sqlx::query!("SELECT public.finish_user_privacy() AS finished")
58 .fetch_one(&mut *tx)
59 .await?;
60 tx.commit().await?;
61 Ok(result.rows_affected())
62 }
63}