import enum import uuid from datetime import datetime from sqlalchemy import Boolean, DateTime, Enum, ForeignKey, String, Uuid, func from sqlalchemy.orm import Mapped, mapped_column from app.database import Base class CategoryType(str, enum.Enum): income = "income" expense = "expense" class Category(Base): __tablename__ = "categories" id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, default=uuid.uuid4) user_id: Mapped[uuid.UUID] = mapped_column( Uuid, ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True ) name: Mapped[str] = mapped_column(String(50), nullable=False) type: Mapped[CategoryType] = mapped_column( Enum(CategoryType, name="categorytype", native_enum=False, length=10), nullable=False, ) color: Mapped[str | None] = mapped_column(String(7), nullable=True) icon: Mapped[str | None] = mapped_column(String(50), nullable=True) is_default: Mapped[bool] = mapped_column( Boolean, nullable=False, default=False, server_default="false" ) deleted_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=False), nullable=True) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=False), nullable=False, server_default=func.now() )