add compatible users view
This commit is contained in:
parent
d98e9f7c75
commit
5cd15a5615
|
@ -23,7 +23,7 @@ class PsychTestAddResultSerializer(serializers.ModelSerializer):
|
||||||
model = User
|
model = User
|
||||||
fields = ("psych_test_result",)
|
fields = ("psych_test_result",)
|
||||||
|
|
||||||
class UserSerializer(serializers.ModelSerializer):
|
class PublicUserSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
fields = "__all__"
|
exclude = ('favorites_apartments', 'comparison_apartments')
|
|
@ -4,14 +4,18 @@ from rest_framework.views import APIView, View
|
||||||
from rest_framework.request import Request
|
from rest_framework.request import Request
|
||||||
|
|
||||||
from django.http import HttpResponseBadRequest
|
from django.http import HttpResponseBadRequest
|
||||||
|
from django.db.models.query import QuerySet
|
||||||
|
|
||||||
|
from django.core.validators import validate_email
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
|
|
||||||
from .models import Apartament, User
|
from .models import Apartament, User
|
||||||
from .serializer import (ApartamentListSerializer,
|
from .serializer import (ApartamentListSerializer,
|
||||||
ApartamentDetailSerializer,
|
ApartamentDetailSerializer,
|
||||||
PsychTestAddResultSerializer,
|
PsychTestAddResultSerializer,
|
||||||
UserSerializer)
|
PublicUserSerializer)
|
||||||
|
|
||||||
import json
|
import json, math, random, re
|
||||||
|
|
||||||
class ApartamentViewSet(viewsets.ReadOnlyModelViewSet):
|
class ApartamentViewSet(viewsets.ReadOnlyModelViewSet):
|
||||||
"""Вывод списка квартир или отдельной квартиры"""
|
"""Вывод списка квартир или отдельной квартиры"""
|
||||||
|
@ -96,5 +100,41 @@ class PsychTestAddResultViewSet(viewsets.ViewSet):
|
||||||
class CompatibleUsersView(viewsets.ViewSet):
|
class CompatibleUsersView(viewsets.ViewSet):
|
||||||
def list(self, req: Request):
|
def list(self, req: Request):
|
||||||
user_data = dict(req.data);
|
user_data = dict(req.data);
|
||||||
users = User.objects.all();
|
|
||||||
return Response(UserSerializer(users).data);
|
# TODO: Verify auth
|
||||||
|
vvsu_login = user_data['openid'];
|
||||||
|
|
||||||
|
# Exclude already viewed users
|
||||||
|
exclude = [];
|
||||||
|
if ('exclude' in user_data.keys()):
|
||||||
|
exclude = user_data['exclude'];
|
||||||
|
|
||||||
|
try:
|
||||||
|
validate_email(vvsu_login);
|
||||||
|
except ValidationError:
|
||||||
|
return Request({'error': 'bad login'}, 400);
|
||||||
|
|
||||||
|
try:
|
||||||
|
this_user = User.objects.get(openid_addr=vvsu_login);
|
||||||
|
except User.DoesNotExist:
|
||||||
|
return Response({'error': 'user not found'}, 404);
|
||||||
|
|
||||||
|
score = this_user.psych_test_result;
|
||||||
|
|
||||||
|
users_query = User.objects.all();
|
||||||
|
|
||||||
|
users = [];
|
||||||
|
|
||||||
|
for user in users_query:
|
||||||
|
if (abs(user.psych_test_result - score) < 20):
|
||||||
|
users.append(PublicUserSerializer(user).data);
|
||||||
|
|
||||||
|
random.shuffle(users);
|
||||||
|
users = users[:7];
|
||||||
|
|
||||||
|
for i in range(3):
|
||||||
|
users.append(PublicUserSerializer(random.choice(users_query)).data);
|
||||||
|
|
||||||
|
random.shuffle(users);
|
||||||
|
|
||||||
|
return Response(users);
|
Loading…
Reference in New Issue