diff --git a/routes/__init__.py b/routes/__init__.py index 0f8b57d..9039afe 100644 --- a/routes/__init__.py +++ b/routes/__init__.py @@ -4,5 +4,12 @@ from .auth import router as auth_router from .orders import router as orders_router from .payments import payment_routers from .plans import router as plans_router +from .users import users_routers -routers: list[APIRouter] = [auth_router, plans_router, orders_router, *payment_routers] +routers: list[APIRouter] = [ + auth_router, + plans_router, + orders_router, + *payment_routers, + *users_routers, +] diff --git a/routes/users/__init__.py b/routes/users/__init__.py new file mode 100644 index 0000000..f543f29 --- /dev/null +++ b/routes/users/__init__.py @@ -0,0 +1,3 @@ +from .me import router as me_router + +users_routers = [me_router] diff --git a/routes/users/me.py b/routes/users/me.py new file mode 100644 index 0000000..53000f3 --- /dev/null +++ b/routes/users/me.py @@ -0,0 +1,19 @@ +from fastapi import APIRouter, Depends + +from core.deps import get_auth_context +from schemas.dto import AuthContext +from schemas.user import SubscriptionData, UserInfo + +router = APIRouter(prefix="/users/me") + + +@router.get("", response_model=UserInfo) +async def get_me(ctx: AuthContext = Depends(get_auth_context)): + sub_data = SubscriptionData( + devices=ctx.user.subscription.devices, + expires_at=ctx.user.subscription.expires_at, + addon_ids=[a.id for a in ctx.user.subscription.addons], + ) + return UserInfo( + username=ctx.user.username, telegram_id=ctx.user.telegram_id, subscription=sub_data + ) diff --git a/schemas/user.py b/schemas/user.py index 7f4c815..464980f 100644 --- a/schemas/user.py +++ b/schemas/user.py @@ -1,6 +1,15 @@ +from datetime import datetime + from pydantic import BaseModel, Field +class SubscriptionData(BaseModel): + devices: int = Field() + expires_at: datetime = Field() + addon_ids: list[str] = Field() + + class UserInfo(BaseModel): - username: str | None = Field() - telegram_id: str | None = Field() + username: str | None = Field(None) + telegram_id: str | None = Field(None) + subscription: SubscriptionData | None = Field(None)