from datetime import datetime
from enum import IntEnum
from typing import Self
from aiogram.types import Chat
from aiogram.types import User as TgUser
from pydantic import BaseModel
from sqlalchemy.orm import Mapped, mapped_column
from models import BaseTable
class UserCache(BaseModel):
id: int
username: str | None = None
full_name: str
@classmethod
def from_chat(cls, chat: Chat) -> Self:
return cls(
id=chat.id,
username=chat.username,
full_name=chat.full_name,
)
@classmethod
def from_user(cls, user: TgUser) -> Self:
return cls(
id=user.id,
username=user.username,
full_name=user.full_name,
)
@property
def mention(self) -> str:
if self.username is not None:
return f'{self.full_name}'
else:
return f'{self.full_name}'
class UserRole(IntEnum):
REGULAR = 0
ADMIN = 1
class User(BaseTable):
__tablename__ = "user"
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=False)
role: Mapped[UserRole] = mapped_column(default=UserRole.REGULAR)
vpn_link: Mapped[str]
datetime: Mapped[datetime]
def is_regular(self) -> bool:
return self.role >= UserRole.REGULAR
def is_admin(self) -> bool:
return self.role == UserRole.ADMIN