add user model fields

This commit is contained in:
b1ek 2023-05-15 13:12:05 +10:00
parent 8cabfeb1ba
commit ec152afe55
Signed by: blek
GPG Key ID: 14546221E3595D0C
6 changed files with 106 additions and 24 deletions

View File

@ -4,16 +4,31 @@ import time, datetime
from django.db import models from django.db import models
from pairent_app.models import Apartament from pairent_app.models import Apartament, User
factory.Faker.override_default_locale('ru_RU'); factory.Faker.override_default_locale('ru_RU');
class OpenID_Address(factory.declarations.BaseDeclaration):
def evaluate(self, instance, step, extra):
return ''.join(random.choices(list('abcdef12345678990'), k=6)) + "@vvsu.ru";
class PhoneNumber(factory.declarations.BaseDeclaration): class PhoneNumber(factory.declarations.BaseDeclaration):
def evaluate(self, instance, step, extra): def evaluate(self, instance, step, extra):
return '+799' + str(random.randint(0, 99999999)).zfill(8); return '+799' + str(random.randint(0, 99999999)).zfill(8);
class CSV(factory.declarations.BaseDeclaration):
def __init__(self, min, max, count_min, count_max):
self.min = min; self.max = max;
self.count_min = count_min; self.count_max: count_max;
def evaluate(self, instance, step, extra):
len_ = random.randint(self.count_min, self.count_max);
out = [];
for i in range(len): out.append(random.randint(self.min, self.max));
return ','.join(out);
class Random(factory.declarations.BaseDeclaration): class Random(factory.declarations.BaseDeclaration):
def __init__(self, min, max = None, multiply = 1): def __init__(self, min, max = None, multiply = 1, list = None):
if (max == None): if (max == None):
self.min = 0; self.min = 0;
self.max = min; self.max = min;
@ -21,17 +36,26 @@ class Random(factory.declarations.BaseDeclaration):
self.min = min; self.min = min;
self.max = max; self.max = max;
self.multiply = multiply; self.multiply = multiply;
super().__init__(); self.list = list;
super().__init__(self);
def evaluate(self, instance, step, extra): def evaluate(self, instance, step, extra):
if (type(self.list) == list):
return random.choice(self.list);
if (self.multiply != None): if (self.multiply != None):
return random.randint(self.min, self.max) * self.multiply; return random.randint(self.min, self.max) * self.multiply;
return random.randint(self.min, self.max); return random.randint(self.min, self.max);
class Date(factory.declarations.BaseDeclaration): class Date(factory.declarations.BaseDeclaration):
def __init__(self, min_year = 2022, max_year = datetime.date().year):
self.min_year = min_year;
self.max_year = max_year;
super().__init__(self);
def evaluate(self, instance, step, extra): def evaluate(self, instance, step, extra):
# year_before = time.time() - (60 * 60 * 24 * 30 * 12); return datetime.datetime(random.randint(self.min_year, self.max_year), random.randint(1,12), random.randint(1,27)).strftime("%G-%m-%d");
return datetime.datetime(2023, random.randint(1,12), random.randint(1,27)).strftime("%G-%m-%d");
class ApartmentFactory(factory.django.DjangoModelFactory): class ApartmentFactory(factory.django.DjangoModelFactory):
@ -81,4 +105,25 @@ class ApartmentFactory(factory.django.DjangoModelFactory):
# views = [] # factory.Faker('random_number') # views = [] # factory.Faker('random_number')
dateCreate = Date() dateCreate = Date()
class UserFactory(factory.django.DjangoModelFactory):
class Meta:
model = User
favorites_aparments = CSV(1, 100, 1, 16);
comparison_apartments = CSV(1, 100, 1, 5);
psych_test_result = Random(20, 90);
vvsu_id = OpenID_Address();
name = factory.faker.Faker('name');
date_of_birth = Date(1980, 2006);
about_me = factory.faker.Faker('sentence');
gender = Random(0,0,0, ['f', 'm', 'n', '?'])
phone = PhoneNumber()
email = OpenID_Address()
telegram = '@uwu'
discord = '@uwu' # они поменяли формат
city = Random(0,0,0, ['Владивосток', 'Хабаровск', 'Урюпинск', 'Мухосранск', 'Нью-Йорк'])
role = 's'

