manage deleted refered player, participant, objective, sector

This commit is contained in:
Maxime Réaux 2026-02-05 16:17:18 +01:00
parent 7afbb5ea1d
commit 7fbdacf97c
6 changed files with 322 additions and 81 deletions

View file

@ -4,6 +4,7 @@ import json
import shutil
from datetime import datetime
from warchron.model.exception import DeletionForbidden
from warchron.model.player import Player
from warchron.model.war import War
from warchron.model.war_participant import WarParticipant
@ -84,7 +85,16 @@ class Model:
return list(self.players.values())
def remove_player(self, player_id: str) -> None:
# TODO manage war_participants referring to it
wars_using_player: List[str] = []
for war in self.wars.values():
if war.has_player(player_id):
wars_using_player.append(war.name)
if wars_using_player:
wars_str = ", ".join(wars_using_player)
raise DeletionForbidden(
f"This player is participating in war(s): {wars_str}.\n"
"Remove it from participants first."
)
del self.players[player_id]
# War methods
@ -100,6 +110,7 @@ class Model:
def get_war(self, id: str) -> War:
return self.wars[id]
# TODO replace multiloops by internal has_* method
def get_war_by_campaign(self, campaign_id: str) -> War:
for war in self.wars.values():
for camp in war.campaigns:
@ -107,6 +118,7 @@ class Model:
return war
raise KeyError(f"Campaign {campaign_id} not found in any War")
# TODO replace multiloops by internal has_* method
def get_war_by_sector(self, sector_id: str) -> War:
for war in self.wars.values():
for camp in war.campaigns:
@ -115,6 +127,7 @@ class Model:
return war
raise KeyError(f"Sector {sector_id} not found in any War")
# TODO replace multiloops by internal has_* method
def get_war_by_round(self, round_id: str) -> War:
for war in self.wars.values():
for camp in war.campaigns:
@ -123,6 +136,7 @@ class Model:
return war
raise KeyError(f"Round {round_id} not found in any War")
# TODO replace multiloops by internal has_* method
def get_war_by_objective(self, objective_id: str) -> War:
for war in self.wars.values():
for obj in war.objectives.values():
@ -160,6 +174,7 @@ class Model:
war = self.get_war(war_id)
return war.add_objective(name, description)
# TODO replace multiloops by internal has_* method
def get_objective(self, objective_id: str) -> Objective:
for war in self.wars.values():
for obj in war.objectives.values():
@ -191,6 +206,7 @@ class Model:
war = self.get_war(war_id)
return war.add_war_participant(player_id, faction)
# TODO replace multiloops by internal has_* method
def get_war_participant(self, participant_id: str) -> WarParticipant:
for war in self.wars.values():
for part in war.participants.values():
@ -219,6 +235,7 @@ class Model:
war = self.get_war(war_id)
return war.add_campaign(name, month)
# TODO replace multiloops by internal has_* method
def get_campaign(self, campaign_id: str) -> Campaign:
for war in self.wars.values():
for campaign in war.campaigns:
@ -269,6 +286,7 @@ class Model:
camp = self.get_campaign(campaign_id)
return camp.add_sector(name, round_id, major_id, minor_id, influence_id)
# TODO replace multiloops by internal has_* method
def get_sector(self, sector_id: str) -> Sector:
for war in self.wars.values():
for camp in war.campaigns:
@ -318,6 +336,7 @@ class Model:
war_part = war.get_war_participant(participant_id)
return self.players[war_part.player_id].name
# TODO replace multiloops by internal has_* method
def get_campaign_participant(self, participant_id: str) -> CampaignParticipant:
for war in self.wars.values():
for camp in war.campaigns:
@ -352,6 +371,7 @@ class Model:
war = self.get_war_by_campaign(campaign_id)
return war.add_round(campaign_id)
# TODO replace multiloops by internal has_* method
def get_round(self, round_id: str) -> Round:
for war in self.wars.values():
for camp in war.campaigns: