aboutsummaryrefslogtreecommitdiff
path: root/models/user.py
blob: 0bebb11c51b1855d4311e096e9940a31e74ad7e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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'<a href="https://t.me/{self.username}">{self.full_name}</a>'
        else:
            return f'<a href="tg://user?id={self.id}">{self.full_name}</a>'


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