factory/apps/ecm/views.py

69 lines
2.4 KiB
Python

from apps.ecm.models import Event, EventCate, Push, PushSetting
from apps.ecm.serializers import (EventCateListSerializer, EventCateUpdateSerializer, EventHandleSerializer,
EventSerializer, PushSerializer, PushSettingsSerializer)
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from rest_framework.mixins import UpdateModelMixin, ListModelMixin, RetrieveModelMixin
from django.db import transaction
from rest_framework.decorators import action
from rest_framework import serializers
from django.utils import timezone
from rest_framework.response import Response
# Create your views here.
class EventCateViewSet(UpdateModelMixin, ListModelMixin, CustomGenericViewSet):
perms_map = {'put': 'eventcate:update'}
queryset = EventCate.objects.all()
list_serializer_class = EventCateListSerializer
update_serializer_class = EventCateUpdateSerializer
class PushSettingViewSet(CustomModelViewSet):
queryset = PushSetting.objects.all()
serializer_class = PushSettingsSerializer
class EventViewSet(ListModelMixin, RetrieveModelMixin, CustomGenericViewSet):
perms_map = {'get': 'event:view'}
queryset = Event.objects.all()
serializer_class = EventSerializer
@transaction.atomic
@action(methods=['post'], detail=True, perms_map={'post': 'event:handle'},
serializer_class=EventHandleSerializer)
def handle(self, request, pk=None):
"""
处理事件
"""
obj = self.get_object()
data = request.data
obj.handle_desc = data.get('handle_desc', '')
obj.handle_user = request.user
obj.handle_time = timezone.now()
obj.save()
return Response()
class PushViewSet(ListModelMixin, CustomGenericViewSet):
perms_map = {'get': 'push:view'}
queryset = Push.objects.all()
serializer_class = PushSerializer
@action(methods=['get'], detail=False, perms_map={'get': '*'})
def my(self, request, *args, **kwargs):
"""
推送给我的
"""
user = self.request.user
queryset = self.filter_queryset(self.get_queryset().filter(pusher=user))
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)