BackendJunsen / app /services /clip_assignment.py
2nzi's picture
update app
16c970a verified
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