""" Base Model with Common Fields """ from datetime import datetime from sqlalchemy import Column, DateTime from sqlalchemy.dialects.postgresql import UUID import uuid from app.core.database import Base class BaseModel(Base): """ Base model with common fields for all tables """ __abstract__ = True id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) created_at = Column(DateTime, default=datetime.utcnow, nullable=False) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False) deleted_at = Column(DateTime, nullable=True) # Soft delete def soft_delete(self): """Soft delete the record""" self.deleted_at = datetime.utcnow() @property def is_deleted(self) -> bool: """Check if record is soft deleted""" return self.deleted_at is not None @classmethod def active_only(cls, query): """Filter query to only include non-deleted records""" return query.filter(cls.deleted_at == None) @classmethod def with_deleted(cls, query): """Return query including deleted records (no filter)""" return query