Spaces:
Runtime error
Runtime error
| from fastapi import APIRouter, Depends, HTTPException, Request, status | |
| from sqlalchemy import func, select | |
| from sqlalchemy.ext.asyncio import AsyncSession | |
| from api.deps import get_current_user | |
| from core.database import get_db | |
| from core.models import User | |
| from core.schemas import LoginRequest, LoginResponse, UserOut | |
| from core.security import create_access_token, verify_password | |
| router = APIRouter(tags=["auth"]) | |
| async def login(payload: LoginRequest, db: AsyncSession = Depends(get_db)): | |
| stmt = select(User).where( | |
| func.lower(User.email) == payload.email.lower(), | |
| User.is_active.is_(True), | |
| ) | |
| user = await db.scalar(stmt) | |
| if not user or not verify_password(payload.password, user.password_hash): | |
| raise HTTPException( | |
| status_code=status.HTTP_401_UNAUTHORIZED, | |
| detail="Invalid email or password", | |
| ) | |
| token = create_access_token( | |
| { | |
| "sub": str(user.id), | |
| "role": user.role, | |
| "email": user.email, | |
| } | |
| ) | |
| return LoginResponse(token=token, role=user.role, email=user.email) | |
| async def me(current_user: User = Depends(get_current_user)): | |
| return UserOut( | |
| id=current_user.id, | |
| email=current_user.email, | |
| role=current_user.role, | |
| is_active=current_user.is_active, | |
| created_at=current_user.created_at, | |
| ) | |