Edit on GitHub

src.db.models.userdata

  1from datetime import datetime
  2
  3from fastui.components.display import DisplayLookup, DisplayMode
  4from fastui.events import GoToEvent
  5from pydantic import BaseModel, ConfigDict, Field, model_validator
  6from sqlalchemy import BigInteger, DateTime, Enum, Numeric, func
  7from sqlalchemy.orm import Mapped, mapped_column, relationship
  8
  9from core.config import Base
 10from db.models import UserActivity
 11from db.models.notifications import Notifications
 12from db.models.reports import Reports
 13from db.models.transactions import Transactions
 14from db.models.wg_config import WgConfig
 15
 16
 17class UserData(Base):
 18    """Модель данных пользователя.
 19
 20    Эта модель представляет собой структуру данных для хранения информации
 21    о пользователях, включая их настройки, баланс и статус.
 22    """
 23
 24    __tablename__ = "userdata"
 25    __table_args__ = {"extend_existing": True}
 26
 27    id: Mapped[int] = mapped_column(primary_key=True)
 28    """int: Уникальный идентификатор пользователя."""
 29
 30    telegram_id: Mapped[int] = mapped_column(type_=BigInteger, unique=True)
 31    """int: Идентификатор пользователя в Telegram (уникальный)."""
 32
 33    telegram_name: Mapped[str]
 34    """str: Имя пользователя в Telegram."""
 35
 36    admin: Mapped[bool] = mapped_column(default=False)
 37    """bool: Является ли пользователь администратором (по умолчанию False)."""
 38
 39    active: Mapped[UserActivity] = mapped_column(
 40        Enum(UserActivity, values_callable=lambda obj: [e.value for e in obj]),
 41        default=UserActivity.inactive,
 42    )
 43    """UserActivity: Статус активности пользователя (по умолчанию неактивен)."""
 44
 45    stage: Mapped[float] = mapped_column(default=0)
 46    """float: Этап пользователя (по умолчанию 0)."""
 47
 48    balance: Mapped[float] = mapped_column(type_=Numeric(scale=2), default=0)
 49    """float: Баланс пользователя (по умолчанию 0)."""
 50
 51    free: Mapped[bool] = mapped_column(default=True)
 52    """bool: Доступен ли пользователь (по умолчанию True)."""
 53
 54    mute: Mapped[bool] = mapped_column(server_default="0")
 55    """bool: Заглушен ли пользователь (по умолчанию False)."""
 56
 57    updated: Mapped[datetime] = mapped_column(
 58        type_=DateTime(timezone=True),
 59        server_default=func.now(),
 60        onupdate=func.current_timestamp(),
 61    )
 62    """datetime: Дата и время последнего обновления пользователя."""
 63
 64    configs: Mapped[list["WgConfig"]] = relationship(
 65        back_populates="conf_connect", lazy="subquery"
 66    )
 67    """list[WgConfig]: Связанные конфигурации WG пользователя."""
 68
 69    transactions: Mapped[list["Transactions"]] = relationship(
 70        back_populates="transact_connect", lazy="subquery"
 71    )
 72    """list[Transactions]: Связанные транзакции пользователя."""
 73
 74    reports: Mapped[list["Reports"]] = relationship(
 75        back_populates="rep_connect", lazy="subquery"
 76    )
 77    """list[Reports]: Связанные обращения пользователя."""
 78
 79    notifications: Mapped[list["Notifications"]] = relationship(
 80        back_populates="notif_connect", lazy="subquery"
 81    )
 82    """list[Notifications]: Связанные уведомления пользователя."""
 83
 84    # @hybrid_property
 85    def fbalance(self):
 86        """Возвращает округленный баланс пользователя.
 87
 88        Returns:
 89            float: Округленный баланс пользователя.
 90        """
 91        return round(float(self.balance), 2)
 92
 93    class ValidationSchema(BaseModel):
 94        """Схема валидации для модели данных пользователя.
 95
 96        Эта схема используется для валидации данных, связанных с пользователями.
 97        """
 98
 99        id: int | None = Field(default=None, title="ID")
