96 lines
2.7 KiB
Python
96 lines
2.7 KiB
Python
# DRF Rack
|
|
# Библиотека классов расширений для Django REST Framework
|
|
#
|
|
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
|
# Все права защищены. Лицензия: MIT
|
|
|
|
"""
|
|
Описание класса Session
|
|
"""
|
|
|
|
from django.conf import settings
|
|
from django.db import models
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from net.xeaf.rack.core import CoreModel
|
|
from net.xeaf.rack.models.mixins import CreatedAtMixin
|
|
from net.xeaf.rack.models.mixins import ExpiresAtMixin
|
|
|
|
|
|
class SessionModel(CoreModel, CreatedAtMixin, ExpiresAtMixin):
|
|
"""
|
|
Модель сессии пользователя
|
|
"""
|
|
|
|
MAX_TOKEN_LENGTH = 255
|
|
""" Максимальная длина токена сессии """
|
|
|
|
token = models.CharField(
|
|
max_length=MAX_TOKEN_LENGTH,
|
|
null=False,
|
|
blank=False,
|
|
verbose_name=_("rack.models.session_model.token"),
|
|
)
|
|
""" Токен сессии """
|
|
|
|
account = models.ForeignKey(
|
|
settings.AUTH_USER_MODEL,
|
|
on_delete=models.CASCADE,
|
|
null=False,
|
|
blank=False,
|
|
verbose_name=_("rack.models.account"),
|
|
)
|
|
""" Аккаунт пользователя """
|
|
|
|
actual_account = models.ForeignKey(
|
|
settings.AUTH_USER_MODEL,
|
|
on_delete=models.CASCADE,
|
|
null=False,
|
|
blank=False,
|
|
related_name="fk_session_model_actual_account",
|
|
verbose_name=_("rack.models.session_model.actual_account"),
|
|
)
|
|
""" Актуальный аккаунт пользователя """
|
|
|
|
device_id = models.CharField(
|
|
max_length=36,
|
|
default='WEB',
|
|
null=True,
|
|
blank=True,
|
|
verbose_name=_("rack.models.session_model.device_id"),
|
|
)
|
|
""" Идентификатор устройства """
|
|
|
|
fcm_token = models.CharField(
|
|
max_length=256,
|
|
default=None,
|
|
null=True,
|
|
blank=True,
|
|
verbose_name=_("rack.models.session_model.fcm_token"),
|
|
)
|
|
""" Токен для подключения к FCM """
|
|
|
|
class Meta:
|
|
"""
|
|
Параметры конфигурации класса
|
|
"""
|
|
|
|
# Уникальность
|
|
constraints = [
|
|
models.UniqueConstraint(
|
|
fields=["token"],
|
|
name="unique_session_token"
|
|
)
|
|
]
|
|
|
|
# Индексы для производительности
|
|
indexes = [
|
|
models.Index(fields=["account"]),
|
|
models.Index(fields=["actual_account"]),
|
|
]
|
|
|
|
# Данные таблицы
|
|
db_table = "rack_sessions"
|
|
verbose_name = _("rack.models.session")
|
|
verbose_name_plural = _("rack.models.session_plural")
|