diff --git a/pairent_backend/pairent_app/serializer.py b/pairent_backend/pairent_app/serializer.py index c43fc8c..29416a2 100644 --- a/pairent_backend/pairent_app/serializer.py +++ b/pairent_backend/pairent_app/serializer.py @@ -23,7 +23,7 @@ class PsychTestAddResultSerializer(serializers.ModelSerializer): model = User fields = ("psych_test_result",) -class UserSerializer(serializers.ModelSerializer): +class PublicUserSerializer(serializers.ModelSerializer): class Meta: model = User - fields = "__all__" \ No newline at end of file + exclude = ('favorites_apartments', 'comparison_apartments') \ No newline at end of file diff --git a/pairent_backend/pairent_app/views.py b/pairent_backend/pairent_app/views.py index 8bc9b86..34da1f2 100644 --- a/pairent_backend/pairent_app/views.py +++ b/pairent_backend/pairent_app/views.py @@ -4,14 +4,18 @@ from rest_framework.views import APIView, View from rest_framework.request import Request 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 .serializer import (ApartamentListSerializer, ApartamentDetailSerializer, PsychTestAddResultSerializer, - UserSerializer) + PublicUserSerializer) -import json +import json, math, random, re class ApartamentViewSet(viewsets.ReadOnlyModelViewSet): """Вывод списка квартир или отдельной квартиры""" @@ -96,5 +100,41 @@ class PsychTestAddResultViewSet(viewsets.ViewSet): class CompatibleUsersView(viewsets.ViewSet): def list(self, req: Request): user_data = dict(req.data); - users = User.objects.all(); - return Response(UserSerializer(users).data); \ No newline at end of file + + # 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); \ No newline at end of file