Spaces:
Sleeping
Sleeping
File size: 1,191 Bytes
74de430 0a9d112 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | """
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
|