src.db.models.notifications
1from datetime import datetime 2 3from fastui.components.display import DisplayLookup, DisplayMode 4from fastui.events import GoToEvent 5from pydantic import BaseModel, ConfigDict, Field 6from sqlalchemy import BigInteger, DateTime, ForeignKey, func 7from sqlalchemy.orm import Mapped, mapped_column, relationship 8 9from core.config import Base 10from db.models import NotificationType 11 12 13class Notifications(Base): 14 """Модель уведомлений. 15 16 Эта модель представляет собой структуру данных для хранения уведомлений, 17 включая тип уведомления, содержание и другие атрибуты. 18 """ 19 20 __tablename__ = "notifications" 21 __table_args__ = {"extend_existing": True} 22 23 id: Mapped[int] = mapped_column(primary_key=True) 24 """int: Уникальный идентификатор уведомления.""" 25 26 user_id: Mapped[int] = mapped_column( 27 ForeignKey("userdata.telegram_id", ondelete="CASCADE"), type_=BigInteger 28 ) 29 """int: Идентификатор пользователя в Telegram, связанный с уведомлением.""" 30 31 type: Mapped[NotificationType] 32 "NotificationType: тип уведомления" 33 34 message: Mapped[str] 35 """str: Содержание уведомления.""" 36 37 date: Mapped[str] = mapped_column(default=lambda: datetime.now().ctime()) 38 """datetime(str): Дата создания уведомления (по умолчанию - текущая дата).""" 39 40 notif_connect: Mapped["UserData"] = relationship( # noqa: F821 # type: ignore 41 back_populates="notifications", lazy="subquery" 42 ) 43 """UserData: Связанные уведомления пользователя""" 44 45 class ValidationSchema(BaseModel): 46 """Схема валидации для модели уведомлений. 47 48 Эта схема используется для валидации данных, связанных с уведомлениями. 49 """ 50 51 id: int | None = Field(default=None, title="ID") 52 """Уникальный идентификатор уведомления.""" 53 54 user_id: int = Field(title="Telegram ID") 55 """Идентификатор пользователя в Telegram.""" 56 57 type: NotificationType = Field(title="Notification Type") 58 """Тип уведомления.""" 59 60 message: str = Field(title="Message") 61 """Заголовок уведомления.""" 62 63 date: str = Field(title="Create date") 64 """Дата создания уведомления.""" 65 66 model_config = ConfigDict(extra="ignore") 67 68 # INTERFACE (fastui) 69 site_display = [ 70 DisplayLookup( 71 field="id", 72 on_click=GoToEvent(url="/bot/tables/notifications/?notification_id={id}"), 73 ), 74 DisplayLookup(field="type"), 75 DisplayLookup(field="message"), 76 DisplayLookup(field="date"), 77 ] 78 """list[DisplayLookup]: Отображение уведомлений на сайте.""" 79 80 site_display_all = site_display 81 """list[DisplayLookup]: Полное отображение уведомлений на сайте.""" 82 83 def __init__(self, **kwargs): 84 """Инициализирует модель уведомлений. 85 86 Args: 87 **kwargs: Дополнительные параметры для инициализации модели. 88 """ 89 if kwargs: 90 validated_data = self.ValidationSchema(**kwargs).model_dump( 91 exclude={"site_date"} 92 ) 93 super().__init__(**(validated_data)) 94 else: 95 super().__init__(**(kwargs))
14class Notifications(Base): 15 """Модель уведомлений. 16 17 Эта модель представляет собой структуру данных для хранения уведомлений, 18 включая тип уведомления, содержание и другие атрибуты. 19 """ 20 21 __tablename__ = "notifications" 22 __table_args__ = {"extend_existing": True} 23 24 id: Mapped[int] = mapped_column(primary_key=True) 25 """int: Уникальный идентификатор уведомления.""" 26 27 user_id: Mapped[int] = mapped_column( 28 ForeignKey("userdata.telegram_id", ondelete="CASCADE"), type_=BigInteger 29 ) 30 """int: Идентификатор пользователя в Telegram, связанный с уведомлением.""" 31 32 type: Mapped[NotificationType] 33 "NotificationType: тип уведомления" 34 35 message: Mapped[str] 36 """str: Содержание уведомления.""" 37 38 date: Mapped[str] = mapped_column(default=lambda: datetime.now().ctime()) 39 """datetime(str): Дата создания уведомления (по умолчанию - текущая дата).""" 40 41 notif_connect: Mapped["UserData"] = relationship( # noqa: F821 # type: ignore 42 back_populates="notifications", lazy="subquery" 43 ) 44 """UserData: Связанные уведомления пользователя""" 45 46 class ValidationSchema(BaseModel): 47 """Схема валидации для модели уведомлений. 48 49 Эта схема используется для валидации данных, связанных с уведомлениями. 50 """ 51 52 id: int | None = Field(default=None, title="ID") 53 """Уникальный идентификатор уведомления.""" 54 55 user_id: int = Field(title="Telegram ID") 56 """Идентификатор пользователя в Telegram.""" 57 58 type: NotificationType = Field(title="Notification Type") 59 """Тип уведомления.""" 60 61 message: str = Field(title="Message") 62 """Заголовок уведомления.""" 63 64 date: str = Field(title="Create date") 65 """Дата создания уведомления.""" 66 67 model_config = ConfigDict(extra="ignore") 68 69 # INTERFACE (fastui) 70 site_display = [ 71 DisplayLookup( 72 field="id", 73 on_click=GoToEvent(url="/bot/tables/notifications/?notification_id={id}"), 74 ), 75 DisplayLookup(field="type"), 76 DisplayLookup(field="message"), 77 DisplayLookup(field="date"), 78 ] 79 """list[DisplayLookup]: Отображение уведомлений на сайте.""" 80 81 site_display_all = site_display 82 """list[DisplayLookup]: Полное отображение уведомлений на сайте.""" 83 84 def __init__(self, **kwargs): 85 """Инициализирует модель уведомлений. 86 87 Args: 88 **kwargs: Дополнительные параметры для инициализации модели. 89 """ 90 if kwargs: 91 validated_data = self.ValidationSchema(**kwargs).model_dump( 92 exclude={"site_date"} 93 ) 94 super().__init__(**(validated_data)) 95 else: 96 super().__init__(**(kwargs))
Модель уведомлений.
Эта модель представляет собой структуру данных для хранения уведомлений, включая тип уведомления, содержание и другие атрибуты.
Инициализирует модель уведомлений.
Arguments:
- **kwargs: Дополнительные параметры для инициализации модели.
int: Идентификатор пользователя в Telegram, связанный с уведомлением.
NotificationType: тип уведомления
datetime(str): Дата создания уведомления (по умолчанию - текущая дата).
UserData: Связанные уведомления пользователя
list[DisplayLookup]: Отображение уведомлений на сайте.
list[DisplayLookup]: Полное отображение уведомлений на сайте.
46 class ValidationSchema(BaseModel): 47 """Схема валидации для модели уведомлений. 48 49 Эта схема используется для валидации данных, связанных с уведомлениями. 50 """ 51 52 id: int | None = Field(default=None, title="ID") 53 """Уникальный идентификатор уведомления.""" 54 55 user_id: int = Field(title="Telegram ID") 56 """Идентификатор пользователя в Telegram.""" 57 58 type: NotificationType = Field(title="Notification Type") 59 """Тип уведомления.""" 60 61 message: str = Field(title="Message") 62 """Заголовок уведомления.""" 63 64 date: str = Field(title="Create date") 65 """Дата создания уведомления.""" 66 67 model_config = ConfigDict(extra="ignore")
Схема валидации для модели уведомлений.
Эта схема используется для валидации данных, связанных с уведомлениями.
Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
Metadata about the fields defined on the model,
mapping of field names to [FieldInfo
][pydantic.fields.FieldInfo] objects.
This replaces Model.__fields__
from Pydantic V1.