48 lines
1.7 KiB
Python
48 lines
1.7 KiB
Python
from rest_framework import viewsets
|
|
from rest_framework.permissions import IsAuthenticated
|
|
from rest_framework.exceptions import PermissionDenied
|
|
|
|
from .models import Notificacion, TipoNotificacion
|
|
from .serializers import NotificacionSerializer, TipoNotificacionSerializer
|
|
from core.permissions import require_permission
|
|
|
|
|
|
class TipoNotificacionViewSet(viewsets.ModelViewSet):
|
|
queryset = TipoNotificacion.objects.all()
|
|
serializer_class = TipoNotificacionSerializer
|
|
http_method_names = ['get']
|
|
permission_classes = [IsAuthenticated]
|
|
my_tags = ['Notificaciones']
|
|
|
|
def get_queryset(self):
|
|
return self.queryset.order_by('tipo')
|
|
|
|
|
|
class NotificacionViewSet(viewsets.ModelViewSet):
|
|
queryset = Notificacion.objects.all()
|
|
serializer_class = NotificacionSerializer
|
|
http_method_names = ['get', 'post', 'put', 'patch', 'delete']
|
|
filterset_fields = ['visto']
|
|
my_tags = ['Notificaciones']
|
|
|
|
def get_permissions(self):
|
|
if self.action in ('list', 'retrieve'):
|
|
return [IsAuthenticated(), require_permission('notificaciones.view')()]
|
|
return [IsAuthenticated()]
|
|
|
|
def get_queryset(self):
|
|
if getattr(self, 'swagger_fake_view', False):
|
|
return Notificacion.objects.none()
|
|
user = self.request.user
|
|
if not user.is_authenticated:
|
|
return Notificacion.objects.none()
|
|
return Notificacion.objects.filter(dirigido=user)
|
|
|
|
def perform_create(self, serializer):
|
|
if not self.request.user.is_authenticated:
|
|
raise PermissionDenied("Usuario no autenticado")
|
|
if self.request.user.is_superuser:
|
|
serializer.save()
|
|
return
|
|
raise PermissionDenied("No tienes permiso para crear notificaciones para otros usuarios")
|