WIP checkpoint: Scaffold FastAPI backend project structure

This commit is contained in:
2026-08-17 20:26:26 +00:00
parent d1b91abf05
commit dda4a250fa
3 changed files with 40 additions and 41 deletions
+16 -18
View File
@@ -5,11 +5,12 @@ from datetime import datetime, timedelta, timezone
from fastapi import APIRouter, Depends, HTTPException, status
from pydantic import BaseModel, EmailStr
from jose import JWTError, jwt
from jose import jwt
from passlib.context import CryptContext
from app.config import settings
from app.database import get_db
from app.dependencies import CurrentUser
from app.models.user import User
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select
@@ -37,6 +38,16 @@ class LoginRequest(BaseModel):
password: str
class UserResponse(BaseModel):
id: int
username: str
email: str
is_active: bool
created_at: datetime | None = None
model_config = {"from_attributes": True}
# --- Helpers ---
def _create_access_token(data: dict) -> str:
@@ -114,20 +125,7 @@ async def login(req: LoginRequest, db: AsyncSession = Depends(get_db)):
return TokenResponse(access_token=access_token)
@router.get("/me")
async def get_current_user(
user_id: int,
db: AsyncSession = Depends(get_db),
):
"""Get current user profile."""
result = await db.execute(select(User).where(User.id == user_id))
user = result.scalar_one_or_none()
if not user:
raise HTTPException(status_code=404, detail="User not found")
return {
"id": user.id,
"username": user.username,
"email": user.email,
"is_active": user.is_active,
"created_at": user.created_at,
}
@router.get("/me", response_model=UserResponse)
async def get_current_user(current_user: CurrentUser):
"""Get current user profile from the JWT token."""
return current_user