diff --git a/api/versions/v1/routers/router.py b/api/versions/v1/routers/router.py index 5fe0698..966f38f 100644 --- a/api/versions/v1/routers/router.py +++ b/api/versions/v1/routers/router.py @@ -1,9 +1,9 @@ from fastapi import APIRouter -from . import auth -from . import roles +from . import auth, roles, users router = APIRouter(prefix="/v1") router.include_router(auth.router) router.include_router(roles.router) +router.include_router(users.router) diff --git a/api/versions/v1/routers/users/__init__.py b/api/versions/v1/routers/users/__init__.py new file mode 100644 index 0000000..ec6e809 --- /dev/null +++ b/api/versions/v1/routers/users/__init__.py @@ -0,0 +1,3 @@ +from .routes import router + +__all__ = (router,) diff --git a/api/versions/v1/routers/users/models.py b/api/versions/v1/routers/users/models.py new file mode 100644 index 0000000..8a954f9 --- /dev/null +++ b/api/versions/v1/routers/users/models.py @@ -0,0 +1,11 @@ +from typing import List +from pydantic import BaseModel + + +class UserResponse(BaseModel): + id: str + username: str + discriminator: str + avatar: str + app: bool + roles: List[str] diff --git a/api/versions/v1/routers/users/routes.py b/api/versions/v1/routers/users/routes.py new file mode 100644 index 0000000..4391988 --- /dev/null +++ b/api/versions/v1/routers/users/routes.py @@ -0,0 +1,21 @@ +from fastapi import APIRouter + +from .models import UserResponse + +from api.models import User, UserRole +from api.dependencies import authorization + + +router = APIRouter(prefix="/users") + + +@router.get( + "/@me", + response_model=UserResponse, + responses={401: {"description": "Unauthorized"}}, +) +async def get_current_user(user: User = authorization()): + query = """SELECT role_id FROM userroles WHERE user_id = $1;""" + roles = [record["role_id"] for record in await UserRole.pool.fetch(query, user.id)] + + return {**user.as_dict(), "roles": roles}