from datetime import datetime from typing import Optional from fastapi import APIRouter, Depends, Query from pydantic import BaseModel from sqlmodel import Session, col, func, select from app.auth import get_current_user from app.db import get_session from app.models.models import Transaction, TransactionRead, TransactionType router = APIRouter(prefix="/salarios", tags=["salarios"]) class SalariosSummary(BaseModel): count: int total_amount: float latest_date: Optional[datetime] = None @router.get("/", response_model=list[TransactionRead]) def list_salarios( limit: int = Query(default=50, le=500), offset: int = 0, session: Session = Depends(get_session), _user: str = Depends(get_current_user), ): query = ( select(Transaction) .where(Transaction.transaction_type == TransactionType.DEPOSITO) .order_by(col(Transaction.date).desc()) .offset(offset) .limit(limit) ) return session.exec(query).all() @router.get("/summary", response_model=SalariosSummary) def salarios_summary( session: Session = Depends(get_session), _user: str = Depends(get_current_user), ): result = session.exec( select( func.count(), func.coalesce(func.sum(Transaction.amount), 0), func.max(Transaction.date), ).where(Transaction.transaction_type == TransactionType.DEPOSITO) ).first() return SalariosSummary( count=result[0] if result else 0, total_amount=float(result[1]) if result else 0.0, latest_date=result[2] if result else None, )