validator: add mapfix capability

This commit is contained in:
Quaternions 2025-03-31 18:28:21 -07:00
parent 9dd7a41d8f
commit 96ace736f4
Signed by: Quaternions
GPG Key ID: D0DF5964F79AC131
5 changed files with 50 additions and 3 deletions

@ -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);

@ -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)]

@ -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()))
}

@ -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,
}

@ -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