use sqlx::PgPool; use uuid::Uuid; use crate::{ logs::{LogAction, LogEntry}, users::{User, UserError}, }; pub async fn initialise_reserved_users_if_needed(pool: &PgPool) -> Result<(), UserError> { let mut tx = pool.begin().await?; let systemuser_exists = sqlx::query("SELECT handle FROM users WHERE id = $1") .bind(Uuid::nil()) .fetch_optional(&mut *tx) .await? .is_some(); if !systemuser_exists { let u = User::create_systemuser(&mut *tx).await?; LogEntry::new(&mut *tx, u, LogAction::Initialize).await?; } let infradmin_exists = sqlx::query("SELECT handle FROM users WHERE id = $1") .bind(Uuid::max()) .fetch_optional(&mut *tx) .await? .is_some(); if !infradmin_exists { User::create_infradmin(&mut *tx).await?; let u = User::get_by_id(&mut *tx, Uuid::max()).await?; LogEntry::new(&mut *tx, u, LogAction::RegenInfradmin).await?; } tx.commit().await?; Ok(()) }