"""Category model for income/expense categories""" from sqlalchemy import Column, Integer, String, DateTime, Boolean, ForeignKey, Enum from sqlalchemy.orm import relationship from datetime import datetime from enum import Enum as PyEnum from app.db.database import Base class CategoryType(str, PyEnum): """Types of categories""" EXPENSE = "expense" INCOME = "income" class Category(Base): """Category model - income/expense categories""" __tablename__ = "categories" id = Column(Integer, primary_key=True) family_id = Column(Integer, ForeignKey("families.id"), nullable=False, index=True) name = Column(String(255), nullable=False) category_type = Column(Enum(CategoryType), nullable=False) emoji = Column(String(10), nullable=True) color = Column(String(7), nullable=True) # Hex color description = Column(String(500), nullable=True) # Status is_active = Column(Boolean, default=True) is_default = Column(Boolean, default=False) # Order for UI order = Column(Integer, default=0) # Timestamps created_at = Column(DateTime, default=datetime.utcnow, nullable=False) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) # Relationships family = relationship("Family", back_populates="categories") transactions = relationship("Transaction", back_populates="category") budgets = relationship("Budget", back_populates="category") def __repr__(self) -> str: return f""