use async_trait::async_trait; use dataloader::non_cached::Loader; use dataloader::BatchFn; use diesel::prelude::*; use std::collections::HashMap; use uuidv7::Uuid; use crate::{api::models, db}; pub struct UserBatcher; #[async_trait] impl BatchFn for UserBatcher { async fn load(&mut self, keys: &[Uuid]) -> HashMap { let db_conn = &mut db::POOL.get().unwrap(); let mut map = HashMap::new(); for row in db::schema::users::table .select((db::schema::users::id, db::schema::users::name)) .filter(db::schema::users::id.eq_any(keys)) .load::<(Uuid, String)>(db_conn) .unwrap() { let row: (Uuid, String) = row; let data = models::user::User { id: row.0, name: row.1, }; map.insert(data.id, data); } map } } pub type UserLoader = Loader; pub const YIELD_COUNT: usize = 100;