Add DEPOSITO transaction type and Salarios page
All checks were successful
Deploy to VPS / deploy (push) Successful in 21s

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>
This commit is contained in:
Carlos Escalante
2026-03-26 22:57:41 -06:00
parent 8d76059ae8
commit 9cfa1c4eb1
9 changed files with 247 additions and 7 deletions

View File

@@ -0,0 +1,54 @@
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,
)