from fastapi import APIRouter, Depends, HTTPException, status from fastapi.security import OAuth2AuthorizationCodeBearer from sqlalchemy.orm import Session from typing import Optional from core.database import get_db from models.user import User from schemas.user import UserSchema, UserCreate from helpers.auth_helpers import verify_google_token, get_user_by_email, create_user_from_google from helpers.token_helpers import create_access_token router = APIRouter() oauth2_scheme = OAuth2AuthorizationCodeBearer( authorizationUrl="https://accounts.google.com/o/oauth2/v2/auth", tokenUrl="https://oauth2.googleapis.com/token" ) @router.get("/login/google", response_model=UserSchema) async def google_login( token: str, db: Session = Depends(get_db) ): google_user = verify_google_token(token) if not google_user: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid Google token" ) user = get_user_by_email(db, google_user.email) if not user: user = create_user_from_google(db, google_user) access_token = create_access_token(data={"sub": user.email}) return { "user": user, "access_token": access_token, "token_type": "bearer" }