kamau1's picture
feat: redics, user delete, link profile to media service
0a9d112
"""
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