100        """Уникальный идентификатор пользователя."""
101
102        telegram_id: int = Field(title="Telegram ID")
103        """Идентификатор пользователя в Telegram."""
104
105        telegram_name: str = Field(title="Name")
106        """Имя пользователя в Telegram."""
107
108        admin: bool = Field(title="Admin", default=False)
109        """Является ли пользователь администратором (по умолчанию False)."""
110
111        active: UserActivity = Field(title="Active", default=UserActivity.inactive)
112        """Статус активности пользователя (по умолчанию неактивен)."""
113
114        stage: float = Field(title="Stage", default=0)
115        """Этап пользователя (по умолчанию 0)."""
116
117        balance: float = Field(title="Balance", default=0)
118        """Баланс пользователя (по умолчанию 0)."""
119
120        free: bool = Field(title="Free", default=True)
121        """Доступен ли пользователь (по умолчанию True)."""
122
123        mute: bool = Field(title="Mute", default=False)
124        """Заглушен ли пользователь (по умолчанию False)."""
125
126        updated: datetime = Field(title="Last update")
127        """Дата и время последнего обновления пользователя."""
128
129        configs: list["WgConfig.ValidationSchema"] = Field(
130            default=[], title="User Configurations"
131        )
132        """Конфигурации пользователя."""
133
134        site_updated: str = Field(init=False, title="Last update", default="00:00")
135        """Строковое представление последнего обновления (не инициализируется при создании)."""
136
137        @model_validator(mode="after")
138        def set_site_date(cls, values: BaseModel):
139            """Устанавливает строковое представление даты последнего обновления.
140
141            Args:
142                cls: Класс схемы.
143                values (BaseModel): Значения для валидации.
144
145            Returns:
146                BaseModel: Обновленные значения.
147            """
148            if hasattr(values, "updated"):
149                values.site_updated = values.updated.astimezone().ctime()
150            return values
151
152        model_config = ConfigDict(extra="ignore")
153
154    class ValidationSchemaExtended(ValidationSchema):
155        transactions: list["Transactions.ValidationSchema"] = Field(
156            default=[], title="User Transactions"
157        )
158        """Транзакции пользователя."""
159
160        reports: list["Reports.ValidationSchema"] = Field(
161            default=[], title="User Reports"
162        )
163        """Обращения пользователя."""
164
165        notifications: list["Notifications.ValidationSchema"] = Field(
166            default=[], title="User Notifications"
167        )
168        """Уведомления пользователя."""
169
170    # INTERFACE (fastui)
171    site_display = [
172        DisplayLookup(field="id"),
173        DisplayLookup(
174            field="telegram_id",
175            mode=DisplayMode.plain,
176            on_click=GoToEvent(url="/bot/tables/userdata/?telegram_id={telegram_id}"),
177        ),
178        DisplayLookup(field="telegram_name", mode=DisplayMode.as_title),
179        DisplayLookup(field="admin"),
180        DisplayLookup(field="active", mode=DisplayMode.markdown),
181        DisplayLookup(field="stage"),
182        DisplayLookup(field="balance"),
183        DisplayLookup(field="free"),
184        DisplayLookup(field="mute"),
185        DisplayLookup(field="site_updated"),
186    ]
187    """list[DisplayLookup]: Отображение данных пользователя на сайте."""
188
189    def __init__(self, **kwargs):
190        """Инициализирует модель данных пользователя.
191
192        Args:
193            **kwargs: Дополнительные параметры для инициализации модели.
194        """
195        if kwargs:
196            validated_data = self.ValidationSchema(**kwargs).model_dump(
197                exclude={"site_updated"}
198            )
199            super().__init__(**(validated_data))
200        else:
201            super().__init__(**(kwargs))
class UserData(sqlalchemy.inspection.Inspectable[sqlalchemy.orm.state.InstanceState[typing.Any]]):
 18class UserData(Base):
 19    """Модель данных пользователя.
 20
 21    Эта модель представляет собой структуру данных для хранения информации
 22    о пользователях, включая их настройки, баланс и статус.
 23    """
 24
 25    __tablename__ = "userdata"
 26    __table_args__ = {"extend_existing": True}
 27
 28    id: Mapped[int] = mapped_column(primary_key=True)
 29    """int: Уникальный идентификатор пользователя."""
 30
 31    telegram_id: Mapped[int] = mapped_column(type_=BigInteger, unique=True)
 32    """int: Идентификатор пользователя в Telegram (уникальный)."""
 33
 34    telegram_name: Mapped[str]
 35    """str: Имя пользователя в Telegram."""
 36
 37    admin: Mapped[bool] = mapped_column(default=False)
 38    """bool: Является ли пользователь администратором (по умолчанию False)."""
 39
 40    active: Mapped[UserActivity] = mapped_column(
 41        Enum(UserActivity, values_callable=lambda obj: [e.value for e in obj]),
 42        default=UserActivity.inactive,
 43    )
 44    """UserActivity: Статус активности пользователя (по умолчанию неактивен)."""
 45
 46    stage: Mapped[float] = mapped_column(default=0)
 47    """float: Этап пользователя (по умолчанию 0)."""
 48
 49    balance: Mapped[float] = mapped_column(type_=Numeric(scale=2), default=0)
 50    """float: Баланс пользователя (по умолчанию 0)."""
 51
 52    free: Mapped[bool] = mapped_column(default=True)
 53    """bool: Доступен ли пользователь (по умолчанию True)."""
 54
 55    mute: Mapped[bool] = mapped_column(server_default="0")
 56    """bool: Заглушен ли пользователь (по умолчанию False)."""
 57
 58    updated: Mapped[datetime] = mapped_column(
 59        type_=DateTime(timezone=True),
 60        server_default=func.now(),
 61        onupdate=func.current_timestamp(),
 62    )
 63    """datetime: Дата и время последнего обновления пользователя."""
 64
 65    configs: Mapped[list["WgConfig"]] = relationship(
 66        back_populates="conf_connect", lazy="subquery"
 67    )
 68    """list[WgConfig]: Связанные конфигурации WG пользователя."""
 69
 70    transactions: Mapped[list["Transactions"]] = relationship(
 71        back_populates="transact_connect", lazy="subquery"
 72    )
 73    """list[Transactions]: Связанные транзакции пользователя."""
 74
 75    reports: Mapped[list["Reports"]] = relationship(
 76        back_populates="rep_connect", lazy="subquery"
 77    )
 78    """list[Reports]: Связанные обращения пользователя."""
 79
 80    notifications: Mapped[list["Notifications"]] = relationship(
 81        back_populates="notif_connect", lazy="subquery"
 82    )
 83    """list[Notifications]: Связанные уведомления пользователя."""
 84
 85    # @hybrid_property
 86    def fbalance(self):
 87        """Возвращает округленный баланс пользователя.
 88
 89        Returns:
 90            float: Округленный баланс пользователя.
 91        """
 92        return round(float(self.balance), 2)
 93
 94    class ValidationSchema(BaseModel):
 95        """Схема валидации для модели данных пользователя.
 96
 97        Эта схема используется для валидации данных, связанных с пользователями.
 98        """
 99
