Spaces:
Build error
Build error
| 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 |