From 855465fe8f1e5321fa8a8caa392c2fcfd079a849 Mon Sep 17 00:00:00 2001 From: harold Date: Mon, 14 Jul 2025 14:12:37 +0500 Subject: [PATCH] add rotuer for get summary donats --- src/core/api_tips_integrate/router.py | 9 +++++--- src/core/api_tips_integrate/schemas.py | 16 +++++++++++++- src/core/api_tips_integrate/service.py | 30 +++++++++++++++++++------- 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/core/api_tips_integrate/router.py b/src/core/api_tips_integrate/router.py index 48d9da3..a46b223 100644 --- a/src/core/api_tips_integrate/router.py +++ b/src/core/api_tips_integrate/router.py @@ -7,7 +7,7 @@ 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, \ - create_payment_link_for_donate_service + create_payment_link_for_donate_service, get_donation_period_stat_service from src.core.common.dependencies import http_bearer, data_from_token from src.core.common.schemas import TokenPayloadSchema, PaymentLinkSchema @@ -35,10 +35,13 @@ async def get_last_donates( path="/summary-payments" ) async def get_summary_payments_for_period( - token: Annotated[str, Depends(http_bearer)], + token: Annotated[HTTPAuthorizationCredentials, Depends(http_bearer)], period: DONATES_SUM_PERIODS, ): - pass + return await get_donation_period_stat_service( + token=token.credentials, + period=period, + ) @router.post( diff --git a/src/core/api_tips_integrate/schemas.py b/src/core/api_tips_integrate/schemas.py index 71c22fe..0cc747c 100644 --- a/src/core/api_tips_integrate/schemas.py +++ b/src/core/api_tips_integrate/schemas.py @@ -36,4 +36,18 @@ class DonationSchema(BaseModel): class AllDonatesSchema(BaseModel): - donates: list[DonationSchema] \ No newline at end of file + donates: list[DonationSchema] + + +class TotalDonationStat(BaseModel): + total_amount: float + donations_count: int + +class MonthlyDonationStat(BaseModel): + date: datetime + amount_collected: float + donations_count: int + +class DonationPeriodStatSchema(BaseModel): + donation_sum: TotalDonationStat + donations: list[MonthlyDonationStat] \ 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 b68399f..75e03cd 100644 --- a/src/core/api_tips_integrate/service.py +++ b/src/core/api_tips_integrate/service.py @@ -1,6 +1,8 @@ import httpx -from src.core.api_tips_integrate.schemas import CreateTipSchema, AllDonatesSchema, DonationSchema +from src.core.api_tips_integrate.constants import DONATES_SUM_PERIODS +from src.core.api_tips_integrate.schemas import CreateTipSchema, AllDonatesSchema, DonationSchema, \ + DonationPeriodStatSchema from src.core.common.constants import DH_ACCOUNTS_API_URL, DH_WIDGETS_API_URL from src.core.common.schemas import TokenPayloadSchema, UserInfoSchema, PaymentLinkSchema @@ -34,26 +36,38 @@ async def create_payment_link_for_tip_service( if create_tip_schema.text: data["text"] = create_tip_schema.text - print(DH_WIDGETS_API_URL + f"donat/{user_data.login}") response = await client.post( headers=headers, json=data, url=DH_WIDGETS_API_URL + f"donat/{user_data.login}" ) - if response.status_code != 200: - print(response.json()) payment_link_schema = PaymentLinkSchema(**response.json()) return payment_link_schema -async def get_last_donates_by_login(): - pass +async def get_donation_period_stat_service( + token: str, + period: DONATES_SUM_PERIODS = "24h" +) -> DonationPeriodStatSchema: + headers = { + "accept": "application/json", + "Authorization": f"Bearer {token}" + } + params = {"period": period} -async def get_summary_donates_for_period(): - pass + async with httpx.AsyncClient() as client: + response = await client.get( + url=DH_WIDGETS_API_URL + "donat/period-stat", + headers=headers, + params=params + ) + response.raise_for_status() + data = response.json() + + return DonationPeriodStatSchema(**data) async def create_payment_link_for_donate_service(