systemprompt-users 0.1.22

Core user management module for systemprompt.io
Documentation
use systemprompt_identifiers::UserId;

use crate::error::Result;
use crate::repository::UserRepository;

#[derive(Debug, Clone, Copy)]
pub struct MergeResult {
    pub sessions_transferred: u64,
    pub tasks_transferred: u64,
}

impl UserRepository {
    pub async fn merge_users(&self, source_id: &UserId, target_id: &UserId) -> Result<MergeResult> {
        let sessions_result = sqlx::query!(
            r#"
            UPDATE user_sessions
            SET user_id = $1
            WHERE user_id = $2
            "#,
            target_id.as_str(),
            source_id.as_str()
        )
        .execute(&*self.write_pool)
        .await?;

        let tasks_result = sqlx::query!(
            r#"
            UPDATE agent_tasks
            SET user_id = $1
            WHERE user_id = $2
            "#,
            target_id.as_str(),
            source_id.as_str()
        )
        .execute(&*self.write_pool)
        .await?;

        sqlx::query!(r#"DELETE FROM users WHERE id = $1"#, source_id.as_str())
            .execute(&*self.write_pool)
            .await?;

        Ok(MergeResult {
            sessions_transferred: sessions_result.rows_affected(),
            tasks_transferred: tasks_result.rows_affected(),
        })
    }
}