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