from typing import Optional from fastapi import APIRouter, Depends, Query from pydantic import BaseModel, Field from sqlalchemy.orm import Session from app.database.database import get_db from app.database.models import User from app.loans.service import analyze_loan router = APIRouter(prefix="/api/loans", tags=["Loans"]) def _resolve_user(db: Session, user_id: Optional[str]) -> str: if user_id: return user_id user = db.query(User).first() if user: return user.id return "anonymous" class LoanEligibilityRequest(BaseModel): salary: float = Field(gt=0, description="Annual salary in USD") credit_score: int = Field(ge=300, le=850) existing_loans: int = Field(ge=0, le=20) employment_years: float = Field(ge=0, le=50) age: int = Field(ge=18, le=80) loan_amount: float = Field(gt=0) @router.post("/eligibility") def loan_eligibility( body: LoanEligibilityRequest, user_id: Optional[str] = None, db: Session = Depends(get_db), ): _resolve_user(db, user_id) return analyze_loan( body.salary, body.credit_score, body.existing_loans, body.employment_years, body.age, body.loan_amount, ) @router.get("/comparison") def loan_comparison( loan_amount: float = Query(..., gt=0), user_id: Optional[str] = None, db: Session = Depends(get_db), ): _resolve_user(db, user_id) result = analyze_loan(85000, 720, 1, 4, 32, loan_amount) return {"loan_amount": loan_amount, "comparison": result["comparison"]}