47 lines
2.1 KiB
Python
47 lines
2.1 KiB
Python
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)
|