View File

@ -1,8 +1,10 @@
# Generated by Django 4.2.1 on 2023-05-12 12:45 # Generated by Django 4.2.1 on 2023-05-12 12:45
import django.core.validators import django.core.validators
from django.core.validators import RegexValidator, MaxValueValidator
from django.db import migrations, models from django.db import migrations, models
from pairent_app.models import User
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -11,17 +13,24 @@ class Migration(migrations.Migration):
] ]
operations = [ operations = [
migrations.DeleteModel('User'),
migrations.CreateModel( migrations.CreateModel(
name='User', name='User',
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('favorites_apartments', models.CharField(max_length=100, help_text="Избранные квартиры (CSV)")),
('favorites_apartaments', models.CharField(max_length=100, verbose_name='Избранные квартиры')), ('comparison_apartments', models.CharField(max_length=100, help_text="Квартиры для сравнения (CSV)")),
('apartaments_for_comparison', models.CharField(max_length=100, verbose_name='Квартиры для сравнения')), ('psych_test_result', models.IntegerField(validators=[MaxValueValidator(100)], null=True, help_text="Результат психологического теста")),
('psych_test_result', models.IntegerField(null=True, validators=[django.core.validators.MaxValueValidator(100)], verbose_name='Результат психологического теста')), ('openid_addr', models.CharField(max_length=1000, null=False, help_text='Адрес Open ID Connect (login@provider.com, для ВВГУ - login@vvsu.ru)')),
], ('name', models.CharField(max_length=256, help_text='ФИО Пользователя')),
options={ ('date_of_birth', models.DateField(help_text='Дата рождения пользователя')),
'verbose_name': 'Пользователь', ('about_me', models.CharField(max_length=1000, help_text='Поле "О Себе"')),
'verbose_name_plural': 'Пользователи', ('gender', models.CharField(max_length=1, help_text='Пол пользователя (f,m,n,?)')),
}, ('phone', models.CharField(max_length=30, help_text='Телефон пользователя в международном формате (+00000000)', null=True)),
), ('email', models.CharField(max_length=1000, help_text='Почтовый ящик пользователя в формате user@example.com', null=True)),
('telegram', models.CharField(max_length=1000, help_text='Телеграм пользователя', null=True)),
('discord', models.CharField(max_length=1000, help_text='Дискорд ник пользователя', null=True)),
('city', models.CharField(max_length=1000, help_text='Город пользователя', null=True)),
('role', models.CharField(max_length=1, help_text='Роль пользователя (s - student, a - admin, m - moderator)', null=False))
]
)
] ]

View File

