Edit on GitHub

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))
class Notifications(sqlalchemy.inspection.Inspectable[sqlalchemy.orm.state.InstanceState[typing.Any]]):
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))

Модель уведомлений.

Эта модель представляет собой структуру данных для хранения уведомлений, включая тип уведомления, содержание и другие атрибуты.

Notifications(**kwargs)

Инициализирует модель уведомлений.

Arguments:
  • **kwargs: Дополнительные параметры для инициализации модели.
id: sqlalchemy.orm.base.Mapped[int]

int: Уникальный идентификатор уведомления.

user_id: sqlalchemy.orm.base.Mapped[int]

int: Идентификатор пользователя в Telegram, связанный с уведомлением.

type: sqlalchemy.orm.base.Mapped[db.models.enums.NotificationType]

NotificationType: тип уведомления

message: sqlalchemy.orm.base.Mapped[str]

str: Содержание уведомления.

date: sqlalchemy.orm.base.Mapped[str]

datetime(str): Дата создания уведомления (по умолчанию - текущая дата).

notif_connect: sqlalchemy.orm.base.Mapped[ForwardRef('UserData')]

UserData: Связанные уведомления пользователя

site_display = [DisplayLookup(mode=None, title=None, on_click=GoToEvent(url='/bot/tables/notifications/?notification_id={id}', query=None, target=None, type='go-to'), field='id', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='type', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='message', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='date', table_width_percent=None)]

list[DisplayLookup]: Отображение уведомлений на сайте.

site_display_all = [DisplayLookup(mode=None, title=None, on_click=GoToEvent(url='/bot/tables/notifications/?notification_id={id}', query=None, target=None, type='go-to'), field='id', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='type', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='message', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='date', table_width_percent=None)]

list[DisplayLookup]: Полное отображение уведомлений на сайте.

class Notifications.ValidationSchema(pydantic.main.BaseModel):
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")

Схема валидации для модели уведомлений.

Эта схема используется для валидации данных, связанных с уведомлениями.

id: int | None

Уникальный идентификатор уведомления.

user_id: int

Идентификатор пользователя в Telegram.

type: db.models.enums.NotificationType

Тип уведомления.

message: str

Заголовок уведомления.

date: str

Дата создания уведомления.

model_config = {'extra': 'ignore'}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, pydantic.fields.FieldInfo]] = {'id': FieldInfo(annotation=Union[int, NoneType], required=False, default=None, title='ID'), 'user_id': FieldInfo(annotation=int, required=True, title='Telegram ID'), 'type': FieldInfo(annotation=NotificationType, required=True, title='Notification Type'), 'message': FieldInfo(annotation=str, required=True, title='Message'), 'date': FieldInfo(annotation=str, required=True, title='Create date')}

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.

model_computed_fields: ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.