From 96ace736f46c1299bb9704b9600e4ef4e08434bf Mon Sep 17 00:00:00 2001 From: Quaternions <krakow20@gmail.com> Date: Mon, 31 Mar 2025 18:28:21 -0700 Subject: [PATCH] validator: add mapfix capability --- validation/api/src/types.rs | 24 ++++++++++++++++++++++++ validation/src/main.rs | 2 ++ validation/src/message_handler.rs | 8 ++++++++ validation/src/nats_types.rs | 9 +++++++++ validation/src/validator.rs | 10 +++++++--- 5 files changed, 50 insertions(+), 3 deletions(-) diff --git a/validation/api/src/types.rs b/validation/api/src/types.rs index 60d1f4c..6cdd357 100644 --- a/validation/api/src/types.rs +++ b/validation/api/src/types.rs @@ -202,3 +202,27 @@ pub struct ActionSubmissionAcceptedRequest{ #[derive(Clone,Copy,Debug)] pub struct SubmissionID(pub i64); + +#[allow(nonstandard_style)] +#[derive(Clone,Debug)] +pub struct UpdateMapfixModelRequest{ + pub MapfixID:i64, + pub ModelID:u64, + pub ModelVersion:u64, +} + +#[allow(nonstandard_style)] +#[derive(Clone,Debug)] +pub struct ActionMapfixUploadedRequest{ + pub MapfixID:i64, +} + +#[allow(nonstandard_style)] +#[derive(Clone,Debug)] +pub struct ActionMapfixAcceptedRequest{ + pub MapfixID:i64, + pub StatusMessage:String, +} + +#[derive(Clone,Copy,Debug)] +pub struct MapfixID(pub i64); diff --git a/validation/src/main.rs b/validation/src/main.rs index 681e529..9234aa8 100644 --- a/validation/src/main.rs +++ b/validation/src/main.rs @@ -4,8 +4,10 @@ mod message_handler; mod nats_types; mod types; mod uploader; +mod upload_mapfix; mod upload_submission; mod validator; +mod validate_mapfix; mod validate_submission; #[allow(dead_code)] diff --git a/validation/src/message_handler.rs b/validation/src/message_handler.rs index 3b7bdb8..c6cd200 100644 --- a/validation/src/message_handler.rs +++ b/validation/src/message_handler.rs @@ -5,7 +5,9 @@ pub enum HandleMessageError{ DoubleAck(async_nats::Error), Json(serde_json::Error), UnknownSubject(String), + UploadMapfix(crate::upload_mapfix::UploadError), UploadSubmission(crate::upload_submission::UploadError), + ValidateMapfix(crate::validate_mapfix::ValidateMapfixError), ValidateSubmission(crate::validate_submission::ValidateSubmissionError), } impl std::fmt::Display for HandleMessageError{ @@ -22,7 +24,9 @@ fn from_slice<'a,T:serde::de::Deserialize<'a>>(slice:&'a [u8])->Result<T,HandleM } pub struct MessageHandler{ + upload_mapfix:crate::upload_mapfix::Uploader, upload_submission:crate::upload_submission::Uploader, + validate_mapfix:crate::validate_mapfix::Validator, validate_submission:crate::validate_submission::Validator, } @@ -33,7 +37,9 @@ impl MessageHandler{ api:submissions_api::internal::Context, )->Self{ Self{ + upload_mapfix:crate::upload_mapfix::Uploader::new(crate::uploader::Uploader::new(cookie_context.clone(),group_id,api.clone())), upload_submission:crate::upload_submission::Uploader::new(crate::uploader::Uploader::new(cookie_context.clone(),group_id,api.clone())), + validate_mapfix:crate::validate_mapfix::Validator::new(crate::validator::Validator::new(cookie_context.clone(),api.clone())), validate_submission:crate::validate_submission::Validator::new(crate::validator::Validator::new(cookie_context,api)), } } @@ -41,7 +47,9 @@ impl MessageHandler{ let message=message_result.map_err(HandleMessageError::Messages)?; message.double_ack().await.map_err(HandleMessageError::DoubleAck)?; match message.subject.as_str(){ + "maptest.mapfixes.upload"=>self.upload_mapfix.upload(from_slice(&message.payload)?).await.map_err(HandleMessageError::UploadMapfix), "maptest.submissions.upload"=>self.upload_submission.upload(from_slice(&message.payload)?).await.map_err(HandleMessageError::UploadSubmission), + "maptest.mapfixes.validate"=>self.validate_mapfix.validate(from_slice(&message.payload)?).await.map_err(HandleMessageError::ValidateMapfix), "maptest.submissions.validate"=>self.validate_submission.validate(from_slice(&message.payload)?).await.map_err(HandleMessageError::ValidateSubmission), other=>Err(HandleMessageError::UnknownSubject(other.to_owned())) } diff --git a/validation/src/nats_types.rs b/validation/src/nats_types.rs index dc2369c..15f0924 100644 --- a/validation/src/nats_types.rs +++ b/validation/src/nats_types.rs @@ -33,3 +33,12 @@ pub struct UploadSubmissionRequest{ pub ModelVersion:u64, pub ModelName:String, } + +#[allow(nonstandard_style)] +#[derive(serde::Deserialize)] +pub struct UploadMapfixRequest{ + pub MapfixID:i64, + pub ModelID:u64, + pub ModelVersion:u64, + pub TargetAssetID:u64, +} diff --git a/validation/src/validator.rs b/validation/src/validator.rs index 6babbf4..5d3b1ed 100644 --- a/validation/src/validator.rs +++ b/validation/src/validator.rs @@ -42,7 +42,7 @@ pub enum ValidateError{ ApiCreateScript(submissions_api::Error), ApiCreateScriptPolicy(submissions_api::Error), ApiGetScriptFromHash(submissions_api::types::SingleItemError), - ApiUpdateMapfixModelUnimplemented, + ApiUpdateMapfixModel(submissions_api::Error), ApiUpdateSubmissionModel(submissions_api::Error), ModelFileRootMustHaveOneChild, ModelFileChildRefIsNil, @@ -266,9 +266,13 @@ impl Validator{ }; match validate_info.ResourceID{ - ResourceID::Mapfix(_mapfix_id)=>{ + ResourceID::Mapfix(mapfix_id)=>{ // update the mapfix to use the validated model - return Err(ValidateError::ApiUpdateMapfixModelUnimplemented); + self.api.update_mapfix_validated_model(submissions_api::types::UpdateMapfixModelRequest{ + MapfixID:mapfix_id, + ModelID:model_id, + ModelVersion:1, //TODO + }).await.map_err(ValidateError::ApiUpdateMapfixModel)?; }, ResourceID::Submission(submission_id)=>{ // update the submission to use the validated model