Files
WealthySmart/backend/app/api/v1/endpoints/salarios.py
Carlos Escalante 9cfa1c4eb1
All checks were successful
Deploy to VPS / deploy (push) Successful in 21s
Add DEPOSITO transaction type and Salarios page
New TransactionType.DEPOSITO for salary deposits from n8n/Gmail flow.
New /salarios endpoint with summary. New top-level Salarios page with
DataTable and summary cards. Push notifications link to /salarios for
deposits.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 22:57:41 -06:00

55 lines
1.6 KiB
Python

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,
)