From 2cc8e7da04b00dd74d6b37b569c396444bbd0458 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Sun, 12 Jul 2020 14:20:24 +0200 Subject: [PATCH] Can delete all the posts associated to a movie --- src/controllers/movies_controller.rs | 8 +++++--- src/helpers/movies_helper.rs | 11 ++++++++++- src/helpers/posts_helper.rs | 17 +++++++++++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/controllers/movies_controller.rs b/src/controllers/movies_controller.rs index eee3c4a..4791418 100644 --- a/src/controllers/movies_controller.rs +++ b/src/controllers/movies_controller.rs @@ -4,7 +4,6 @@ use crate::api_data::movie_api::MovieAPI; use crate::controllers::routes::RequestResult; -use crate::data::error::ExecError; use crate::data::http_request_handler::HttpRequestHandler; use crate::helpers::movies_helper; @@ -17,6 +16,9 @@ pub fn get_list(r: &mut HttpRequestHandler) -> RequestResult { /// Remove a movie pub fn delete(r: &mut HttpRequestHandler) -> RequestResult { - // TODO : implement method - r.internal_error(ExecError::boxed_new("Unimplemented method!")) + let movie_id = r.post_movie_id("movieID")?; + + movies_helper::delete(&movies_helper::get_info(movie_id)?)?; + + r.success("Movie deleted.") } \ No newline at end of file diff --git a/src/helpers/movies_helper.rs b/src/helpers/movies_helper.rs index abb945f..7e79770 100644 --- a/src/helpers/movies_helper.rs +++ b/src/helpers/movies_helper.rs @@ -6,7 +6,7 @@ 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; +use crate::helpers::{database, posts_helper}; /// Get the list of movies of the current pub fn get_list_user(user_id: &UserID) -> ResultBoxError> { @@ -28,6 +28,15 @@ 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)?; + + // TODO : continue implementation + + Ok(()) +} + /// Turn a database entry into a movie object fn db_to_movie(row: &database::RowResult) -> ResultBoxError { Ok(Movie { diff --git a/src/helpers/posts_helper.rs b/src/helpers/posts_helper.rs index ab1e564..0f20114 100644 --- a/src/helpers/posts_helper.rs +++ b/src/helpers/posts_helper.rs @@ -8,6 +8,7 @@ use crate::constants::database_tables_names::POSTS_TABLE; use crate::data::error::{ExecError, ResultBoxError}; use crate::data::group_id::GroupID; use crate::data::group_member::GroupMembershipLevel; +use crate::data::movie::Movie; use crate::data::post::{Post, PostAccessLevel, PostFile, PostKind, PostPageKind, PostVisibilityLevel, PostWebLink}; use crate::data::post::PostKind::{POST_KIND_COUNTDOWN, POST_KIND_IMAGE, POST_KIND_MOVIE, POST_KIND_PDF, POST_KIND_SURVEY, POST_KIND_WEBLINK, POST_KIND_YOUTUBE}; use crate::data::user::UserID; @@ -440,6 +441,22 @@ pub fn delete(p: &Post) -> ResultBoxError { Ok(()) } +/// Get all the posts that use of movie +pub fn get_posts_for_movie(m: &Movie) -> ResultBoxError> { + database::QueryInfo::new(POSTS_TABLE) + .cond_u64("idvideo", m.id) + .exec(db_to_post) +} + +/// Delete all the posts associated with a movie +pub fn delete_all_with_movie(m: &Movie) -> ResultBoxError { + for post in get_posts_for_movie(m)? { + delete(&post)?; + } + + Ok(()) +} + /// Turn a post into a database entry fn db_to_post(res: &database::RowResult) -> ResultBoxError { let user_id = if res.get_u64("ID_amis")? == 0 {