Init
This commit is contained in:
47
app/routers/users.py
Normal file
47
app/routers/users.py
Normal file
@@ -0,0 +1,47 @@
|
||||
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")
|
||||
Reference in New Issue
Block a user