From 75e99ca0712a2c09230e5c6f8d093dc526cc717d Mon Sep 17 00:00:00 2001 From: Tolmachev Igor Date: Mon, 20 Apr 2026 20:56:35 +0300 Subject: Add users command --- models/__init__.py | 3 ++- models/callback_data.py | 41 ++++++++++++++++++++++++++++++++++++++++- models/user.py | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 2 deletions(-) (limited to 'models') diff --git a/models/__init__.py b/models/__init__.py index f26ee74..c458f30 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -1,7 +1,7 @@ # isort: off from .base import BaseTable from .rich_text import RichText -from .user import User, UserRole +from .user import UserCache, User, UserRole from .invoce import Invoice from .payment import Payment, PaymentStatus, ReceiptFile, ReceiptFileType from .announcement import Announcement @@ -10,6 +10,7 @@ from . import callback_data __all__ = [ "BaseTable", + "UserCache", "User", "UserRole", "Invoice", diff --git a/models/callback_data.py b/models/callback_data.py index 5ee38bd..b1e7e56 100644 --- a/models/callback_data.py +++ b/models/callback_data.py @@ -1,6 +1,6 @@ from aiogram.filters.callback_data import CallbackData -from models import PaymentStatus +from models import PaymentStatus, UserRole class PayInvoiceClb(CallbackData, prefix="pay_invoice"): @@ -37,3 +37,42 @@ class PaymentPageClb(CallbackData, prefix="payment.p"): class PaymentItemClb(CallbackData, prefix="payment.i"): page: int payment_id: int + + +class UserPageClb(CallbackData, prefix="user.p"): + page: int + + +class UserItemClb(CallbackData, prefix="user.i"): + page: int + user_id: int + + +class UserAddClb(CallbackData, prefix="user.a"): + pass + + +class UserRoleClb(CallbackData, prefix="user.e.r"): + page: int + user_id: int + + +class UserRoleSetClb(CallbackData, prefix="user.e.r.s"): + page: int + user_id: int + role: UserRole + + +class UserDeleteClb(CallbackData, prefix="user.e.d"): + page: int + user_id: int + + +class UserDeleteConfirmClb(CallbackData, prefix="user.e.d.c"): + page: int + user_id: int + + +class UserVpnLinkClb(CallbackData, prefix="user.e.v"): + page: int + user_id: int diff --git a/models/user.py b/models/user.py index 690083c..896ff3b 100644 --- a/models/user.py +++ b/models/user.py @@ -1,11 +1,44 @@ 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 -- cgit v1.3