systemprompt_users/repository/user/
merge.rs1use systemprompt_identifiers::UserId;
7
8use crate::error::Result;
9use crate::repository::UserRepository;
10
11#[derive(Debug, Clone, Copy)]
12pub struct MergeResult {
13 pub sessions_transferred: u64,
14 pub tasks_transferred: u64,
15}
16
17impl UserRepository {
18 pub async fn merge_users(&self, source_id: &UserId, target_id: &UserId) -> Result<MergeResult> {
19 let sessions_result = sqlx::query!(
20 r#"
21 UPDATE user_sessions
22 SET user_id = $1
23 WHERE user_id = $2
24 "#,
25 target_id.as_str(),
26 source_id.as_str()
27 )
28 .execute(&*self.write_pool)
29 .await?;
30
31 let tasks_result = sqlx::query!(
32 r#"
33 UPDATE agent_tasks
34 SET user_id = $1
35 WHERE user_id = $2
36 "#,
37 target_id.as_str(),
38 source_id.as_str()
39 )
40 .execute(&*self.write_pool)
41 .await?;
42
43 sqlx::query!(r#"DELETE FROM users WHERE id = $1"#, source_id.as_str())
44 .execute(&*self.write_pool)
45 .await?;
46
47 Ok(MergeResult {
48 sessions_transferred: sessions_result.rows_affected(),
49 tasks_transferred: tasks_result.rows_affected(),
50 })
51 }
52}