mirror of
				https://github.com/task-17-lct/backend.git
				synced 2025-10-31 14:17:26 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			68 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from typing import Any
 | |
| from rest_framework import viewsets, mixins
 | |
| from rest_framework.request import Request
 | |
| from rest_framework.response import Response
 | |
| from passfinder.events.models import Event
 | |
| from passfinder.events.api.serializers import EventSerializer
 | |
| from random import choice
 | |
| from rest_framework.decorators import action
 | |
| from rest_framework.response import Response
 | |
| from .serializers import TinderProceedSerializer
 | |
| from passfinder.recomendations.models import UserPreferences
 | |
| from ..service.service import update_preferences_state, get_next_tinder, get_personal_concerts_recommendation, \
 | |
|     get_personal_plays_recommendation, get_personal_movies_recommendation
 | |
| from django.views.decorators.csrf import csrf_exempt
 | |
| 
 | |
| 
 | |
| 
 | |
| class TinderView(viewsets.GenericViewSet):
 | |
|     serializer_class = EventSerializer
 | |
|     model = Event
 | |
|     queryset = Event.objects.all()
 | |
| 
 | |
|     @action(methods=['GET'], detail=False, serializer_class=EventSerializer)
 | |
|     def start(self, request: Request, *args: Any, **kwargs: Any):
 | |
|         UserPreferences.objects.get_or_create(user=request.user)
 | |
|         event = EventSerializer(choice(Event.objects.all()))
 | |
|         return Response(data=event.data, status=200)
 | |
|     
 | |
|     @csrf_exempt
 | |
|     @action(methods=['POST'], detail=True, serializer_class=TinderProceedSerializer)
 | |
|     def proceed(self, request: Request, pk):
 | |
|         update_preferences_state(request.user, Event.objects.get(oid=pk), request.data['action'])
 | |
|         event = get_next_tinder(request.user, Event.objects.get(oid=pk), request.data['action'])
 | |
|         if event is None:
 | |
|             return Response(data={}, status=404)
 | |
|         return Response(data={'event': EventSerializer(event).data}, status=200)
 | |
| 
 | |
| 
 | |
| class PersonalRecommendation(viewsets.GenericViewSet):
 | |
|     serializer_class = EventSerializer
 | |
|     model = Event
 | |
|     queryset = Event.objects.all()
 | |
| 
 | |
|     @action(methods=['GET'], detail=False)
 | |
|     def plays(self, request, *args, **kwargs):
 | |
|         recs = get_personal_plays_recommendation(request.user)
 | |
|         ans = []
 | |
|         for rec in recs:
 | |
|             ans.append(EventSerializer(rec[1]).data)
 | |
|         return Response(ans, 200)
 | |
|     
 | |
| 
 | |
|     @action(methods=['GET'], detail=False)
 | |
|     def concerts(self, request, *args, **kwargs):
 | |
|         recs = get_personal_concerts_recommendation(request.user)
 | |
|         ans = []
 | |
|         for rec in recs:
 | |
|             ans.append(EventSerializer(rec[1]).data)
 | |
|         return Response(ans, 200)
 | |
| 
 | |
| 
 | |
|     @action(methods=['GET'], detail=False)
 | |
|     def movies(self, request, *args, **kwargs):
 | |
|         recs = get_personal_movies_recommendation(request.user)
 | |
|         ans = []
 | |
|         for rec in recs:
 | |
|             ans.append(EventSerializer(rec[1]).data)
 | |
|         return Response(ans, 200) |