Spaces:
Sleeping
Sleeping
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 |