from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, DateTime from datetime import datetime from typing import Any # Базовый класс для декларативных моделей Base = declarative_base() class BaseModel(Base): """ Абстрактный базовый класс для всех моделей. Содержит общие поля и методы. """ __abstract__ = True id = Column(Integer, primary_key=True, index=True) created_at = Column(DateTime, default=datetime.utcnow, nullable=False) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False) def dict(self) -> dict[str, Any]: """Преобразует модель в словарь""" return { column.name: getattr(self, column.name) for column in self.__table__.columns } def update(self, **kwargs) -> None: """Обновляет поля модели""" for key, value in kwargs.items(): if hasattr(self, key): setattr(self, key, value) @classmethod def get_column_names(cls) -> list[str]: """Возвращает список имен колонок модели""" return [column.name for column in cls.__table__.columns] def __repr__(self) -> str: """Строковое представление модели""" return f"<{self.__class__.__name__}(id={self.id})>"