alpha-engine / api /auth.py
Dharambir Agrawal
HF Space server-only
fd48bc8
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"])
@router.post("/auth/login", response_model=LoginResponse)
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)
@router.get("/auth/me", response_model=UserOut)
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,
)