This commit is contained in:
2026-04-09 19:28:41 +03:00
commit 9fa723bb4c
43 changed files with 2804 additions and 0 deletions

41
app/models/base.py Normal file
View File

@@ -0,0 +1,41 @@
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})>"