""" Base SQLAlchemy Model with common fields and methods """ from datetime import datetime from uuid import uuid4 from sqlalchemy import DateTime, func from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): """Base class for all models""" pass class BaseModel(Base): """Base model with common fields""" __abstract__ = True id: Mapped[UUID] = mapped_column( UUID(as_uuid=True), primary_key=True, default=uuid4 ) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now() ) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), onupdate=func.now() ) def to_dict(self) -> dict: """Convert model to dictionary""" return { column.name: getattr(self, column.name) for column in self.__table__.columns }