This repository has been archived on 2023-11-08. You can view files and clone it, but cannot push or open issues or pull requests.
fiddle/src/api/loaders/directory.rs

44 lines
1.3 KiB
Rust

use async_trait::async_trait;
use chrono::prelude::*;
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 DirectoryBatcher;
#[async_trait]
impl BatchFn<Uuid, models::directory::Directory> for DirectoryBatcher {
async fn load(&mut self, keys: &[Uuid]) -> HashMap<Uuid, models::directory::Directory> {
let db_conn = &mut db::POOL.get().unwrap();
let mut map = HashMap::new();
for row in db::schema::directories::table
.select((
db::schema::directories::id,
db::schema::directories::created_at,
db::schema::directories::updated_at,
))
.filter(db::schema::directories::id.eq_any(keys))
.load::<(Uuid, DateTime<Utc>, Option<DateTime<Utc>>)>(db_conn)
.unwrap()
{
let row: (Uuid, DateTime<Utc>, Option<DateTime<Utc>>) = row;
let data = models::directory::Directory {
id: row.0,
created_at: row.1,
updated_at: row.2,
};
map.insert(data.id, data);
}
map
}
}
pub type DirectoryLoader = Loader<Uuid, models::directory::Directory, DirectoryBatcher>;
pub const YIELD_COUNT: usize = 100;