from fastapi import APIRouter, Depends, HTTPException from pydantic import BaseModel from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select from app.api.deps import get_db from app.core.security import create_access_token, verify_password from app.models.user import User router = APIRouter() class LoginIn(BaseModel): email: str password: str class TokenOut(BaseModel): access_token: str token_type: str = "bearer" @router.post("/login", response_model=TokenOut) async def login(data: LoginIn, db: AsyncSession = Depends(get_db)): res = await db.execute(select(User).where(User.email == data.email)) user = res.scalar_one_or_none() if not user or not user.hashed_password or not verify_password(data.password, user.hashed_password): raise HTTPException(status_code=401, detail="Invalid credentials") return TokenOut(access_token=create_access_token(user.email))