from firebase_admin import firestore from ..core.firebase import db from typing import List, Dict class ClipAssignmentService: def __init__(self): self.db = db async def assign_clips_to_user(self, user_id: str, role: str): """ Affecte les clips à un utilisateur en fonction de son rôle Pour le moment, admin et user_intern ont accès à tous les clips """ if role not in ["admin", "user_intern"]: return try: # Récupérer tous les clips disponibles clips_ref = self.db.collection("clips") clips = clips_ref.stream() # Récupérer l'utilisateur user_ref = self.db.collection("users").document(user_id) user_data = user_ref.get().to_dict() or {} # Initialiser la liste des clips si elle n'existe pas if "clips" not in user_data: user_data["clips"] = [] # Créer un set des clip_ids existants pour l'utilisateur existing_clip_ids = {clip["clip_id"] for clip in user_data["clips"]} # Ajouter les nouveaux clips for clip in clips: clip_data = clip.to_dict() clip_id = clip_data["clip_id"] if clip_id not in existing_clip_ids: user_data["clips"].append({ "clip_id": clip_id, "sport_id": clip_data["sport_id"], "url": clip_data["url"], "status": "ready", "annotations": [] }) # Mettre à jour le document utilisateur user_ref.set(user_data, merge=True) return {"message": "Clips assignés avec succès"} except Exception as e: print(f"Erreur lors de l'assignation des clips: {str(e)}") raise e async def remove_clip_from_user(self, user_id: str, clip_id: str): """Retire un clip spécifique d'un utilisateur""" try: user_ref = self.db.collection("users").document(user_id) user_data = user_ref.get().to_dict() if "clips" in user_data: user_data["clips"] = [ clip for clip in user_data["clips"] if clip["clip_id"] != clip_id ] user_ref.set(user_data, merge=True) return {"message": "Clip retiré avec succès"} except Exception as e: print(f"Erreur lors du retrait du clip: {str(e)}") raise e