From 4abd7dc5b99b4500c443fe950ae67df72deeff13 Mon Sep 17 00:00:00 2001 From: Florian THIERRY Date: Fri, 17 Jul 2026 11:28:27 +0200 Subject: [PATCH] Implement the repository for library item entity. --- backend/infrastructure/src/video/adapter.rs | 19 ++++++++++++------- backend/infrastructure/src/video/model.rs | 9 +++++++++ .../infrastructure/src/video/repository.rs | 5 ++--- backend/launcher/src/application_context.rs | 4 ++-- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/backend/infrastructure/src/video/adapter.rs b/backend/infrastructure/src/video/adapter.rs index 8dfc59c..722349f 100644 --- a/backend/infrastructure/src/video/adapter.rs +++ b/backend/infrastructure/src/video/adapter.rs @@ -7,14 +7,18 @@ use std::env; use std::fs; use std::fs::DirEntry; use lumiere_domain::video::model::video::VideoFormat::{AVI, MKV, MP4, WEBM}; +use crate::video::model::LibraryItemEntity; +use crate::video::repository::LibraryItemSqliteRepository; use crate::video::video_format_detector::get_content_type; #[derive(Clone)] -pub struct VideoAdapter {} +pub struct LibraryItemAdapter { + pub repository: LibraryItemSqliteRepository +} -impl VideoAdapter { - pub fn new() -> Self { - Self {} +impl LibraryItemAdapter { + pub fn new(repository: LibraryItemSqliteRepository) -> Self { + Self { repository } } fn get_root_folder_read_library_items(&self) -> Result, VideoError> { @@ -50,8 +54,9 @@ impl VideoAdapter { Ok(library_raw_item) } - fn get_all_library_items_from_db(&self) -> Result, VideoError> { - Ok(vec!()) + fn get_all_library_items_from_db(&self) -> Result, VideoError> { + self.repository.get_all_of_root_folder().map_err(|error| VideoError::FolderBrowsingTechnicalIssue) + .map(LibraryItemEntity::to_library_item) } fn merge_item_lists(file_system_items: Vec, db_items: Vec) -> Vec { @@ -68,7 +73,7 @@ impl VideoAdapter { } } -impl VideoPort for VideoAdapter { +impl VideoPort for LibraryItemAdapter { fn list_root_folder(&self) -> Result, VideoError> { let file_system_items = self.get_root_folder_read_library_items()?; let db_items = self.get_all_library_items_from_db()?; diff --git a/backend/infrastructure/src/video/model.rs b/backend/infrastructure/src/video/model.rs index 38a0cf0..8031f99 100644 --- a/backend/infrastructure/src/video/model.rs +++ b/backend/infrastructure/src/video/model.rs @@ -49,4 +49,13 @@ impl LibraryItemEntity { unknown_value => Err(Error::new(ErrorKind::InvalidData, format!("Unknown library item type value from database: {unknown_value}"))) } } + + pub(crate) fn to_library_item(&self) -> Result { + let library_item = LibraryItem { + id: self.id.clone(), + name: self.name.clone(), + r#type: Self::map_type_from_i8(self.r#type)? + }; + Ok(library_item) + } } \ No newline at end of file diff --git a/backend/infrastructure/src/video/repository.rs b/backend/infrastructure/src/video/repository.rs index a882239..adc4da3 100644 --- a/backend/infrastructure/src/video/repository.rs +++ b/backend/infrastructure/src/video/repository.rs @@ -2,7 +2,6 @@ use std::sync::{Arc, Mutex, MutexGuard}; use rusqlite::{Connection, Error, Row}; use rusqlite::fallible_iterator::FallibleIterator; use uuid::Uuid; -use lumiere_domain::video::model::library_item::{LibraryItem, LibraryItemType}; use crate::video::model::LibraryItemEntity; #[derive(Clone)] @@ -35,7 +34,7 @@ impl LibraryItemSqliteRepository { Ok(()) } - pub fn get_all_of_root_folder(&self) -> Result, Error> { + pub fn get_all_of_root_folder(&self) -> Result, Error> { let database_connection = self.get_connection(); let mut prepared_statement = database_connection.prepare( @@ -47,7 +46,7 @@ impl LibraryItemSqliteRepository { WHERE parent_folder_id IS NULL", )?; let rows = prepared_statement.query([])?; - rows.map(Self::map_to_library_item).collect::>() + rows.map(Self::map_to_library_item).collect::>() } fn map_to_library_item(row: &Row) -> Result { diff --git a/backend/launcher/src/application_context.rs b/backend/launcher/src/application_context.rs index a62caba..e464e9e 100644 --- a/backend/launcher/src/application_context.rs +++ b/backend/launcher/src/application_context.rs @@ -9,7 +9,7 @@ use lumiere_infrastructure::configuration::adapter::ConfigurationSqliteAdapter; use lumiere_infrastructure::configuration::repository::ConfigurationSqliteRepository; use lumiere_infrastructure::user::diesel_adapter::UserDieselAdapter; use lumiere_infrastructure::user::diesel_repository::UserDieselRepository; -use lumiere_infrastructure::video::adapter::VideoAdapter; +use lumiere_infrastructure::video::adapter::LibraryItemAdapter; use rusqlite::Connection; use std::io::{Error, ErrorKind}; use std::sync::{Arc, Mutex}; @@ -55,7 +55,7 @@ impl ApplicationContext { // let user_adapter = Box::new(UserSqliteAdapter::new(user_repository.clone())); let user_service = UserService::new(configuration_service.clone(), user_adapter.clone()); - let video_adapter = Box::new(VideoAdapter::new()); + let video_adapter = Box::new(LibraryItemAdapter::new()); let video_service = VideoService::new(video_adapter.clone()); Self {