from app.extensions import db from datetime import datetime class Category(db.Model): __tablename__ = 'categories' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False) category_type = db.Column( db.Enum('income', 'expense', 'both'), nullable=False, default='expense' ) parent_id = db.Column(db.Integer, db.ForeignKey('categories.id'), nullable=True) color = db.Column(db.String(7), default='#6B7280') icon = db.Column(db.String(50), default='bi-tag') is_system = db.Column(db.Boolean, default=False) # system categories can't be deleted is_active = db.Column(db.Boolean, default=True) created_at = db.Column(db.DateTime, default=datetime.utcnow) # Self-referential relationship for subcategories subcategories = db.relationship('Category', backref=db.backref('parent', remote_side=[id]), lazy='dynamic') transactions = db.relationship('Transaction', back_populates='category', lazy='dynamic') def __repr__(self): return f''