feat: аналитика
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
from fastapi import APIRouter
|
||||
|
||||
from src.controller.http.analytics import analytics_router
|
||||
from src.controller.http.auth import auth_router
|
||||
from src.controller.http.creatives import creatives_router
|
||||
from src.controller.http.external_channels import external_channels_router
|
||||
@@ -17,5 +18,6 @@ api_v1_router.include_router(external_channels_router)
|
||||
api_v1_router.include_router(creatives_router)
|
||||
api_v1_router.include_router(placements_router)
|
||||
api_v1_router.include_router(views_router)
|
||||
api_v1_router.include_router(analytics_router)
|
||||
|
||||
api_router.include_router(api_v1_router)
|
||||
|
||||
65
src/controller/http/analytics.py
Normal file
65
src/controller/http/analytics.py
Normal file
@@ -0,0 +1,65 @@
|
||||
import datetime
|
||||
import uuid
|
||||
from typing import Annotated
|
||||
|
||||
from fastapi import Depends
|
||||
from fastapi.routing import APIRouter
|
||||
|
||||
from src import dependencies, dto
|
||||
from src.adapter.jwt import JWTPayload
|
||||
|
||||
analytics_router = APIRouter(prefix='/analytics', tags=['analytics'])
|
||||
|
||||
|
||||
@analytics_router.get('/placements')
|
||||
async def get_placements_analytics(
|
||||
current_user: Annotated[JWTPayload, Depends(dependencies.get_current_user)],
|
||||
target_channel_id: uuid.UUID | None = None,
|
||||
) -> dto.GetPlacementsAnalyticsOutput:
|
||||
input = dto.GetPlacementsAnalyticsInput(
|
||||
user_id=current_user.user_id,
|
||||
target_channel_id=target_channel_id,
|
||||
)
|
||||
return await dependencies.get_usecase().get_placements_analytics(input)
|
||||
|
||||
|
||||
@analytics_router.get('/creatives')
|
||||
async def get_creatives_analytics(
|
||||
current_user: Annotated[JWTPayload, Depends(dependencies.get_current_user)],
|
||||
target_channel_id: uuid.UUID | None = None,
|
||||
) -> dto.GetCreativesAnalyticsOutput:
|
||||
input = dto.GetCreativesAnalyticsInput(
|
||||
user_id=current_user.user_id,
|
||||
target_channel_id=target_channel_id,
|
||||
)
|
||||
return await dependencies.get_usecase().get_creatives_analytics(input)
|
||||
|
||||
|
||||
@analytics_router.get('/external-channels')
|
||||
async def get_external_channels_analytics(
|
||||
current_user: Annotated[JWTPayload, Depends(dependencies.get_current_user)],
|
||||
target_channel_id: uuid.UUID | None = None,
|
||||
) -> dto.GetExternalChannelsAnalyticsOutput:
|
||||
input = dto.GetExternalChannelsAnalyticsInput(
|
||||
user_id=current_user.user_id,
|
||||
target_channel_id=target_channel_id,
|
||||
)
|
||||
return await dependencies.get_usecase().get_external_channels_analytics(input)
|
||||
|
||||
|
||||
@analytics_router.get('/spending')
|
||||
async def get_spending_analytics(
|
||||
current_user: Annotated[JWTPayload, Depends(dependencies.get_current_user)],
|
||||
target_channel_id: uuid.UUID | None = None,
|
||||
date_from: datetime.datetime | None = None,
|
||||
date_to: datetime.datetime | None = None,
|
||||
grouping: dto.DateGrouping = dto.DateGrouping.DAY,
|
||||
) -> dto.GetSpendingAnalyticsOutput:
|
||||
input = dto.GetSpendingAnalyticsInput(
|
||||
user_id=current_user.user_id,
|
||||
target_channel_id=target_channel_id,
|
||||
date_from=date_from,
|
||||
date_to=date_to,
|
||||
grouping=grouping,
|
||||
)
|
||||
return await dependencies.get_usecase().get_spending_analytics(input)
|
||||
Reference in New Issue
Block a user