From 53b37690943edd12c2bb4ee57e8ae3dba457776e Mon Sep 17 00:00:00 2001
From: Quaternions <krakow20@gmail.com>
Date: Wed, 2 Apr 2025 15:31:15 -0700
Subject: [PATCH] submissions-api: add create internal endpoints

---
 validation/api/src/internal.rs | 22 +++++++++++++++++++
 validation/api/src/types.rs    | 40 ++++++++++++++++++++++++++++++++--
 2 files changed, 60 insertions(+), 2 deletions(-)

diff --git a/validation/api/src/internal.rs b/validation/api/src/internal.rs
index 9897f9f..b77e9f4 100644
--- a/validation/api/src/internal.rs
+++ b/validation/api/src/internal.rs
@@ -150,6 +150,17 @@ impl Context{
 		).await.map_err(Error::Response)?
 		.json().await.map_err(Error::ReqwestJson)
 	}
+	pub async fn create_submission<'a>(&self,config:CreateSubmissionRequest<'a>)->Result<SubmissionIDResponse,Error>{
+		let url_raw=format!("{}/submissions",self.0.base_url);
+		let url=reqwest::Url::parse(url_raw.as_str()).map_err(Error::Parse)?;
+
+		let body=serde_json::to_string(&config).map_err(Error::JSON)?;
+
+		response_ok(
+			self.0.post(url,body).await.map_err(Error::Reqwest)?
+		).await.map_err(Error::Response)?
+		.json().await.map_err(Error::ReqwestJson)
+	}
 	// simple submission endpoints
 	action!("submissions",action_submission_validated,config,SubmissionID,"validator-validated",config.0,);
 	action!("submissions",update_submission_validated_model,config,UpdateSubmissionModelRequest,"validated-model",config.SubmissionID,
@@ -162,6 +173,17 @@ impl Context{
 	action!("submissions",action_submission_accepted,config,ActionSubmissionAcceptedRequest,"validator-failed",config.SubmissionID,
 		("StatusMessage",config.StatusMessage.as_str())
 	);
+	pub async fn create_mapfix<'a>(&self,config:CreateMapfixRequest<'a>)->Result<MapfixIDResponse,Error>{
+		let url_raw=format!("{}/mapfixes",self.0.base_url);
+		let url=reqwest::Url::parse(url_raw.as_str()).map_err(Error::Parse)?;
+
+		let body=serde_json::to_string(&config).map_err(Error::JSON)?;
+
+		response_ok(
+			self.0.post(url,body).await.map_err(Error::Reqwest)?
+		).await.map_err(Error::Response)?
+		.json().await.map_err(Error::ReqwestJson)
+	}
 	// simple mapfixes endpoints
 	action!("mapfixes",action_mapfix_validated,config,MapfixID,"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 6cdd357..b6d37a4 100644
--- a/validation/api/src/types.rs
+++ b/validation/api/src/types.rs
@@ -61,6 +61,42 @@ pub async fn response_ok(response:reqwest::Response)->Result<reqwest::Response,R
 	}
 }
 
+
+#[allow(nonstandard_style)]
+#[derive(Clone,Debug,serde::Serialize)]
+pub struct CreateMapfixRequest<'a>{
+	pub OperationID:i32,
+	pub AssetOwner:i64,
+	pub DisplayName:&'a str,
+	pub Creator:&'a str,
+	pub GameID:i32,
+	pub AssetID:u64,
+	pub AssetVersion:u64,
+	pub TargetAssetID:u64,
+}
+#[allow(nonstandard_style)]
+#[derive(Clone,Debug,serde::Deserialize)]
+pub struct MapfixIDResponse{
+	pub ID:MapfixID,
+}
+
+#[allow(nonstandard_style)]
+#[derive(Clone,Debug,serde::Serialize)]
+pub struct CreateSubmissionRequest<'a>{
+	pub OperationID:i32,
+	pub AssetOwner:i64,
+	pub DisplayName:&'a str,
+	pub Creator:&'a str,
+	pub GameID:i32,
+	pub AssetID:u64,
+	pub AssetVersion:u64,
+}
+#[allow(nonstandard_style)]
+#[derive(Clone,Debug,serde::Deserialize)]
+pub struct SubmissionIDResponse{
+	pub ID:SubmissionID,
+}
+
 #[derive(Clone,Copy,Debug,PartialEq,Eq,serde::Serialize,serde::Deserialize)]
 pub struct ScriptID(pub(crate)i64);
 #[derive(Clone,Copy,Debug,serde::Serialize,serde::Deserialize)]
@@ -200,7 +236,7 @@ pub struct ActionSubmissionAcceptedRequest{
 	pub StatusMessage:String,
 }
 
-#[derive(Clone,Copy,Debug)]
+#[derive(Clone,Copy,Debug,serde::Deserialize)]
 pub struct SubmissionID(pub i64);
 
 #[allow(nonstandard_style)]
@@ -224,5 +260,5 @@ pub struct ActionMapfixAcceptedRequest{
 	pub StatusMessage:String,
 }
 
-#[derive(Clone,Copy,Debug)]
+#[derive(Clone,Copy,Debug,serde::Deserialize)]
 pub struct MapfixID(pub i64);