Files
Aether/backend/app/users/router.py
T
2026-01-25 11:30:30 +03:00

55 lines
2.2 KiB
Python
Executable File

from typing import Dict
import logging
from fastapi import APIRouter, Response, Depends, UploadFile, File
from app.users.schemas import User, UserUpdate
from app.users.service import UserService
from app.auth.service import AuthService
from app.users.models import UserModel
from app.auth.dependencies import get_current_verified_user, get_current_superuser, get_current_user
router = APIRouter(prefix="/users", tags=["User"])
log = logging.getLogger(__name__)
@router.get("/me")
async def get_current_user(user: UserModel = Depends(get_current_user)) -> User:
log.debug("Getting current user profile", extra={"user_id": str(user.id)})
return user
@router.get("/")
async def get_users(offset: int, limit: int, user: UserModel = Depends(get_current_superuser)):
log.info("Getting users list", extra={"offset": offset, "limit": limit})
return await UserService.get_users_list(offset=offset, limit=limit)
@router.get("/{user_id}")
async def get_user(user_id: int, user: UserModel = Depends(get_current_verified_user)):
return await UserService.get_user(user_id)
@router.put("/me")
async def update_current_user(update_user: UserUpdate, user: UserModel = Depends(get_current_verified_user)) -> User:
return await UserService.update_user(user.id, update_user)
@router.delete("/me")
async def delete_current_user(response: Response, user: UserModel = Depends(get_current_verified_user)) -> Dict:
log.debug("User deleting their account", extra={"user_id": user.id, "email": user.email})
response.delete_cookie('access_token')
response.delete_cookie('refresh_token')
await AuthService.abort_all_sessions(user.id)
await UserService.delete_user(user.id)
return {"status": True, "message": "User successfully deleted"}
@router.post("/me/avatar")
async def upload_avatar(
avatar: UploadFile = File(...),
user: UserModel = Depends(get_current_verified_user)
) -> User:
return await UserService.upload_avatar(user, avatar)
@router.delete('/me/avatar')
async def delete_avatar(user: UserModel = Depends(get_current_verified_user)) -> Dict:
await UserService.delete_avatar(user)
return {"status": True, "message": "Avatar successfully deleted"}