from aiogram.types.reply_keyboard import ReplyKeyboardMarkup as _ReplyKeyboardMarkup from datetime import date, time, datetime, timedelta from pydantic import BaseModel import re from typing import Literal email_address = re.compile(r'(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)') phone_number = re.compile(r'\D*') iso_datetime = re.compile(r'(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).(\d{0,6})([+-]?\d{0,2}:?\d{0,2})') max_comment_length = 1024 class ReplyKeyboardMarkup(_ReplyKeyboardMarkup): def __init__(self, keyboard=None): super().__init__( keyboard=keyboard, resize_keyboard=True, ) class Category(BaseModel): id: int name: str description: str class Subcategory(BaseModel): category: Category id: int name: str description: str class Executor(BaseModel): id: int name: str class TimeRange(BaseModel): id: int start_time: time end_time: time def __hash__(self): return self.id class FreeToOrder(BaseModel): date: date time_range: TimeRange executor: Executor busy_interval: timedelta class Order(BaseModel): id: int subcategory: Subcategory date: date time_range: TimeRange executor: Executor telegram_id: int email_address: str phone_number: str comment: str start_time: datetime = None end_time: datetime = None class Issue(BaseModel): id: int key: str status: Literal[ 'undefined', 'new', 'indeterminate', 'done', ] telegram_id: int