# DRF Rack # Библиотека классов расширений для Django REST Framework # # Автор: Николай В. Анохин # Все права защищены. Лицензия: 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.managers import CryptoManager from net.xeaf.rack.models.mixins import CreatedAtMixin from net.xeaf.rack.models.mixins import ExpiresAtMixin class SessionModel(CoreModel, CreatedAtMixin, ExpiresAtMixin): """ Модель сессии пользователя """ token = models.CharField( max_length=CryptoManager.DEFAULT_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.session_model.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")