//! # Movies helper //! //! @author Pierre Hubert use crate::constants::database_tables_names::MOVIES_TABLE; use crate::data::error::ResultBoxError; use crate::data::movie::Movie; use crate::data::user::UserID; use crate::helpers::{database, posts_helper}; use crate::utils::user_data_utils::user_data_path; /// Get the list of movies of the current pub fn get_list_user(user_id: &UserID) -> ResultBoxError> { database::QueryInfo::new(MOVIES_TABLE) .cond_user_id("ID_user", user_id) .set_order("ID DESC") .exec(db_to_movie) } /// Get information about a single movie pub fn get_info(movie_id: u64) -> ResultBoxError { database::QueryInfo::new(MOVIES_TABLE) .cond_u64("ID", movie_id) .query_row(db_to_movie) } /// Check out whether a user own a movie or not pub fn does_user_has(user_id: &UserID, movie_id: u64) -> ResultBoxError { Ok(get_info(movie_id).map(|m| &m.user_id == user_id).unwrap_or(false)) } /// Remove permanently a movie from the database pub fn delete(movie: &Movie) -> ResultBoxError { posts_helper::delete_all_with_movie(movie)?; let movie_path = user_data_path(movie.uri.as_ref()); if movie_path.exists() { std::fs::remove_file(movie_path)?; } database::DeleteQuery::new(MOVIES_TABLE) .cond_u64("ID", movie.id) .exec() } /// Turn a database entry into a movie object fn db_to_movie(row: &database::RowResult) -> ResultBoxError { Ok(Movie { id: row.get_u64("ID")?, user_id: row.get_user_id("ID_user")?, name: row.get_str("nom_video")?, uri: row.get_str("URL")?, file_type: row.get_str("file_type")?, size: row.get_usize("size")?, }) }