100        id: int | None = Field(default=None, title="ID")
101        """Уникальный идентификатор пользователя."""
102
103        telegram_id: int = Field(title="Telegram ID")
104        """Идентификатор пользователя в Telegram."""
105
106        telegram_name: str = Field(title="Name")
107        """Имя пользователя в Telegram."""
108
109        admin: bool = Field(title="Admin", default=False)
110        """Является ли пользователь администратором (по умолчанию False)."""
111
112        active: UserActivity = Field(title="Active", default=UserActivity.inactive)
113        """Статус активности пользователя (по умолчанию неактивен)."""
114
115        stage: float = Field(title="Stage", default=0)
116        """Этап пользователя (по умолчанию 0)."""
117
118        balance: float = Field(title="Balance", default=0)
119        """Баланс пользователя (по умолчанию 0)."""
120
121        free: bool = Field(title="Free", default=True)
122        """Доступен ли пользователь (по умолчанию True)."""
123
124        mute: bool = Field(title="Mute", default=False)
125        """Заглушен ли пользователь (по умолчанию False)."""
126
127        updated: datetime = Field(title="Last update")
128        """Дата и время последнего обновления пользователя."""
129
130        configs: list["WgConfig.ValidationSchema"] = Field(
131            default=[], title="User Configurations"
132        )
133        """Конфигурации пользователя."""
134
135        site_updated: str = Field(init=False, title="Last update", default="00:00")
136        """Строковое представление последнего обновления (не инициализируется при создании)."""
137
138        @model_validator(mode="after")
139        def set_site_date(cls, values: BaseModel):
140            """Устанавливает строковое представление даты последнего обновления.
141
142            Args:
143                cls: Класс схемы.
144                values (BaseModel): Значения для валидации.
145
146            Returns:
147                BaseModel: Обновленные значения.
148            """
149            if hasattr(values, "updated"):
150                values.site_updated = values.updated.astimezone().ctime()
151            return values
152
153        model_config = ConfigDict(extra="ignore")
154
155    class ValidationSchemaExtended(ValidationSchema):
156        transactions: list["Transactions.ValidationSchema"] = Field(
157            default=[], title="User Transactions"
158        )
159        """Транзакции пользователя."""
160
161        reports: list["Reports.ValidationSchema"] = Field(
162            default=[], title="User Reports"
163        )
164        """Обращения пользователя."""
165
166        notifications: list["Notifications.ValidationSchema"] = Field(
167            default=[], title="User Notifications"
168        )
169        """Уведомления пользователя."""
170
171    # INTERFACE (fastui)
172    site_display = [
173        DisplayLookup(field="id"),
174        DisplayLookup(
175            field="telegram_id",
176            mode=DisplayMode.plain,
177            on_click=GoToEvent(url="/bot/tables/userdata/?telegram_id={telegram_id}"),
178        ),
179        DisplayLookup(field="telegram_name", mode=DisplayMode.as_title),
180        DisplayLookup(field="admin"),
181        DisplayLookup(field="active", mode=DisplayMode.markdown),
182        DisplayLookup(field="stage"),
183        DisplayLookup(field="balance"),
184        DisplayLookup(field="free"),
185        DisplayLookup(field="mute"),
186        DisplayLookup(field="site_updated"),
187    ]
188    """list[DisplayLookup]: Отображение данных пользователя на сайте."""
189
190    def __init__(self, **kwargs):
191        """Инициализирует модель данных пользователя.
192
193        Args:
194            **kwargs: Дополнительные параметры для инициализации модели.
195        """
196        if kwargs:
197            validated_data = self.ValidationSchema(**kwargs).model_dump(
198                exclude={"site_updated"}
199            )
200            super().__init__(**(validated_data))
201        else:
202            super().__init__(**(kwargs))

