Skip to main content

systemprompt_users/repository/user/
merge.rs

1use 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.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.pool)
36        .await?;
37
38        sqlx::query!(r#"DELETE FROM users WHERE id = $1"#, source_id.as_str())
39            .execute(&*self.pool)
40            .await?;
41
42        Ok(MergeResult {
43            sessions_transferred: sessions_result.rows_affected(),
44            tasks_transferred: tasks_result.rows_affected(),
45        })
46    }
47}