/
ring0
/
RestaurantApp
Обзор
Документация
Войти
/
ring0
/
RestaurantApp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
models.py
103 строки
3 KB
ring0
Init project
28 май 2026, 20:53
Верифицирован
28 май 2026, 20:53
e63548a
Код
Авторство
О чём код?
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey from sqlalchemy.orm import relationship from pydantic import BaseModel, validator from datetime import datetime from db import Base class Table(Base): """Модель столика""" __tablename__ = "tables" id = Column(Integer, primary_key=True, index=True) number = Column(Integer, unique=True, nullable=False) capacity = Column(Integer, nullable=False) status = Column(String, default="available") # available, occupied, reserved reservations = relationship("Reservation", back_populates="table") def to_dict(self): return { "id": self.id, "number": self.number, "capacity": self.capacity, "status": self.status } class Reservation(Base): """Модель бронирования""" __tablename__ = "reservations" id = Column(Integer, primary_key=True, index=True) table_id = Column(Integer, ForeignKey("tables.id"), nullable=False) customer_name = Column(String, nullable=False) reservation_date = Column(String, nullable=False) # Формат: YYYY-MM-DD start_time = Column(String, nullable=False) # Формат: HH:MM end_time = Column(String, nullable=False) # Формат: HH:MM guests_count = Column(Integer, nullable=False) status = Column(String, default="confirmed") # confirmed, cancelled, completed table = relationship("Table", back_populates="reservations") def to_dict(self): return { "id": self.id, "table_id": self.table_id, "table_number": self.table.number, "customer_name": self.customer_name, "reservation_date": self.reservation_date, "start_time": self.start_time, "end_time": self.end_time, "guests_count": self.guests_count, "status": self.status } # Pydantic модели для валидации class TableCreate(BaseModel): number: int capacity: int @validator('capacity') def capacity_must_be_positive(cls, v): if v <= 0: raise ValueError('capacity must be positive') return v class ReservationCreate(BaseModel): table_id: int customer_name: str reservation_date: str start_time: str end_time: str guests_count: int @validator('reservation_date') def validate_date(cls, v): try: datetime.strptime(v, '%Y-%m-%d') except ValueError: raise ValueError('date must be in YYYY-MM-DD format') return v @validator('start_time', 'end_time') def validate_time(cls, v): try: datetime.strptime(v, '%H:%M') except ValueError: raise ValueError('time must be in HH:MM format') return v @validator('guests_count') def guests_count_must_be_positive(cls, v): if v <= 0: raise ValueError('guests_count must be positive') return v class StatusUpdate(BaseModel): status: str @validator('status') def validate_status(cls, v): allowed_statuses = ['available', 'occupied', 'reserved', 'confirmed', 'cancelled', 'completed'] if v not in allowed_statuses: raise ValueError(f'status must be one of {allowed_statuses}') return v