mirror of
https://github.com/lorsanstand/Aether.git
synced 2026-06-19 20:15:16 +03:00
55 lines
2.2 KiB
Python
Executable File
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"} |