diff --git a/src/core/api_tips_integrate/router.py b/src/core/api_tips_integrate/router.py index 2b0c787..48d9da3 100644 --- a/src/core/api_tips_integrate/router.py +++ b/src/core/api_tips_integrate/router.py @@ -1,10 +1,13 @@ from typing import Literal, Annotated from fastapi import APIRouter, Depends +from fastapi.security import HTTPAuthorizationCredentials +from pydantic import PositiveInt from src.core.api_tips_integrate.constants import DONATES_SUM_PERIODS from src.core.api_tips_integrate.schemas import CreateTipSchema -from src.core.api_tips_integrate.service import create_payment_link_for_tip_service +from src.core.api_tips_integrate.service import create_payment_link_for_tip_service, \ + create_payment_link_for_donate_service from src.core.common.dependencies import http_bearer, data_from_token from src.core.common.schemas import TokenPayloadSchema, PaymentLinkSchema @@ -17,9 +20,15 @@ router = APIRouter( path="/last-payments" ) async def get_last_donates( - token: Annotated[str, Depends(http_bearer)], + token: Annotated[HTTPAuthorizationCredentials, Depends(http_bearer)], + page: PositiveInt = 1, + limit: PositiveInt = 100, ): - pass + return await create_payment_link_for_donate_service( + token=token.credentials, + page=page, + limit=limit, + ) @router.get( diff --git a/src/core/api_tips_integrate/schemas.py b/src/core/api_tips_integrate/schemas.py index a9fa9d8..71c22fe 100644 --- a/src/core/api_tips_integrate/schemas.py +++ b/src/core/api_tips_integrate/schemas.py @@ -1,3 +1,5 @@ +from datetime import datetime + from pydantic import Field, BaseModel @@ -14,4 +16,24 @@ class CreateTipSchema(BaseModel): from_user: str | None = Field( default=None, description="User who sent the tip", - ) \ No newline at end of file + ) + + +class DonationSchema(BaseModel): + id: int + widget_id: int + order_id: str = Field(..., alias="order_id") + status: str + text: str + amount: float + donat_user: str = Field(..., alias="donat_user") + accepted_time: datetime + show_name: bool + show_text: bool + play_content: bool + showed_time: datetime + paid_time: datetime + + +class AllDonatesSchema(BaseModel): + donates: list[DonationSchema] \ No newline at end of file diff --git a/src/core/api_tips_integrate/service.py b/src/core/api_tips_integrate/service.py index e807031..b68399f 100644 --- a/src/core/api_tips_integrate/service.py +++ b/src/core/api_tips_integrate/service.py @@ -1,6 +1,6 @@ import httpx -from src.core.api_tips_integrate.schemas import CreateTipSchema +from src.core.api_tips_integrate.schemas import CreateTipSchema, AllDonatesSchema, DonationSchema from src.core.common.constants import DH_ACCOUNTS_API_URL, DH_WIDGETS_API_URL from src.core.common.schemas import TokenPayloadSchema, UserInfoSchema, PaymentLinkSchema @@ -48,8 +48,6 @@ async def create_payment_link_for_tip_service( return payment_link_schema - - async def get_last_donates_by_login(): pass @@ -58,5 +56,30 @@ async def get_summary_donates_for_period(): pass -async def create_payment_link_for_donate(): - pass +async def create_payment_link_for_donate_service( + token: str, + page: int = 1, + limit: int = 10, +) -> AllDonatesSchema: + headers = { + "accept": "application/json", + "Authorization": f"Bearer {token}" + } + + params = { + "page": page, + "limit": limit + } + + async with httpx.AsyncClient() as client: + response = await client.get( + url=DH_WIDGETS_API_URL + "donat", + headers=headers, + params=params + ) + response.raise_for_status() + data = response.json() + + return AllDonatesSchema( + donates=[DonationSchema(**item) for item in data] + ) diff --git a/src/core/common/dependencies.py b/src/core/common/dependencies.py index 0482232..9a492f2 100644 --- a/src/core/common/dependencies.py +++ b/src/core/common/dependencies.py @@ -1,7 +1,7 @@ from typing import Annotated from fastapi import Depends -from fastapi.security import HTTPBearer +from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials from src.core.common.jwt import decode_token_from_base64 from src.core.common.schemas import TokenPayloadSchema @@ -11,7 +11,7 @@ http_bearer = HTTPBearer() async def data_from_token( - token: Annotated[str, Depends(http_bearer)] + token: Annotated[HTTPAuthorizationCredentials, Depends(http_bearer)] ) -> TokenPayloadSchema: return decode_token_from_base64( token=token,