mirror of
				https://gitlab.com/comunic/comunicapiv3
				synced 2025-11-04 01:24:04 +00:00 
			
		
		
		
	Can create surveys
This commit is contained in:
		@@ -9,8 +9,9 @@ use crate::controllers::routes::RequestResult;
 | 
				
			|||||||
use crate::data::error::{ExecError, ResultBoxError};
 | 
					use crate::data::error::{ExecError, ResultBoxError};
 | 
				
			||||||
use crate::data::group::GroupAccessLevel;
 | 
					use crate::data::group::GroupAccessLevel;
 | 
				
			||||||
use crate::data::http_request_handler::HttpRequestHandler;
 | 
					use crate::data::http_request_handler::HttpRequestHandler;
 | 
				
			||||||
 | 
					use crate::data::new_survey::NewSurvey;
 | 
				
			||||||
use crate::data::post::{Post, PostAccessLevel, PostFile, PostKind, PostPageKind, PostVisibilityLevel, PostWebLink};
 | 
					use crate::data::post::{Post, PostAccessLevel, PostFile, PostKind, PostPageKind, PostVisibilityLevel, PostWebLink};
 | 
				
			||||||
use crate::helpers::{groups_helper, posts_helper, user_helper};
 | 
					use crate::helpers::{groups_helper, posts_helper, survey_helper, user_helper};
 | 
				
			||||||
use crate::utils::date_utils::time;
 | 
					use crate::utils::date_utils::time;
 | 
				
			||||||
use crate::utils::string_utils::{check_string_before_insert, check_youtube_id};
 | 
					use crate::utils::string_utils::{check_string_before_insert, check_youtube_id};
 | 
				
			||||||
use crate::utils::user_data_utils::user_data_path;
 | 
					use crate::utils::user_data_utils::user_data_path;
 | 
				
			||||||