@ -81,10 +81,26 @@ class Photo(models.Model):
# TODO: Add auth # TODO: Add auth
class User(models.Model): class User(models.Model):
"""Тестовая модель данных для избранных и сравнения""" """Модель данных пользователя"""
favorites_apartaments = models.CharField(max_length=100, verbose_name="Избранные квартиры")
apartaments_for_comparison = models.CharField(max_length=100, verbose_name="Квартиры для сравнения") favorites_apartments = models.CharField(max_length=100, verbose_name="Избранные квартиры (CSV)")
psych_test_result = models.IntegerField(validators=[MaxValueValidator(100)], null=True, verbose_name="Результат психологического теста") comparison_apartments = models.CharField(max_length=100, verbose_name="Квартиры для сравнения (CSV)")
psych_test_result = models.IntegerField(validators=[MaxValueValidator(100)], null=True, verbose_name="Результат психологического теста")
openid_addr = models.CharField(max_length=1000, null=False, verbose_name='Адрес Open ID Connect (login@provider.com, для ВВГУ - login@vvsu.ru)')
name = models.CharField(max_length=256, verbose_name='ФИО Пользователя')
date_of_birth = models.DateField(verbose_name='Дата рождения пользователя')
about_me = models.CharField(max_length=1000, verbose_name='Поле "О Себе"')
gender = models.CharField(max_length=1, verbose_name='Пол пользователя (f,m,n,?)')
phone = models.CharField(max_length=30, verbose_name='Телефон пользователя в международном формате (+00000000)', null=True)
email = models.CharField(max_length=1000, verbose_name='Почтовый ящик пользователя в формате user@example.com', null=True)
telegram = models.CharField(max_length=1000, verbose_name='Телеграм пользователя', null=True)
discord = models.CharField(max_length=1000, verbose_name='Дискорд ник пользователя', null=True)
# as in "City wok"
city = models.CharField(max_length=1000, verbose_name='Город пользователя', null=True)
role = models.CharField(max_length=1, verbose_name='Роль пользователя (s - student, a - admin, m - moderator)', null=False)
class Meta: class Meta:
verbose_name = "Пользователь" verbose_name = "Пользователь"

View File

@ -21,4 +21,9 @@ class ApartamentDetailSerializer(serializers.ModelSerializer):
class PsychTestAddResultSerializer(serializers.ModelSerializer): class PsychTestAddResultSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = User model = User
fields = ("psych_test_result",) fields = ("psych_test_result",)
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = "__all__"

View File

@ -9,5 +9,6 @@ urlpatterns = format_suffix_patterns([
path("apartaments/comparison/", views.ApartamentGetManyViewSet.as_view({'get': 'retrieve'})), # пример: apartaments/comparison/?user_id=1 user_id - id пользователя path("apartaments/comparison/", views.ApartamentGetManyViewSet.as_view({'get': 'retrieve'})), # пример: apartaments/comparison/?user_id=1 user_id - id пользователя
path("apartaments/favorite/", views.ApartamentGetManyViewSet.as_view({'get': 'list'})), # пример: apartaments/favorite/?user_id=1 user_id - id пользователя path("apartaments/favorite/", views.ApartamentGetManyViewSet.as_view({'get': 'list'})), # пример: apartaments/favorite/?user_id=1 user_id - id пользователя
path("apartaments/filters/", views.ApartmentFilter.as_view({'post': 'list'})), path("apartaments/filters/", views.ApartmentFilter.as_view({'post': 'list'})),
path("psych_test/add_result/<int:pk>", views.PsychTestAddResultViewSet.as_view({'patch': 'update'})) # пример: psych_test/add_result/1/?result=50 result - результат псих теста пользователя path("psych_test/add_result/<int:pk>", views.PsychTestAddResultViewSet.as_view({'patch': 'update'})), # пример: psych_test/add_result/1/?result=50 result - результат псих теста пользователя
path("users/get_compatible", views.CompatibleUsersView.as_view({'post': 'list'}))
]) ])

View File

@ -8,7 +8,8 @@ from django.http import HttpResponseBadRequest
from .models import Apartament, User from .models import Apartament, User
from .serializer import (ApartamentListSerializer, from .serializer import (ApartamentListSerializer,
ApartamentDetailSerializer, ApartamentDetailSerializer,
PsychTestAddResultSerializer) PsychTestAddResultSerializer,
UserSerializer)
import json import json
@ -91,4 +92,9 @@ class PsychTestAddResultViewSet(viewsets.ViewSet):
result = request.query_params.get("result", None) result = request.query_params.get("result", None)
user.update(psych_test_result=result) user.update(psych_test_result=result)
return Response(PsychTestAddResultSerializer(User.objects.get(pk=pk)).data) return Response(PsychTestAddResultSerializer(User.objects.get(pk=pk)).data)
class CompatibleUsersView(viewsets.ViewSet):
def list(self, req: Request):
user_data = dict(req.data);
users = User.objects.all();
return Response(UserSerializer(users).data);