From 9c9b681e141b8eb55f17e5f2ca855f85d299a9bb Mon Sep 17 00:00:00 2001
From: Quaternions <krakow20@gmail.com>
Date: Wed, 2 Apr 2025 14:45:11 -0700
Subject: [PATCH] wip: create

---
 validation/src/create_mapfix.rs     | 30 +++++++++++++++++++++++++++++
 validation/src/create_submission.rs | 30 +++++++++++++++++++++++++++++
 validation/src/main.rs              |  2 ++
 validation/src/message_handler.rs   |  4 ++++
 validation/src/nats_types.rs        | 16 +++++++++++++++
 5 files changed, 82 insertions(+)
 create mode 100644 validation/src/create_mapfix.rs
 create mode 100644 validation/src/create_submission.rs

diff --git a/validation/src/create_mapfix.rs b/validation/src/create_mapfix.rs
new file mode 100644
index 0000000..dbfbc49
--- /dev/null
+++ b/validation/src/create_mapfix.rs
@@ -0,0 +1,30 @@
+use crate::nats_types::CreateMapfixRequest;
+
+#[allow(dead_code)]
+#[derive(Debug)]
+pub enum Error{
+	Get(rbx_asset::cookie::GetError),
+	ApiActionMapfixCreate(submissions_api::Error),
+}
+impl std::fmt::Display for Error{
+	fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{
+		write!(f,"{self:?}")
+	}
+}
+impl std::error::Error for Error{}
+
+impl crate::message_handler::MessageHandler{
+	pub async fn create_mapfix(&self,create_info:CreateMapfixRequest)->Result<(),Error>{
+		// download the map model version
+		let model_data=self.cookie_context.get_asset(rbx_asset::cookie::GetAssetRequest{
+			asset_id:create_info.ModelID,
+			version:None,
+		}).await.map_err(Error::Get)?;
+
+		// parse create fields out of asset
+
+		// call create on api
+
+		Ok(())
+	}
+}
diff --git a/validation/src/create_submission.rs b/validation/src/create_submission.rs
new file mode 100644
index 0000000..563798b
--- /dev/null
+++ b/validation/src/create_submission.rs
@@ -0,0 +1,30 @@
+use crate::nats_types::CreateSubmissionRequest;
+
+#[allow(dead_code)]
+#[derive(Debug)]
+pub enum Error{
+	Get(rbx_asset::cookie::GetError),
+	ApiActionSubmissionCreate(submissions_api::Error),
+}
+impl std::fmt::Display for Error{
+	fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{
+		write!(f,"{self:?}")
+	}
+}
+impl std::error::Error for Error{}
+
+impl crate::message_handler::MessageHandler{
+	pub async fn create_submission(&self,create_info:CreateSubmissionRequest)->Result<(),Error>{
+		// download the map model version
+		let model_data=self.cookie_context.get_asset(rbx_asset::cookie::GetAssetRequest{
+			asset_id:create_info.ModelID,
+			version:None,
+		}).await.map_err(Error::Get)?;
+
+		// parse create fields out of asset
+
+		// call create on api
+
+		Ok(())
+	}
+}
diff --git a/validation/src/main.rs b/validation/src/main.rs
index 355b0b4..5c7a458 100644
--- a/validation/src/main.rs
+++ b/validation/src/main.rs
@@ -3,6 +3,8 @@ use futures::StreamExt;
 mod message_handler;
 mod nats_types;
 mod types;
+mod create_mapfix;
+mod create_submission;
 mod upload_mapfix;
 mod upload_submission;
 mod validator;
diff --git a/validation/src/message_handler.rs b/validation/src/message_handler.rs
index 1f1f453..bff0f10 100644
--- a/validation/src/message_handler.rs
+++ b/validation/src/message_handler.rs
@@ -5,6 +5,8 @@ pub enum HandleMessageError{
 	DoubleAck(async_nats::Error),
 	Json(serde_json::Error),
 	UnknownSubject(String),
+	CreateMapfix(crate::create_mapfix::Error),
+	CreateSubmission(crate::create_submission::Error),
 	UploadMapfix(crate::upload_mapfix::Error),
 	UploadSubmission(crate::upload_submission::Error),
 	ValidateMapfix(crate::validate_mapfix::Error),
@@ -45,6 +47,8 @@ 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.create"=>self.create_mapfix(from_slice(&message.payload)?).await.map_err(HandleMessageError::CreateMapfix),
+			"maptest.submissions.create"=>self.create_submission(from_slice(&message.payload)?).await.map_err(HandleMessageError::CreateSubmission),
 			"maptest.mapfixes.upload"=>self.upload_mapfix(from_slice(&message.payload)?).await.map_err(HandleMessageError::UploadMapfix),
 			"maptest.submissions.upload"=>self.upload_submission(from_slice(&message.payload)?).await.map_err(HandleMessageError::UploadSubmission),
 			"maptest.mapfixes.validate"=>self.validate_mapfix(from_slice(&message.payload)?).await.map_err(HandleMessageError::ValidateMapfix),
diff --git a/validation/src/nats_types.rs b/validation/src/nats_types.rs
index 15f0924..1401f83 100644
--- a/validation/src/nats_types.rs
+++ b/validation/src/nats_types.rs
@@ -4,6 +4,22 @@
 // Requests are sent from maps-service to validator
 // Validation invokes the REST api to update the submissions
 
+#[allow(nonstandard_style)]
+#[derive(serde::Deserialize)]
+pub struct CreateSubmissionRequest{
+	// operation_id is passed back in the response message
+	pub OperationID:i32,
+	pub ModelID:u64,
+}
+
+#[allow(nonstandard_style)]
+#[derive(serde::Deserialize)]
+pub struct CreateMapfixRequest{
+	pub OperationID:i32,
+	pub ModelID:u64,
+	pub TargetAssetID:u64,
+}
+
 #[allow(nonstandard_style)]
 #[derive(serde::Deserialize)]
 pub struct ValidateSubmissionRequest{