139 lines
10 KiB
Python
139 lines
10 KiB
Python
from django.db import models
|
||
from django.core.validators import RegexValidator, MaxValueValidator
|
||
|
||
|
||
class IPAddresses(models.Model):
|
||
"""Модель данных для хранения IP адрессов (нужно для подсчета количества просмотров)"""
|
||
ipAddressRegex = RegexValidator(regex = r"^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$")
|
||
ipAddress = models.CharField(validators=[ipAddressRegex], max_length=15, verbose_name="IP адрес")
|
||
|
||
def __str__(self):
|
||
return self.ipAddress
|
||
|
||
class Meta:
|
||
verbose_name = "IP адрес"
|
||
verbose_name_plural = "IP адреса"
|
||
|
||
|
||
class Apartament(models.Model):
|
||
"""Модель данных квартиры"""
|
||
price = models.IntegerField(validators=[MaxValueValidator(450000)], verbose_name="Стоимость аренды квартиры за месяц")
|
||
lastPrice = models.IntegerField(validators=[MaxValueValidator(450000)], default = 0, verbose_name="Прошлая стоимость аренды квартиры за месяц")
|
||
bail = models.IntegerField(validators=[MaxValueValidator(450000)], verbose_name="Стоимость залога квартиры")
|
||
agencyCommission = models.IntegerField(validators=[MaxValueValidator(450000)], verbose_name="Коммисия агенству")
|
||
utilitiesPrice = models.CharField(max_length=100, verbose_name="Стоимость коммунальных услуг")
|
||
minimumLeasePeriod = models.IntegerField(validators=[MaxValueValidator(60)], verbose_name="Минимальный срок аренды в месяцах")
|
||
|
||
address = models.CharField(max_length=100, verbose_name="Адрес квартиры")
|
||
description = models.TextField(max_length=300, verbose_name="Описание квартиры")
|
||
|
||
perimetrs = models.FloatField(validators=[MaxValueValidator(250)], verbose_name="Количество квадратных метров")
|
||
rooms = models.IntegerField(validators=[MaxValueValidator(10)], verbose_name="Количество комнат")
|
||
ceilingHeight = models.FloatField(validators=[MaxValueValidator(5)], verbose_name="Высота потолков в метрах")
|
||
floor = models.IntegerField(validators=[MaxValueValidator(50)], verbose_name="Этаж квартиры")
|
||
floorHouse = models.IntegerField(validators=[MaxValueValidator(50)], verbose_name="Количество этажей в доме")
|
||
|
||
phoneNumberRegex = RegexValidator(regex = r"^\+?1?\d{8,15}$")
|
||
phoneNumber = models.CharField(validators=[phoneNumberRegex], max_length=16, unique=True, verbose_name="Номер телефона для связи")
|
||
|
||
timeToBus = models.IntegerField(validators=[MaxValueValidator(60)], verbose_name="Время до ближайшей автобусной остановки в минутах")
|
||
timeToTrain = models.IntegerField(validators=[MaxValueValidator(60)], verbose_name="Время до ближайшей Ж/Д станции в минутах")
|
||
|
||
"""Параметры квартиры"""
|
||
isFurniture = models.BooleanField(verbose_name="Имеется мебель в квартире")
|
||
isAnimal = models.BooleanField(verbose_name="Можно с питомцем")
|
||
isTelevision = models.BooleanField(verbose_name="Имеется телевизор в квартире")
|
||
isChild = models.BooleanField(verbose_name="Можно с детьми")
|
||
isInternet = models.BooleanField(verbose_name="Проведен интернет в квартире")
|
||
isBathroom = models.BooleanField(verbose_name="Имеется санузел в квартире")
|
||
isRefrigerator = models.BooleanField(verbose_name="Имеется холодильник в квартире")
|
||
isWasher = models.BooleanField(verbose_name="Имеется стиральная машинка в квартире")
|
||
isAirConditioning = models.BooleanField(verbose_name="Имеется кондиционер в квартире")
|
||
isFreshRepair = models.BooleanField(verbose_name="Недавно был ремонт в квартире")
|
||
|
||
"""Параметры дома"""
|
||
isElevator = models.BooleanField(verbose_name="Имеется лифт в доме")
|
||
isParking = models.BooleanField(verbose_name="Имеется закрытая парковка у дома")
|
||
isGarbageChute = models.BooleanField(verbose_name="Имеется мусоропровод в доме")
|
||
isConcierge = models.BooleanField(verbose_name="Имеется консьерж в доме")
|
||
|
||
views = models.ManyToManyField(IPAddresses, related_name="post_views", blank=True)
|
||
|
||
dateCreate = models.DateField(auto_now_add=True, editable=False, verbose_name="Дата добавления квартиры")
|
||
|
||
def total_views(self):
|
||
return self.views.count()
|
||
|
||
class Meta:
|
||
verbose_name = "Квартира"
|
||
verbose_name_plural = "Квартиры"
|
||
ordering = ['-dateCreate']
|
||
|
||
|
||
class Photo(models.Model):
|
||
"""Модель данных фотографий квартир"""
|
||
apartament = models.ForeignKey(Apartament, on_delete = models.CASCADE, verbose_name="Квартира")
|
||
image = models.ImageField(upload_to='photos/%Y/%m/%d', verbose_name="Фотография")
|
||
|
||
class Meta:
|
||
verbose_name = "Фотография"
|
||
verbose_name_plural = "Фотографии"
|
||
|
||
# TODO: Add auth
|
||
class User(models.Model):
|
||
"""Модель данных пользователя"""
|
||
|
||
favorites_apartments = models.CharField(max_length=100, verbose_name="Избранные квартиры (CSV)")
|
||
comparison_apartments = models.CharField(max_length=100, verbose_name="Квартиры для сравнения (CSV)")
|
||
|
||
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)
|
||
|
||
photo_provider = models.CharField(max_length=100, verbose_name='Сервис, из которого загружается фотография пользователя (VVSU, GRAVATAR)')
|
||
|
||
openid_addr = models.CharField(max_length=1000, null=False, verbose_name='Адрес Open ID (login@provider.com, для ВВГУ - login@vvsu.ru)')
|
||
openid_id = models.CharField(max_length=10000, verbose_name='ID Пользователя в системе провайдера авторизации (скорее всего ВВГУ)')
|
||
|
||
class Meta:
|
||
verbose_name = "Пользователь"
|
||
verbose_name_plural = "Пользователи"
|
||
|
||
|
||
class PsychTestAnswers(models.Model):
|
||
"""Модель ответов на психологический тест"""
|
||
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="Пользователь")
|
||
first_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на первый вопрос")
|
||
second_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на второй вопрос")
|
||
third_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на третий вопрос")
|
||
fourth_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на четвертый вопрос")
|
||
fifth_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на пятый вопрос")
|
||
sixth_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на шестой вопрос")
|
||
seventh_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на седьмой вопрос")
|
||
eighth_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на восьмой вопрос")
|
||
nineth_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на девятый вопрос")
|
||
tenth_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на десятый вопрос")
|
||
eleventh_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на одиннадцатый вопрос")
|
||
twelfth_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на двенадцатый вопрос")
|
||
|
||
class Meta:
|
||
verbose_name = "Ответ на психологический тест"
|
||
verbose_name_plural = "Ответы на психологический тест"
|
||
|
||
class AuthToken(models.Model):
|
||
user = models.BigIntegerField(null=False, verbose_name='ID Пользователя, которому принадлежит токен');
|
||
key = models.TextField(verbose_name='Ключ API');
|
||
expires = models.BigIntegerField(verbose_name='Когда ключ истечет (Unix timestamp)');
|
||
ip = models.CharField(max_length=16, verbose_name='IP, с которого был создан ключ');
|