mirror of
https://github.com/mediacms-io/mediacms.git
synced 2025-11-06 15:38:53 -05:00
46 lines
1.8 KiB
Python
46 lines
1.8 KiB
Python
from drf_yasg import openapi
|
|
from drf_yasg.utils import swagger_auto_schema
|
|
from rest_framework.parsers import JSONParser
|
|
from rest_framework.settings import api_settings
|
|
from rest_framework.views import APIView
|
|
|
|
from actions.models import USER_MEDIA_ACTIONS
|
|
|
|
from ..models import Media
|
|
from ..serializers import MediaSerializer
|
|
|
|
VALID_USER_ACTIONS = [action for action, name in USER_MEDIA_ACTIONS]
|
|
|
|
|
|
class UserActions(APIView):
|
|
parser_classes = (JSONParser,)
|
|
|
|
@swagger_auto_schema(
|
|
manual_parameters=[
|
|
openapi.Parameter(name='action', type=openapi.TYPE_STRING, in_=openapi.IN_PATH, description='action', required=True, enum=VALID_USER_ACTIONS),
|
|
],
|
|
tags=['Users'],
|
|
operation_summary='List user actions',
|
|
operation_description='Lists user actions',
|
|
)
|
|
def get(self, request, action):
|
|
media = []
|
|
if action in VALID_USER_ACTIONS:
|
|
if request.user.is_authenticated:
|
|
media = Media.objects.select_related("user").filter(mediaactions__user=request.user, mediaactions__action=action).order_by("-mediaactions__action_date")
|
|
elif request.session.session_key:
|
|
media = (
|
|
Media.objects.select_related("user")
|
|
.filter(
|
|
mediaactions__session_key=request.session.session_key,
|
|
mediaactions__action=action,
|
|
)
|
|
.order_by("-mediaactions__action_date")
|
|
)
|
|
|
|
pagination_class = api_settings.DEFAULT_PAGINATION_CLASS
|
|
paginator = pagination_class()
|
|
page = paginator.paginate_queryset(media, request)
|
|
serializer = MediaSerializer(page, many=True, context={"request": request})
|
|
return paginator.get_paginated_response(serializer.data)
|