From 4e15e642ce2bc416e1c1beee8f1929756f68183d Mon Sep 17 00:00:00 2001
From: Quaternions <krakow20@gmail.com>
Date: Mon, 25 Nov 2024 20:28:50 -0800
Subject: [PATCH] itzaname data structures impact

---
 validation/src/maptest.rs | 38 ++++++++++++++++++++++++++++----------
 1 file changed, 28 insertions(+), 10 deletions(-)

diff --git a/validation/src/maptest.rs b/validation/src/maptest.rs
index c8747e1..2110b4c 100644
--- a/validation/src/maptest.rs
+++ b/validation/src/maptest.rs
@@ -1,22 +1,38 @@
-use crate::types::Games;
+use std::collections::HashSet;
 
+type GameID=u32;
+type StyleID=u32;
+type TimeID=u64;
+
+// the status is supposed to walk up the phases ascending
 enum Status{
-	Accepted,
-	Rejected,//map council will not request changes, submit a new map
-	ChangesRequested,//map council requests changes
-	Submitted,//Submitted by owner for review by map council
-	UnderConstruction,//default state upon map creation
+	// Phase 3: Retired
+	Published,// pipeline is complete, map was published
+	Rejected,// map council will not request changes, submit a new map
+	// Phase 2: Staging
+	Publishing,// Admin clicked the publish button, publishing is in progress and should only take a second
+	Validated,// Validator validated the map, expose a "Publish" button to Admins
+	Accepted,// Reviewer accepts the map, trigger validation once and expose a "Validate" button to Reviewers
+	// Phase 1: Maptest
+	ChangesRequested,// map council requests changes
+	Submitted,// Submitted by owner for review by map council, expose "Accept" / "Reject" / "ChangesRequested" to reviewers
+	UnderConstruction,// default state upon pipeline creation
 }
 
 enum MaptestType{
 	// mapfixes change an existing map on staging game, so they know what map_id they upload to.
 	Mapfix{
-		//maps database entry id
-		map_id:u64,
+		//main game target asset id
+		asset_id:u64,
+		// How is this data entered?  It should be suggested by map maker and finalized by time deleter
+		//affected styles to be wiped upon publish
+		delete_styles:Option<HashSet<(GameID,StyleID)>>,
+		//affected times to be individually removed
+		delete_times:Option<HashSet<TimeID>>,
 	},
 	// map submissions create a new map entry in the staging map database when they are accepted.
 	Submission{
-		games:Games,
+		games:HashSet<GameID>,
 		creator:String,
 		display_name:String,
 	},
@@ -27,9 +43,11 @@ struct Map{
 	id:u64,
 	date:u64,
 	// int64 UserID who created the submission
-	// this user is allowed to change any data at any time, except for mapfix target map id
+	// this user is allowed to change any data in the maptest phase, except for mapfix target map id
 	owner:u64,
 	model_id:u64,// asset id of the most recently submitted model
+	model_version:u64,// snapshot of the model to prevent tampering
+	is_completed:bool,// has this asset version been completed by any player
 	maptest_type:MaptestType,
 	status:Status,
 }