from __future__ import annotations
from typing import List
from fastapi import APIRouter, Depends, HTTPException, Response, status
from app.auth import get_current_user_optional
from app.models import User
from app.store import DatabaseStore, get_store
router = APIRouter()
@router.get("", response_model=List[User], status_code=status.HTTP_200_OK)
async def list_users(
store: DatabaseStore = Depends(get_store),
) -> List[User]:
return store.list_users()
@router.delete("/{userId}", status_code=status.HTTP_204_NO_CONTENT)
async def delete_user(
userId: str,
current_user: User = Depends(get_current_user_optional),
store: DatabaseStore = Depends(get_store),
) -> Response:
target_user = store.get_user_by_id(userId)
if not target_user:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="User not found",
)
if current_user.id != userId:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Not authorized to delete this account",
)
deleted = store.delete_user(userId)
if not deleted:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="User not found",
)
return Response(status_code=status.HTTP_204_NO_CONTENT)