Модель данных пользователя.

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

UserData(**kwargs)

Инициализирует модель данных пользователя.

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

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

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

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

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

str: Имя пользователя в Telegram.

admin: sqlalchemy.orm.base.Mapped[bool]

bool: Является ли пользователь администратором (по умолчанию False).

active: sqlalchemy.orm.base.Mapped[db.models.enums.UserActivity]

UserActivity: Статус активности пользователя (по умолчанию неактивен).

stage: sqlalchemy.orm.base.Mapped[float]

float: Этап пользователя (по умолчанию 0).

balance: sqlalchemy.orm.base.Mapped[float]

float: Баланс пользователя (по умолчанию 0).

free: sqlalchemy.orm.base.Mapped[bool]

bool: Доступен ли пользователь (по умолчанию True).

mute: sqlalchemy.orm.base.Mapped[bool]

bool: Заглушен ли пользователь (по умолчанию False).

updated: sqlalchemy.orm.base.Mapped[datetime.datetime]

datetime: Дата и время последнего обновления пользователя.

configs: sqlalchemy.orm.base.Mapped[list[db.models.wg_config.WgConfig]]

list[WgConfig]: Связанные конфигурации WG пользователя.

transactions: sqlalchemy.orm.base.Mapped[list[db.models.transactions.Transactions]]

list[Transactions]: Связанные транзакции пользователя.

reports: sqlalchemy.orm.base.Mapped[list[db.models.reports.Reports]]

list[Reports]: Связанные обращения пользователя.

notifications: sqlalchemy.orm.base.Mapped[list[db.models.notifications.Notifications]]

