from enum import Enum from datetime import datetime from typing import Dict, List from typing_extensions import TypedDict from app.schema.base import BaseModel, PydanticBaseModel class TransactionType(str, Enum): INCOME = "income" EXPENSE = "expense" class UserCreate(PydanticBaseModel): name: str email: str hashed_password: str class UserUpdate(PydanticBaseModel): name: str email: str hashed_password: str class UserResponse(PydanticBaseModel): id: int name: str email: str is_deleted: bool class User(BaseModel): name: str email: str hashed_password: str is_deleted: bool = False transactions: "List[Transaction]" = [] class TransactionResponse(PydanticBaseModel): transaction_date: datetime category: str name_description: str amount: float type: TransactionType class TransactionCreate(TransactionResponse): user_id: int class Transaction(TransactionResponse): user: User class FileUploadCreate(PydanticBaseModel): source: str date: datetime category: str name_description: str amount: float type: str class IncomeStatementCreateRequest(PydanticBaseModel): user_id: int date_from: datetime date_to: datetime class IncomeStatementDetail(TypedDict): total: float category_totals: List[Dict[str, str | float]] class IncomeStatementLLMResponse(PydanticBaseModel): income: IncomeStatementDetail expenses: IncomeStatementDetail class IncomeStatement(IncomeStatementCreateRequest, IncomeStatementLLMResponse): pass class IncomeStatementResponse(IncomeStatement): id: int