from rest_framework.permissions import IsAuthenticated from rest_framework.request import Request from rest_framework.response import Response from rest_framework.views import APIView from ..models import PcpFeGroupe, SousVivier, FormationEmploi from ..serializers.current_user import (CTX_KEY_PCP_FE_GROUPE, CTX_KEY_PROFILES, CTX_KEY_SOUS_VIVIERS, CTX_KEY_FORMATION_EMPLOIS, CTX_KEY_SOUS_VIVIERS_SUPER, UserInfoSerializer) from ..utils.decorators import class_logger from ..utils.permissions import KEY_READ, Profiles, get_profile_summary from .commun import execution_time_viewset, query_count_viewset @class_logger @execution_time_viewset @query_count_viewset class CurrentUserView(APIView): """ Cette classe est dédiée au vue de l'utilisateur courant: """ permission_classes = [IsAuthenticated] # TODO adapter au nouveau système de gestion de profils def get(self, request: Request) -> Response: """ Renvoie les informations de l'utilisateur connecté. :param request: requête contenant l'utilisateur authentifié :type request: class:`rest_framework.request.Request` :return: réponse contenant les informations de l'utilisateur dont la formation emploi group et les sous-viviers specifiques à cet utilisateur. :rtype: class:`rest_framework.response.Response` """ user = request.user summary = get_profile_summary(request.user) profiles = summary.profiles.get(KEY_READ, ()) return Response(UserInfoSerializer(user, context={ # CTX_KEY_SOUS_VIVIERS_SUPER: SousVivier.objects.all() if Profiles.SUPER in profiles else None, CTX_KEY_SOUS_VIVIERS: SousVivier.objects.filter(gestionnaires__id=request.user.id), CTX_KEY_FORMATION_EMPLOIS: FormationEmploi.objects.filter(gestionnaires__id=request.user.id).order_by('fe_mere_credo').distinct('fe_mere_credo'), CTX_KEY_PCP_FE_GROUPE: PcpFeGroupe.objects.filter(gestionnaire_id=user.pk).first(), CTX_KEY_PROFILES: summary.profiles }).data)