list[Notifications]: Связанные уведомления пользователя.

def fbalance(self):
86    def fbalance(self):
87        """Возвращает округленный баланс пользователя.
88
89        Returns:
90            float: Округленный баланс пользователя.
91        """
92        return round(float(self.balance), 2)

Возвращает округленный баланс пользователя.

Returns:

float: Округленный баланс пользователя.

site_display = [DisplayLookup(mode=None, title=None, on_click=None, field='id', table_width_percent=None), DisplayLookup(mode=<DisplayMode.plain: 'plain'>, title=None, on_click=GoToEvent(url='/bot/tables/userdata/?telegram_id={telegram_id}', query=None, target=None, type='go-to'), field='telegram_id', table_width_percent=None), DisplayLookup(mode=<DisplayMode.as_title: 'as_title'>, title=None, on_click=None, field='telegram_name', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='admin', table_width_percent=None), DisplayLookup(mode=<DisplayMode.markdown: 'markdown'>, title=None, on_click=None, field='active', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='stage', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='balance', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='free', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='mute', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='site_updated', table_width_percent=None)]

list[DisplayLookup]: Отображение данных пользователя на сайте.

class UserData.ValidationSchema(pydantic.main.BaseModel):
 94    class ValidationSchema(BaseModel):
 95        """Схема валидации для модели данных пользователя.
 96
 97        Эта схема используется для валидации данных, связанных с пользователями.
 98        """
 99
100        id: int | None = Field(default=None, title="ID")
101        """Уникальный идентификатор пользователя."""
102
103        telegram_id: int = Field(title="Telegram ID")
104        """Идентификатор пользователя в Telegram."""
105
106        telegram_name: str = Field(title="Name")
107        """Имя пользователя в Telegram."""
108
109        admin: bool = Field(title="Admin", default=False)
110        """Является ли пользователь администратором (по умолчанию False)."""
111
112        active: UserActivity = Field(title="Active", default=UserActivity.inactive)
113        """Статус активности пользователя (по умолчанию неактивен)."""
114
115        stage: float = Field(title="Stage", default=0)
116        """Этап пользователя (по умолчанию 0)."""
117
118        balance: float = Field(title="Balance", default=0)
119        """Баланс пользователя (по умолчанию 0)."""
120
121        free: bool = Field(title="Free", default=True)
122        """Доступен ли пользователь (по умолчанию True)."""
123
124        mute: bool = Field(title="Mute", default=False)
125        """Заглушен ли пользователь (по умолчанию False)."""
126
127        updated: datetime = Field(title="Last update")
128        """Дата и время последнего обновления пользователя."""
129
130        configs: list["WgConfig.ValidationSchema"] = Field(
131            default=[], title="User Configurations"
132        )
133        """Конфигурации пользователя."""
134
135        site_updated: str = Field(init=False, title="Last update", default="00:00")
136        """Строковое представление последнего обновления (не инициализируется при создании)."""
137
138        @model_validator(mode="after")
139        def set_site_date(cls, values: BaseModel):
140            """Устанавливает строковое представление даты последнего обновления.
141
142            Args:
143                cls: Класс схемы.
144                values (BaseModel): Значения для валидации.
145
146            Returns:
147                BaseModel: Обновленные значения.
148            """
149            if hasattr(values, "updated"):
150                values.site_updated = values.updated.astimezone().ctime()
151            return values
152
153        model_config = ConfigDict(extra="ignore")

Схема валидации для модели данных пользователя.

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

id: int | None

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

telegram_id: int

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

telegram_name: str

Имя пользователя в Telegram.

admin: bool

Является ли пользователь администратором (по умолчанию False).

active: db.models.enums.UserActivity

Статус активности пользователя (по умолчанию неактивен).

stage: float

Этап пользователя (по умолчанию 0).

balance: float

Баланс пользователя (по умолчанию 0).

free: bool

Доступен ли пользователь (по умолчанию True).

mute: bool

Заглушен ли пользователь (по умолчанию False).

updated: datetime.datetime

Дата и время последнего обновления пользователя.

configs: list[db.models.wg_config.WgConfig.ValidationSchema]

Конфигурации пользователя.

site_updated: str

