diff --git a/validation/api/src/internal.rs b/validation/api/src/internal.rs index d689981..fb418f6 100644 --- a/validation/api/src/internal.rs +++ b/validation/api/src/internal.rs @@ -167,6 +167,9 @@ impl Context{ ); action!("submissions",action_submission_submitted,config,ActionSubmissionSubmittedRequest,"status/validator-submitted",config.SubmissionID, ("ModelVersion",config.ModelVersion.to_string().as_str()) + ("DisplayName",config.DisplayName.as_str()) + ("Creator",config.Creator.as_str()) + ("GameID",config.GameID.to_string().as_str()) ); action!("submissions",action_submission_validated,config,SubmissionID,"status/validator-validated",config.0,); action!("submissions",update_submission_validated_model,config,UpdateSubmissionModelRequest,"validated-model",config.SubmissionID, @@ -196,6 +199,9 @@ impl Context{ ); action!("mapfixes",action_mapfix_submitted,config,ActionMapfixSubmittedRequest,"status/validator-submitted",config.MapfixID, ("ModelVersion",config.ModelVersion.to_string().as_str()) + ("DisplayName",config.DisplayName.as_str()) + ("Creator",config.Creator.as_str()) + ("GameID",config.GameID.to_string().as_str()) ); action!("mapfixes",action_mapfix_validated,config,MapfixID,"status/validator-validated",config.0,); action!("mapfixes",update_mapfix_validated_model,config,UpdateMapfixModelRequest,"validated-model",config.MapfixID, diff --git a/validation/api/src/types.rs b/validation/api/src/types.rs index 2a329fc..eb4e87e 100644 --- a/validation/api/src/types.rs +++ b/validation/api/src/types.rs @@ -228,6 +228,9 @@ pub struct UpdateSubmissionModelRequest{ pub struct ActionSubmissionSubmittedRequest{ pub SubmissionID:i64, pub ModelVersion:u64, + pub DisplayName:String, + pub Creator:String, + pub GameID:u32, } #[allow(nonstandard_style)] @@ -267,6 +270,9 @@ pub struct UpdateMapfixModelRequest{ pub struct ActionMapfixSubmittedRequest{ pub MapfixID:i64, pub ModelVersion:u64, + pub DisplayName:String, + pub Creator:String, + pub GameID:u32, } #[allow(nonstandard_style)] diff --git a/validation/src/check.rs b/validation/src/check.rs index 0aee2b2..5acf80f 100644 --- a/validation/src/check.rs +++ b/validation/src/check.rs @@ -1,5 +1,5 @@ use crate::download::download_asset_version; -use crate::rbx_util::{class_is_a,get_mapinfo,get_root_instance,read_dom,MapInfo,ReadDomError}; +use crate::rbx_util::{class_is_a,get_mapinfo,get_root_instance,read_dom,ReadDomError,GameID}; use heck::{ToSnakeCase,ToTitleCase}; @@ -61,6 +61,17 @@ impl std::fmt::Display for Check{ } } +pub enum CheckStatus{ + Passed{ + display_name:String, + creator:String, + game_id:GameID, + }, + Failed{ + report:CheckReport, + } +} + #[derive(Default)] pub struct CheckReport{ // === METADATA CHECKS === @@ -204,13 +215,13 @@ impl Counts{ } } -pub fn check(dom:&rbx_dom_weak::WeakDom)->CheckReport{ +pub fn check(dom:&rbx_dom_weak::WeakDom)->CheckStatus{ // empty report with all checks failed let mut report=CheckReport::default(); // extract the root instance, otherwise immediately return let Ok(model_instance)=get_root_instance(&dom)else{ - return report; + return CheckStatus::Failed{report}; }; report.exactly_one_root=Check::Pass; @@ -223,10 +234,10 @@ pub fn check(dom:&rbx_dom_weak::WeakDom)->CheckReport{ } // extract model info - let MapInfo{display_name,creator,game_id}=get_mapinfo(&dom,model_instance); + let map_info=get_mapinfo(&dom,model_instance); // check DisplayName - if let Ok(display_name)=display_name{ + if let Ok(display_name)=map_info.display_name{ if !display_name.is_empty(){ report.has_display_name=Check::Pass; if display_name==display_name.to_title_case(){ @@ -236,14 +247,14 @@ pub fn check(dom:&rbx_dom_weak::WeakDom)->CheckReport{ } // check Creator - if let Ok(creator)=creator{ + if let Ok(creator)=map_info.creator{ if !creator.is_empty(){ report.has_creator=Check::Pass; } } // check GameID - if game_id.is_ok(){ + if map_info.game_id.is_ok(){ report.model_name_prefix_is_valid=Check::Pass; } @@ -298,11 +309,20 @@ pub fn check(dom:&rbx_dom_weak::WeakDom)->CheckReport{ report.no_duplicate_wormhole_out=Check::Pass; } - report + if report.pass(){ + CheckStatus::Passed{ + // TODO: refactor data structure to avoid pain + display_name:map_info.display_name.unwrap().to_owned(), + creator:map_info.creator.unwrap().to_owned(), + game_id:map_info.game_id.unwrap(), + } + }else{ + CheckStatus::Failed{report} + } } pub struct CheckReportAndVersion{ - pub report:CheckReport, + pub status:CheckStatus, pub version:u64, } @@ -329,8 +349,8 @@ impl crate::message_handler::MessageHandler{ // decode dom (slow!) let dom=maybe_gzip.read_with(read_dom,read_dom).map_err(Error::ModelFileDecode)?; - let report=check(&dom); + let status=check(&dom); - Ok(CheckReportAndVersion{report,version}) + Ok(CheckReportAndVersion{status,version}) } } diff --git a/validation/src/check_mapfix.rs b/validation/src/check_mapfix.rs index a562ed0..09585dd 100644 --- a/validation/src/check_mapfix.rs +++ b/validation/src/check_mapfix.rs @@ -1,4 +1,4 @@ -use crate::check::CheckReportAndVersion; +use crate::check::{CheckStatus,CheckReportAndVersion}; use crate::nats_types::CheckMapfixRequest; #[allow(dead_code)] @@ -21,23 +21,27 @@ impl crate::message_handler::MessageHandler{ // update the mapfix depending on the result match check_result{ - Ok(CheckReportAndVersion{report,version})=>{ - if report.pass(){ + Ok(CheckReportAndVersion{status,version})=>{ + match status{ // update the mapfix model status to submitted + CheckStatus::Passed{display_name,creator,game_id}=> self.api.action_mapfix_submitted( submissions_api::types::ActionMapfixSubmittedRequest{ MapfixID:mapfix_id, ModelVersion:version, + DisplayName:display_name, + Creator:creator, + GameID:game_id as u32, } - ).await.map_err(Error::ApiActionMapfixCheck)?; - }else{ + ).await.map_err(Error::ApiActionMapfixCheck)?, // update the mapfix model status to request changes + CheckStatus::Failed{report}=> self.api.action_mapfix_request_changes( submissions_api::types::ActionMapfixRequestChangesRequest{ MapfixID:mapfix_id, ErrorMessage:report.to_string(), } - ).await.map_err(Error::ApiActionMapfixCheck)?; + ).await.map_err(Error::ApiActionMapfixCheck)?, } }, Err(e)=>{ diff --git a/validation/src/check_submission.rs b/validation/src/check_submission.rs index 05d0f18..b20f976 100644 --- a/validation/src/check_submission.rs +++ b/validation/src/check_submission.rs @@ -1,4 +1,4 @@ -use crate::check::CheckReportAndVersion; +use crate::check::{CheckStatus,CheckReportAndVersion}; use crate::nats_types::CheckSubmissionRequest; #[allow(dead_code)] @@ -21,23 +21,27 @@ impl crate::message_handler::MessageHandler{ // update the submission depending on the result match check_result{ - Ok(CheckReportAndVersion{report,version})=>{ - if report.pass(){ + Ok(CheckReportAndVersion{status,version})=>{ + match status{ // update the submission model status to submitted + CheckStatus::Passed{display_name,creator,game_id}=> self.api.action_submission_submitted( submissions_api::types::ActionSubmissionSubmittedRequest{ SubmissionID:submission_id, ModelVersion:version, + DisplayName:display_name, + Creator:creator, + GameID:game_id as u32, } - ).await.map_err(Error::ApiActionSubmissionCheck)?; - }else{ + ).await.map_err(Error::ApiActionSubmissionCheck)?, // update the submission model status to request changes + CheckStatus::Failed{report}=> self.api.action_submission_request_changes( submissions_api::types::ActionSubmissionRequestChangesRequest{ SubmissionID:submission_id, ErrorMessage:report.to_string(), } - ).await.map_err(Error::ApiActionSubmissionCheck)?; + ).await.map_err(Error::ApiActionSubmissionCheck)?, } }, Err(e)=>{ diff --git a/validation/src/rbx_util.rs b/validation/src/rbx_util.rs index 598f35f..db50048 100644 --- a/validation/src/rbx_util.rs +++ b/validation/src/rbx_util.rs @@ -89,6 +89,7 @@ pub struct MapInfo<'a>{ pub game_id:Result<GameID,ParseGameIDError>, } +#[derive(Debug)] pub enum StringValueError{ ObjectNotFound, ValueNotSet,