Implement the repository for library item entity.
This commit is contained in:
@@ -7,14 +7,18 @@ use std::env;
|
|||||||
use std::fs;
|
use std::fs;
|
||||||
use std::fs::DirEntry;
|
use std::fs::DirEntry;
|
||||||
use lumiere_domain::video::model::video::VideoFormat::{AVI, MKV, MP4, WEBM};
|
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;
|
use crate::video::video_format_detector::get_content_type;
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct VideoAdapter {}
|
pub struct LibraryItemAdapter {
|
||||||
|
pub repository: LibraryItemSqliteRepository
|
||||||
|
}
|
||||||
|
|
||||||
impl VideoAdapter {
|
impl LibraryItemAdapter {
|
||||||
pub fn new() -> Self {
|
pub fn new(repository: LibraryItemSqliteRepository) -> Self {
|
||||||
Self {}
|
Self { repository }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_root_folder_read_library_items(&self) -> Result<Vec<LibraryRawItem>, VideoError> {
|
fn get_root_folder_read_library_items(&self) -> Result<Vec<LibraryRawItem>, VideoError> {
|
||||||
@@ -50,8 +54,9 @@ impl VideoAdapter {
|
|||||||
Ok(library_raw_item)
|
Ok(library_raw_item)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_all_library_items_from_db(&self) -> Result<Vec<LibraryRawItem>, VideoError> {
|
fn get_all_library_items_from_db(&self) -> Result<Vec<LibraryItem>, VideoError> {
|
||||||
Ok(vec!())
|
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<LibraryRawItem>, db_items: Vec<LibraryRawItem>) -> Vec<LibraryRawItem> {
|
fn merge_item_lists(file_system_items: Vec<LibraryRawItem>, db_items: Vec<LibraryRawItem>) -> Vec<LibraryRawItem> {
|
||||||
@@ -68,7 +73,7 @@ impl VideoAdapter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl VideoPort for VideoAdapter {
|
impl VideoPort for LibraryItemAdapter {
|
||||||
fn list_root_folder(&self) -> Result<Vec<LibraryRawItem>, VideoError> {
|
fn list_root_folder(&self) -> Result<Vec<LibraryRawItem>, VideoError> {
|
||||||
let file_system_items = self.get_root_folder_read_library_items()?;
|
let file_system_items = self.get_root_folder_read_library_items()?;
|
||||||
let db_items = self.get_all_library_items_from_db()?;
|
let db_items = self.get_all_library_items_from_db()?;
|
||||||
|
|||||||
@@ -49,4 +49,13 @@ impl LibraryItemEntity {
|
|||||||
unknown_value => Err(Error::new(ErrorKind::InvalidData, format!("Unknown library item type value from database: {unknown_value}")))
|
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<LibraryItem, Error> {
|
||||||
|
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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,6 @@ use std::sync::{Arc, Mutex, MutexGuard};
|
|||||||
use rusqlite::{Connection, Error, Row};
|
use rusqlite::{Connection, Error, Row};
|
||||||
use rusqlite::fallible_iterator::FallibleIterator;
|
use rusqlite::fallible_iterator::FallibleIterator;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
use lumiere_domain::video::model::library_item::{LibraryItem, LibraryItemType};
|
|
||||||
use crate::video::model::LibraryItemEntity;
|
use crate::video::model::LibraryItemEntity;
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
@@ -35,7 +34,7 @@ impl LibraryItemSqliteRepository {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_all_of_root_folder(&self) -> Result<Vec<LibraryItem>, Error> {
|
pub fn get_all_of_root_folder(&self) -> Result<Vec<LibraryItemEntity>, Error> {
|
||||||
let database_connection = self.get_connection();
|
let database_connection = self.get_connection();
|
||||||
|
|
||||||
let mut prepared_statement = database_connection.prepare(
|
let mut prepared_statement = database_connection.prepare(
|
||||||
@@ -47,7 +46,7 @@ impl LibraryItemSqliteRepository {
|
|||||||
WHERE parent_folder_id IS NULL",
|
WHERE parent_folder_id IS NULL",
|
||||||
)?;
|
)?;
|
||||||
let rows = prepared_statement.query([])?;
|
let rows = prepared_statement.query([])?;
|
||||||
rows.map(Self::map_to_library_item).collect::<Vec<LibraryItem>>()
|
rows.map(Self::map_to_library_item).collect::<Vec<LibraryItemEntity>>()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn map_to_library_item(row: &Row) -> Result<LibraryItemEntity, Error> {
|
fn map_to_library_item(row: &Row) -> Result<LibraryItemEntity, Error> {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ use lumiere_infrastructure::configuration::adapter::ConfigurationSqliteAdapter;
|
|||||||
use lumiere_infrastructure::configuration::repository::ConfigurationSqliteRepository;
|
use lumiere_infrastructure::configuration::repository::ConfigurationSqliteRepository;
|
||||||
use lumiere_infrastructure::user::diesel_adapter::UserDieselAdapter;
|
use lumiere_infrastructure::user::diesel_adapter::UserDieselAdapter;
|
||||||
use lumiere_infrastructure::user::diesel_repository::UserDieselRepository;
|
use lumiere_infrastructure::user::diesel_repository::UserDieselRepository;
|
||||||
use lumiere_infrastructure::video::adapter::VideoAdapter;
|
use lumiere_infrastructure::video::adapter::LibraryItemAdapter;
|
||||||
use rusqlite::Connection;
|
use rusqlite::Connection;
|
||||||
use std::io::{Error, ErrorKind};
|
use std::io::{Error, ErrorKind};
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
@@ -55,7 +55,7 @@ impl ApplicationContext {
|
|||||||
// let user_adapter = Box::new(UserSqliteAdapter::new(user_repository.clone()));
|
// let user_adapter = Box::new(UserSqliteAdapter::new(user_repository.clone()));
|
||||||
let user_service = UserService::new(configuration_service.clone(), user_adapter.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());
|
let video_service = VideoService::new(video_adapter.clone());
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
|||||||
Reference in New Issue
Block a user