feat: added stats endpoints

This commit is contained in:
ITQ
2025-02-15 20:23:59 +03:00
parent c58704852e
commit 2de0595c98
4 changed files with 230 additions and 0 deletions
@@ -0,0 +1,77 @@
from http import HTTPStatus as status
from typing import Any
from uuid import UUID
from django.http import HttpRequest
from django.shortcuts import get_object_or_404
from ninja import Router
from api.v1 import schemas as global_schemas
from api.v1.stats import schemas
from apps.campaign.models import Advertiser, Campaign
router = Router(tags=["stats"])
@router.get(
"/campaigns/{campaign_id}",
response={
status.OK: schemas.Stat,
status.BAD_REQUEST: global_schemas.BadRequestError,
status.NOT_FOUND: global_schemas.NotFoundError,
},
)
def get_campaign_statistics(
request: HttpRequest, campaign_id: UUID
) -> tuple[status, dict[str, Any]]:
campaign = get_object_or_404(Campaign, id=campaign_id)
return status.OK, campaign.get_statistics()
@router.get(
"/campaigns/{campaign_id}/daily",
response={
status.OK: list[schemas.DailyStat],
status.BAD_REQUEST: global_schemas.BadRequestError,
status.NOT_FOUND: global_schemas.NotFoundError,
},
)
def get_daily_campaign_statistics(
request: HttpRequest, campaign_id: UUID
) -> tuple[status, dict[str, Any]]:
campaign = get_object_or_404(Campaign, id=campaign_id)
return status.OK, campaign.get_daily_statistics()
@router.get(
"/advertisers/{advertiser_id}",
response={
status.OK: schemas.Stat,
status.BAD_REQUEST: global_schemas.BadRequestError,
status.NOT_FOUND: global_schemas.NotFoundError,
},
)
def get_advertiser_statistics(
request: HttpRequest, advertiser_id: UUID
) -> tuple[status, dict[str, Any]]:
advertiser = get_object_or_404(Advertiser, id=advertiser_id)
return status.OK, advertiser.get_statistics()
@router.get(
"/advertisers/{advertiser_id}/campaigns/daily",
response={
status.OK: list[schemas.DailyStat],
status.BAD_REQUEST: global_schemas.BadRequestError,
status.NOT_FOUND: global_schemas.NotFoundError,
},
)
def get_daily_advertiser_statistics(
request: HttpRequest, advertiser_id: UUID
) -> tuple[status, dict[str, Any]]:
advertiser = get_object_or_404(Advertiser, id=advertiser_id)
return status.OK, advertiser.get_daily_statistics()