| """ | |
| 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 | |
| } | |