TaskWeaver / api /auth_routes.py
PocketSkye's picture
Initial deployment
0242ab2
Raw
History Blame Contribute Delete
2.18 kB
from fastapi import APIRouter
from fastapi import Depends
from fastapi import HTTPException
from sqlalchemy.orm import Session
from core.database import get_db
from core.security import create_access_token
from core.deps import get_current_user
from models.user import User
from services.auth_service import (
get_user_by_email,
create_user,
authenticate_user
)
from schemas.auth_schema import (
RegisterRequest,
LoginRequest,
TokenResponse
)
# All authentication related APIs will have /auth prefix
router = APIRouter(
prefix="/auth",
tags=["Authentication"]
)
# Register a new user
@router.post("/register")
def register(
payload: RegisterRequest,
db: Session = Depends(get_db)
):
# Check if email is already registered
existing_user = get_user_by_email(
db,
payload.email
)
if existing_user:
raise HTTPException(
status_code=400,
detail="Email already registered"
)
# Create user after hashing the password
user = create_user(
db,
payload.name,
payload.email,
payload.password
)
return {
"message": "User registered",
"user_id": user.id
}
# Login user and generate JWT access token
@router.post(
"/login",
response_model=TokenResponse
)
def login(
payload: LoginRequest,
db: Session = Depends(get_db)
):
# Verify email and password
user = authenticate_user(
db,
payload.email,
payload.password
)
if not user:
raise HTTPException(
status_code=401,
detail="Invalid credentials"
)
# Store user information inside JWT payload
token = create_access_token(
{
"sub": str(user.id),
"email": user.email
}
)
return {
"access_token": token,
"token_type": "bearer"
}
# Returns details of the currently logged-in user
@router.get("/me")
def get_me(
current_user: User = Depends(get_current_user)
):
return {
"id": current_user.id,
"name": current_user.name,
"email": current_user.email
}