use systemprompt_runtime::AppContext;
use systemprompt_traits::FederatedIdentityClaims;
use systemprompt_users::{User, UserRepository};
use super::MessagingError;
pub async fn resolve_or_link_user(
ctx: &AppContext,
issuer: &str,
external_user_id: &str,
) -> Result<User, MessagingError> {
let repo =
UserRepository::new(ctx.db_pool()).map_err(|e| MessagingError::Identity(e.to_string()))?;
let claims = FederatedIdentityClaims {
email: None,
email_verified: false,
name: None,
preferred_username: None,
roles: Vec::new(),
};
repo.find_or_create_federated(issuer, external_user_id, &claims)
.await
.map_err(|e| MessagingError::Identity(e.to_string()))
}