summaryrefslogtreecommitdiff
path: root/src/services/id.rs
blob: 7970c60dda3341063fc1bfea11028d26ed123c2d (plain)
use exun::RawUnexpected;
use sqlx::{Executor, MySql};
use uuid::Uuid;

use super::db;

/// Create a unique user id, handling duplicate ID's
pub async fn new_user_id<'c>(
	conn: impl Executor<'c, Database = MySql> + Clone,
) -> Result<Uuid, RawUnexpected> {
	let uuid = loop {
		let uuid = Uuid::new_v4();
		if !db::user_id_exists(conn.clone(), uuid).await? {
			break uuid;
		}
	};

	Ok(uuid)
}