import os from ..constants import PROJECTS_DIR from ..game_dir import game_dir from .project_slug import build_slug, split_slug def move_game(old_slug, new_owner_folder): """Renomme le dossier PROPRIÉTAIRE d'un compte — utilisé quand un utilisateur change son adresse email (voir routes/auth/profile.py, owner_folder = slugify(email) pour un compte "user", voir db/games/project_slug.py) : le dossier physique doit suivre. Renomme le dossier propriétaire ENTIER en un coup (déplace tous les projets de ce compte ensemble — prêt pour un futur multi-projet, même si un seul aujourd'hui), pas juste un projet. Rend le nouveau dossier propriétaire unique de la même façon que create_game() si, par un hasard extrême, il correspond déjà à un dossier existant. Renvoie le nouveau slug composé FINAL (même projet, propriétaire renommé), à enregistrer comme nouveau project_slug.""" old_owner_folder, project_part = split_slug(old_slug) if project_part is None: # Slug pas encore migré vers la structure par utilisateur (voir # scripts/migrate_flat_project_slugs.py) — repli sur l'ancien # comportement plat (renomme le dossier du projet lui-même). if old_slug == new_owner_folder: return old_slug base = new_owner_folder n = 2 while os.path.isdir(game_dir(base)): base = f"{new_owner_folder}-{n}" n += 1 os.rename(game_dir(old_slug), game_dir(base)) return base if old_owner_folder == new_owner_folder: return old_slug base = new_owner_folder n = 2 while os.path.isdir(os.path.join(PROJECTS_DIR, base)): base = f"{new_owner_folder}-{n}" n += 1 os.rename(os.path.join(PROJECTS_DIR, old_owner_folder), os.path.join(PROJECTS_DIR, base)) return build_slug(base, project_part)