legacy/pairent_backend/pairent_app/views.py

93 lines
3.9 KiB
Python
Raw Normal View History

from rest_framework import viewsets
2023-05-07 11:48:53 +02:00
from rest_framework.response import Response
2023-05-11 01:52:32 +02:00
from rest_framework.views import APIView, View
from rest_framework.request import Request
from django.http import HttpResponseBadRequest
2023-05-09 10:32:18 +02:00
from .models import Apartament, User
from .serializer import (ApartamentListSerializer,
ApartamentDetailSerializer,
PsychTestAddResultSerializer)
2023-05-01 12:39:34 +02:00
2023-05-11 01:52:32 +02:00
import json
2023-05-01 12:39:34 +02:00
class ApartamentViewSet(viewsets.ReadOnlyModelViewSet):
"""Вывод списка квартир или отдельной квартиры"""
2023-05-01 12:39:34 +02:00
def get_queryset(self):
2023-05-01 12:39:34 +02:00
apartaments = Apartament.objects.all()
return apartaments
def get_serializer_class(self):
if self.action == 'list':
return ApartamentListSerializer
elif self.action == "retrieve":
2023-05-07 11:48:53 +02:00
return ApartamentDetailSerializer
class ApartamentGetManyViewSet(viewsets.ReadOnlyModelViewSet):
2023-05-07 11:48:53 +02:00
"""Вывод отдельных квартир для сравнения"""
2023-05-09 13:03:37 +02:00
def get_queryset(self): # получение id квартир для избранного или сравнения
2023-05-09 10:32:18 +02:00
pk = self.request.query_params.get("pk", None) # получение id пользователя
if self.action == "retrieve": # если для страницы сравнения
apartaments_id = User.objects.get(pk=pk).apartaments_for_comparison.split(',') # получение id квартир
elif self.action == "list": # если для страницы избранного
apartaments_id = User.objects.get(pk=pk).favorites_apartaments.split(',') # получение id квартир
2023-05-09 13:03:37 +02:00
queryset = []
for i in apartaments_id:
queryset.append(Apartament.objects.get(pk=i))
return queryset
2023-05-09 10:32:18 +02:00
2023-05-09 11:05:47 +02:00
def retrieve(self, request, *args, **kwargs):
2023-05-09 13:03:37 +02:00
queryset = self.get_queryset()
2023-05-09 11:05:47 +02:00
apartaments = []
2023-05-09 13:03:37 +02:00
for i in queryset:
apartaments.append(ApartamentDetailSerializer(i).data)
return Response({'results': apartaments})
def list(self, request, *args, **kwargs):
queryset = self.get_queryset()
apartaments = []
for i in queryset:
apartaments.append(ApartamentListSerializer(i).data)
2023-05-09 11:05:47 +02:00
return Response({'results': apartaments})
2023-05-11 01:52:32 +02:00
class ApartmentFilter(viewsets.ViewSet):
"""Вывод списка квартир или отдельной квартиры"""
def list(self, req: Request):
filters = dict(req.data);
2023-05-11 15:11:38 +02:00
unfiltered = Apartament.objects.all();
2023-05-11 01:52:32 +02:00
filtered = [];
2023-05-11 15:11:38 +02:00
# TODO: Some better converting practice?
filters['price_range']['from'] = int(filters['price_range']['from']);
filters['price_range']['to'] = int(filters['price_range']['to']);
filters['area_range']['from'] = int(filters['area_range']['from']);
filters['area_range']['to'] = int(filters['area_range']['to']);
filters['rooms'] = int(filters['rooms'])
2023-05-11 01:52:32 +02:00
for entry in unfiltered:
2023-05-11 15:11:38 +02:00
if (filters['price_range']['from'] >= entry.price and (filters['price_range']['to'] != -1 and filters['price_range']['to'] <= entry.price)):
2023-05-11 01:52:32 +02:00
continue;
2023-05-11 15:11:38 +02:00
if (filters['area_range']['from'] >= entry.perimetrs and (filters['area_range']['to'] != -1 and filters['area_range']['to'] <= entry.perimetrs)):
2023-05-11 01:52:32 +02:00
continue;
2023-05-11 15:11:38 +02:00
if (filters['rooms'] != -1 and entry.rooms != filters['rooms']):
2023-05-11 01:52:32 +02:00
continue;
filtered.append(entry);
return Response(ApartamentListSerializer(filtered, many=True).data);
# TODO: доделать
class PsychTestAddResultViewSet(viewsets.ViewSet):
def update(self, request):
result = request.query_params.get("result", None)
user = User.User.objects.filter(pk=self.kwargs['pk'])
user.update(psych_test_result=result)
return Response(PsychTestAddResultSerializer(user).data)