@@ -117,6 +118,8 @@ pub fn create_post(r: &mut HttpRequestHandler) -> RequestResult {
 | 
				
			|||||||
        kind: PostKind::POST_KIND_TEXT,
 | 
					        kind: PostKind::POST_KIND_TEXT,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let mut new_survey = None;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Handle different post types
 | 
					    // Handle different post types
 | 
				
			||||||
    post.kind = match r.post_string("kind")?.as_str() {
 | 
					    post.kind = match r.post_string("kind")?.as_str() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -194,7 +197,26 @@ pub fn create_post(r: &mut HttpRequestHandler) -> RequestResult {
 | 
				
			|||||||
            PostKind::POST_KIND_COUNTDOWN(time_end)
 | 
					            PostKind::POST_KIND_COUNTDOWN(time_end)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // TODO : add support for next types
 | 
					        "survey" => {
 | 
				
			||||||
 | 
					            let survey = NewSurvey {
 | 
				
			||||||
 | 
					                post_id: 0,
 | 
				
			||||||
 | 
					                user_id: r.user_id()?,
 | 
				
			||||||
 | 
					                question: r.post_string("question")?,
 | 
				
			||||||
 | 
					                choices: r.post_string("answers")?
 | 
				
			||||||
 | 
					                    .split("<>")
 | 
				
			||||||
 | 
					                    .filter(|a| a.len() > 0)
 | 
				
			||||||
 | 
					                    .map(|a| a.to_string())
 | 
				
			||||||
 | 
					                    .collect(),
 | 
				
			||||||
 | 
					                allow_new_choices: r.post_bool_opt("allowNewAnswers", false),
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if survey.choices.len() < 2 {
 | 
				
			||||||
 | 
					                r.bad_request("A survey must have at least two choices!".to_string())?;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            new_survey = Some(survey);
 | 
				
			||||||
 | 
					            PostKind::POST_KIND_SURVEY
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        _ => {
 | 
					        _ => {
 | 
				
			||||||
            r.internal_error(ExecError::boxed_new("Unsupported kind of post!"))?;
 | 
					            r.internal_error(ExecError::boxed_new("Unsupported kind of post!"))?;
 | 
				
			||||||
@@ -205,6 +227,12 @@ pub fn create_post(r: &mut HttpRequestHandler) -> RequestResult {
 | 
				
			|||||||
    // Create the post
 | 
					    // Create the post
 | 
				
			||||||
    let post_id = posts_helper::create(&post)?;
 | 
					    let post_id = posts_helper::create(&post)?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Create associated survey, if required
 | 
				
			||||||
 | 
					    if let Some(mut survey) = new_survey {
 | 
				
			||||||
 | 
					        survey.post_id = post_id;
 | 
				
			||||||
 | 
					        survey_helper::create(&survey)?;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // TODO : create a notification
 | 
					    // TODO : create a notification
 | 
				
			||||||
    r.set_response(ResCreatePost::new(post_id))
 | 
					    r.set_response(ResCreatePost::new(post_id))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -23,3 +23,4 @@ pub mod post;
 | 
				
			|||||||
pub mod movie;
 | 
					pub mod movie;
 | 
				
			||||||
pub mod survey;
 | 
					pub mod survey;
 | 
				
			||||||
pub mod comment;
 | 
					pub mod comment;
 | 
				
			||||||
 | 
					pub mod new_survey;
 | 
				
			||||||
							
								
								
									
										13
									
								
								src/data/new_survey.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/data/new_survey.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					//! # New survey information
 | 
				
			||||||
 | 
					//!
 | 
				
			||||||
 | 
					//! @author Pierre Hubert
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use crate::data::user::UserID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub struct NewSurvey {
 | 
				
			||||||
 | 
					    pub post_id: u64,
 | 
				
			||||||
 | 
					    pub user_id: UserID,
 | 
				
			||||||
 | 
					    pub question: String,
 | 
				
			||||||
 | 
					    pub choices: Vec<String>,
 | 
				
			||||||
 | 
					    pub allow_new_choices: bool,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -109,10 +109,8 @@ pub fn create(p: &Post) -> ResultBoxError<u64> {
 | 
				
			|||||||
            insert_query = insert_query.add_u64("time_end", *count_down);
 | 
					            insert_query = insert_query.add_u64("time_end", *count_down);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        _ => unimplemented!()
 | 
					        // Survey
 | 
				
			||||||
        /*
 | 
					        POST_KIND_SURVEY => { /* Nothing to be done */ }
 | 
				
			||||||
        POST_KIND_SURVEY => {},
 | 
					 | 
				
			||||||
        */
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Execute insertion
 | 
					    // Execute insertion
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,10 +3,39 @@
 | 
				
			|||||||
//! @author Pierre Hubert
 | 
					//! @author Pierre Hubert
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::constants::database_tables_names::{SURVEY_CHOICES_TABLE, SURVEY_INFO_TABLE, SURVEY_RESPONSE_TABLE};
 | 
					use crate::constants::database_tables_names::{SURVEY_CHOICES_TABLE, SURVEY_INFO_TABLE, SURVEY_RESPONSE_TABLE};
 | 
				
			||||||
use crate::data::error::ResultBoxError;
 | 
					use crate::data::error::{ExecError, ResultBoxError};
 | 
				
			||||||
 | 
					use crate::data::new_survey::NewSurvey;
 | 
				
			||||||
use crate::data::survey::{Survey, SurveyChoice};
 | 
					use crate::data::survey::{Survey, SurveyChoice};
 | 
				
			||||||
use crate::data::user::UserID;
 | 
					use crate::data::user::UserID;
 | 
				
			||||||
use crate::helpers::database;
 | 
					use crate::helpers::database;
 | 
				
			||||||
 | 
					use crate::utils::date_utils::{mysql_date, time};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Create a new survey
 | 
				
			||||||
 | 
					pub fn create(survey: &NewSurvey) -> ResultBoxError {
 | 
				
			||||||
 | 
					    let survey_id = database::InsertQuery::new(SURVEY_INFO_TABLE)
 | 
				
			||||||
 | 
					        .add_user_id("ID_utilisateurs", &survey.user_id)
 | 
				
			||||||
 | 
					        .add_u64("ID_texte", survey.post_id)
 | 
				
			||||||
 | 
					        .add_u64("date_creation", time())
 | 
				
			||||||
 | 
					        .add_str("question", survey.question.as_str())
 | 
				
			||||||
 | 
					        .add_legacy_bool("allow_new_choices", survey.allow_new_choices)
 | 
				
			||||||
 | 
					        .insert()?
 | 
				
			||||||
 | 
					        .ok_or(ExecError::new("Survey was created but no ID was returned!"))?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for choice in &survey.choices {
 | 
				
			||||||
 | 
					        create_choice(survey_id, choice)?;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Ok(())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Insert a new choice for a survey
 | 
				
			||||||
 | 
					pub fn create_choice(survey_id: u64, choice: &str) -> ResultBoxError {
 | 
				
			||||||
 | 
					    database::InsertQuery::new(SURVEY_CHOICES_TABLE)
 | 
				
			||||||
 | 
					        .add_u64("ID_sondage", survey_id)
 | 
				
			||||||
 | 
					        .add_str("date_creation", &mysql_date())
 | 
				
			||||||
 | 
					        .add_str("Choix", choice)
 | 
				
			||||||
 | 
					        .insert_drop_result()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Get information about a survey
 | 
					/// Get information about a survey
 | 
				
			||||||
pub fn get_info(post_id: u64) -> ResultBoxError<Survey> {
 | 
					pub fn get_info(post_id: u64) -> ResultBoxError<Survey> {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user