Modèle de données By Year
Objets Unity
SimulationByYear: simulation et options propres à la famille;ActivityByYear: année courante, états, calendrier et données de l'activité;TeamByYear: équipe et données runtime;TeamDecisionsByYear: décisions par année;ResultsByYear: résultats annuels;TeamEvaluationByYear/StudentEvaluationByYear: évaluations;StaticDataByYear: base de static data des jeux annuels.
Controllers
Les classes ActivityByYearController, SimulationByYearController, TeamByYearController, TeamEvaluationByYearController et StudentEvaluationByYearController servent de couche runtime entre ces modèles et l'UI.
Documents serveur
flowchart TD
SIM[(simulation)] --> ACT[(activity)]
ACT --> TEAM[(teams)]
ACT --> GAME[(actDataGameSpec)]
TEAM --> DEC[team decisions / activities]
ACT --> RES[(results)]
TEAM --> ET[(evaluationTeam)]
SIM --> ES[(evaluation)]
TEAM --> LOG[(teamsLogbooks)]
currentYear / currentYearState
L'activité garde l'année courante et son état. Les transitions serveur utilisent notamment les états “not started”, “year started”, “generating” et “year finished”. Les contrôles Unity affichent l'écran approprié en fonction de cet état.
years[]
Chaque entrée annuelle peut porter les dates de début/fin et le flag de pratique. Le calendrier et le mode de gestion déterminent si les transitions se font manuellement ou automatiquement.
Ajouter un champ de décision ou de résultat By Year
Décision étudiante
TeamDecisions<Game> ou YearData selon son scope.
Ajouter la désérialisation avec une valeur compatible avec les anciennes équipes.
Ajouter le contrôle UI qui édite cette décision.
Ajouter la custom command serveur ou étendre celle qui possède déjà la décision.
Sauvegarder dans le bon yearData de l'équipe.
Envoyer un RTT game-specific si les coéquipiers doivent voir le changement.
Consommer la décision dans GenerateResults<Game>.
Mettre à jour anyDecisionsTaken() si cette décision compte pour déterminer si l'équipe a commencé.
Mettre à jour les bots si une équipe bot doit prendre cette décision.
Résultat annuel
generateCurrentYearResults().
Le persister dans results.
Ajouter le modèle Unity Results/ResultsByYear et désérialiser.
Ajouter report/tooltip/UI.
Si le champ participe à ActPerf, mettre à jour Eval<Game>.computeActPerfScore().
Si le champ participe au ranking, mettre à jour updateRankings<Game>().
Vérifier deleteResults()/reopen year.
Où placer une donnée annuelle
TeamDecisions<Game>.yearData[year] ou structure équivalente.
État d'équipe durable entre années
Team<Game> / team data persistante.
Résultat calculé d'une année
results.
Configuration immuable
Static data.
Donnée commune à toute l'activité
actDataGameSpec.
Compatibilité anciens documents
Une nouvelle propriété de team/activity doit être tolérante à l'absence. Si sa valeur doit absolument exister sur les vieux documents, utiliser la migration correspondante dans _utils/version/.