sfx-tg-bot/models/models.py

80 строки
1.6 KiB
Python

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