martian7777
feat: implement backend core with ORM models, authentication, and AI-driven telemetry diagnostics
e5be436
Raw
History Blame Contribute Delete
1.23 kB
"""Authentication endpoints: register, login (OAuth2), current user."""
from __future__ import annotations
from typing import Annotated
from fastapi import APIRouter, Depends, status
from fastapi.security import OAuth2PasswordRequestForm
from app.api.dependencies import CurrentUser, DbSession
from app.schemas.user import Token, UserCreate, UserRead
from app.services.auth_service import AuthService
router = APIRouter()
@router.post("/register", response_model=UserRead, status_code=status.HTTP_201_CREATED)
async def register(data: UserCreate, session: DbSession) -> UserRead:
user = await AuthService(session).register(data)
return UserRead.model_validate(user)
@router.post("/login", response_model=Token)
async def login(
session: DbSession,
form_data: Annotated[OAuth2PasswordRequestForm, Depends()],
) -> Token:
"""OAuth2 password flow. The `username` field carries the user's email."""
service = AuthService(session)
user = await service.authenticate(form_data.username, form_data.password)
return service.issue_token(user)
@router.get("/me", response_model=UserRead)
async def read_me(current_user: CurrentUser) -> UserRead:
return UserRead.model_validate(current_user)