File size: 2,831 Bytes
16c970a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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