init commit

This commit is contained in:
2025-12-10 22:09:31 +09:00
commit b79adf1c69
361 changed files with 47414 additions and 0 deletions

47
app/db/models/category.py Normal file
View File

@@ -0,0 +1,47 @@
"""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"<Category(id={self.id}, name={self.name}, type={self.category_type})>"