Строковое представление последнего обновления (не инициализируется при создании).

@model_validator(mode='after')
def set_site_date(cls, values: pydantic.main.BaseModel):
138        @model_validator(mode="after")
139        def set_site_date(cls, values: BaseModel):
140            """Устанавливает строковое представление даты последнего обновления.
141
142            Args:
143                cls: Класс схемы.
144                values (BaseModel): Значения для валидации.
145
146            Returns:
147                BaseModel: Обновленные значения.
148            """
149            if hasattr(values, "updated"):
150                values.site_updated = values.updated.astimezone().ctime()
151            return values

Устанавливает строковое представление даты последнего обновления.

Arguments:
  • cls: Класс схемы.
  • values (BaseModel): Значения для валидации.
Returns:

BaseModel: Обновленные значения.

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'), 'telegram_id': FieldInfo(annotation=int, required=True, title='Telegram ID'), 'telegram_name': FieldInfo(annotation=str, required=True, title='Name'), 'admin': FieldInfo(annotation=bool, required=False, default=False, title='Admin'), 'active': FieldInfo(annotation=UserActivity, required=False, default=<UserActivity.inactive: 'inactive'>, title='Active'), 'stage': FieldInfo(annotation=float, required=False, default=0, title='Stage'), 'balance': FieldInfo(annotation=float, required=False, default=0, title='Balance'), 'free': FieldInfo(annotation=bool, required=False, default=True, title='Free'), 'mute': FieldInfo(annotation=bool, required=False, default=False, title='Mute'), 'updated': FieldInfo(annotation=datetime, required=True, title='Last update'), 'configs': FieldInfo(annotation=list[WgConfig.ValidationSchema], required=False, default=[], title='User Configurations'), 'site_updated': FieldInfo(annotation=str, required=False, default='00:00', title='Last update', init=False)}

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.

class UserData.ValidationSchemaExtended(UserData.ValidationSchema):
155    class ValidationSchemaExtended(ValidationSchema):
156        transactions: list["Transactions.ValidationSchema"] = Field(
157            default=[], title="User Transactions"
158        )
159        """Транзакции пользователя."""
160
161        reports: list["Reports.ValidationSchema"] = Field(
162            default=[], title="User Reports"
163        )
164        """Обращения пользователя."""
165
166        notifications: list["Notifications.ValidationSchema"] = Field(
167            default=[], title="User Notifications"
168        )
169        """Уведомления пользователя."""

Схема валидации для модели данных пользователя.

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

transactions: list[db.models.transactions.Transactions.ValidationSchema]

Транзакции пользователя.

reports: list[db.models.reports.Reports.ValidationSchema]

Обращения пользователя.

notifications: list[db.models.notifications.Notifications.ValidationSchema]

Уведомления пользователя.

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'), 'telegram_id': FieldInfo(annotation=int, required=True, title='Telegram ID'), 'telegram_name': FieldInfo(annotation=str, required=True, title='Name'), 'admin': FieldInfo(annotation=bool, required=False, default=False, title='Admin'), 'active': FieldInfo(annotation=UserActivity, required=False, default=<UserActivity.inactive: 'inactive'>, title='Active'), 'stage': FieldInfo(annotation=float, required=False, default=0, title='Stage'), 'balance': FieldInfo(annotation=float, required=False, default=0, title='Balance'), 'free': FieldInfo(annotation=bool, required=False, default=True, title='Free'), 'mute': FieldInfo(annotation=bool, required=False, default=False, title='Mute'), 'updated': FieldInfo(annotation=datetime, required=True, title='Last update'), 'configs': FieldInfo(annotation=list[WgConfig.ValidationSchema], required=False, default=[], title='User Configurations'), 'site_updated': FieldInfo(annotation=str, required=False, default='00:00', title='Last update', init=False), 'transactions': FieldInfo(annotation=list[Transactions.ValidationSchema], required=False, default=[], title='User Transactions'), 'reports': FieldInfo(annotation=list[Reports.ValidationSchema], required=False, default=[], title='User Reports'), 'notifications': FieldInfo(annotation=list[Notifications.ValidationSchema], required=False, default=[], title='User Notifications')}

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.