Files
twimg-backend/app/routers/users.py
2025-07-13 12:56:16 -04:00

47 lines
1.8 KiB
Python

from fastapi import APIRouter, Depends, HTTPException, status
from typing import List
from ..models import UserRecord
from ..security import is_admin
from ..firebase_config import get_db, auth
router = APIRouter()
@router.get("/", response_model=List[UserRecord], dependencies=[Depends(is_admin)])
async def read_users():
"""
Retrieves a list of all user documents from the 'users' collection in Firestore.
"""
db = get_db()
users_ref = db.collection('users').stream()
return [UserRecord(**doc.to_dict()) for doc in users_ref]
@router.patch("/{user_id}/role", response_model=UserRecord, dependencies=[Depends(is_admin)])
async def update_user_role(user_id: str, role: str):
"""
Updates a user's role in their Firestore document.
"""
if role not in ["member", "user", "admin"]:
raise HTTPException(status_code=400, detail="Invalid role specified")
db = get_db()
user_ref = db.collection('users').document(user_id)
if user_ref.get().exists:
user_ref.update({"role": role})
updated_user = user_ref.get()
return UserRecord(**updated_user.to_dict())
raise HTTPException(status_code=404, detail="User not found")
@router.delete("/{user_id}", status_code=status.HTTP_204_NO_CONTENT, dependencies=[Depends(is_admin)])
async def delete_user(user_id: str):
"""
Deletes a user from Firebase Auth and their corresponding document from Firestore.
"""
try:
auth.delete_user(user_id)
db = get_db()
user_ref = db.collection('users').document(user_id)
if user_ref.get().exists:
user_ref.delete()
return
except auth.UserNotFoundError:
raise HTTPException(status_code=404, detail="User not found in Firebase Authentication")