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 — owner_folder est l'id du compte (voir db/games/project_slug.py, routes/games/ games_new.py) : ne change donc plus jamais après coup en usage normal, mais reste utile pour une migration ponctuelle (voir scripts/migrate_owner_folders_to_user_id.py, qui a besoin de renommer les anciens dossiers slugify(email) vers l'id du compte). Renomme le dossier propriétaire ENTIER en un coup (déplace tous les projets de ce compte ensemble), 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)