Spaces:
Runtime error
Runtime error
File size: 1,260 Bytes
8c9f41d a02919a 8c9f41d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
use deadpool_diesel::postgres::Pool;
use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl, SelectableHelper};
use crate::{
models::entities::{keyframes::KeyframeEntity, videos::VideoEntity},
services::keyframes::KeyframeService,
};
#[derive(Clone)]
pub struct KeyframeRepository<'a> {
pool: &'a Pool,
}
impl<'a> From<&'a KeyframeService<'_>> for KeyframeRepository<'a> {
fn from(value: &'a KeyframeService) -> Self {
Self { pool: value.pool() }
}
}
impl<'a> KeyframeRepository<'a> {
pub async fn find_by_id_and_join_video(
&self,
id: i64,
) -> anyhow::Result<Option<(KeyframeEntity, VideoEntity)>> {
use crate::schema::keyframes::dsl as keyframe_dsl;
use crate::schema::videos::dsl as video_dsl;
let query = keyframe_dsl::keyframes
.inner_join(video_dsl::videos)
.filter(keyframe_dsl::id.eq(id))
.select((KeyframeEntity::as_select(), VideoEntity::as_select()));
let conn = self.pool.get().await?;
let results = conn
.interact(move |conn| query.load::<(KeyframeEntity, VideoEntity)>(conn))
.await
.map_err(|e| anyhow::anyhow!("{:?}", e))??;
Ok(results.into_iter().next())
}
}
|