You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
477 lines
15 KiB
Python
477 lines
15 KiB
Python
from fastapi import APIRouter, Depends, HTTPException, status
|
|
|
|
from admin_app.api.dependencies import get_settings, require_admin_permission
|
|
from admin_app.api.schemas import (
|
|
AdminBotFlowReportCatalogResponse,
|
|
AdminBotFlowReportOverviewResponse,
|
|
AdminBotFlowReportResponse,
|
|
AdminConversationTelemetryReportCatalogResponse,
|
|
AdminConversationTelemetryReportOverviewResponse,
|
|
AdminConversationTelemetryReportResponse,
|
|
AdminRentalReportCatalogResponse,
|
|
AdminRentalReportOverviewResponse,
|
|
AdminRentalReportResponse,
|
|
AdminReportDatasetListResponse,
|
|
AdminReportDatasetResponse,
|
|
AdminReportOverviewResponse,
|
|
AdminRevenueReportCatalogResponse,
|
|
AdminRevenueReportOverviewResponse,
|
|
AdminRevenueReportResponse,
|
|
AdminSalesReportCatalogResponse,
|
|
AdminSalesReportOverviewResponse,
|
|
AdminSalesReportResponse,
|
|
)
|
|
from admin_app.core import AdminSettings, AuthenticatedStaffPrincipal
|
|
from admin_app.services import ReportService
|
|
from shared.contracts import AdminPermission
|
|
|
|
router = APIRouter(prefix="/reports", tags=["reports"])
|
|
|
|
|
|
def _build_service(settings: AdminSettings) -> ReportService:
|
|
return ReportService(settings)
|
|
|
|
|
|
@router.get(
|
|
"/overview",
|
|
response_model=AdminReportOverviewResponse,
|
|
)
|
|
def reports_overview(
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.build_overview_payload()
|
|
return AdminReportOverviewResponse(
|
|
service="orquestrador-admin",
|
|
mode=payload["mode"],
|
|
metrics=payload["metrics"],
|
|
materialization=payload["materialization"],
|
|
report_families=payload["report_families"],
|
|
next_steps=payload["next_steps"],
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/datasets",
|
|
response_model=AdminReportDatasetListResponse,
|
|
)
|
|
def report_datasets(
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.list_datasets_payload()
|
|
return AdminReportDatasetListResponse(
|
|
service="orquestrador-admin",
|
|
source=payload["source"],
|
|
materialization=payload["materialization"],
|
|
datasets=payload["datasets"],
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/datasets/{dataset_key}",
|
|
response_model=AdminReportDatasetResponse,
|
|
)
|
|
def report_dataset_detail(
|
|
dataset_key: str,
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.get_dataset_payload(dataset_key)
|
|
if payload is None:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail="Dataset operacional nao encontrado para relatorio.",
|
|
)
|
|
|
|
return AdminReportDatasetResponse(
|
|
service="orquestrador-admin",
|
|
source=payload["source"],
|
|
materialization=payload["materialization"],
|
|
dataset=payload["dataset"],
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/sales/overview",
|
|
response_model=AdminSalesReportOverviewResponse,
|
|
)
|
|
def sales_reports_overview(
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.build_sales_overview_payload()
|
|
return AdminSalesReportOverviewResponse(
|
|
service="orquestrador-admin",
|
|
domain=payload["domain"],
|
|
mode=payload["mode"],
|
|
source_dataset_keys=payload["source_dataset_keys"],
|
|
metrics=payload["metrics"],
|
|
materialization=payload["materialization"],
|
|
reports=payload["reports"],
|
|
next_steps=payload["next_steps"],
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/sales/reports",
|
|
response_model=AdminSalesReportCatalogResponse,
|
|
)
|
|
def sales_reports_catalog(
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.list_sales_reports_payload()
|
|
return AdminSalesReportCatalogResponse(
|
|
service="orquestrador-admin",
|
|
domain=payload["domain"],
|
|
source=payload["source"],
|
|
materialization=payload["materialization"],
|
|
reports=payload["reports"],
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/sales/reports/{report_key}",
|
|
response_model=AdminSalesReportResponse,
|
|
)
|
|
def sales_report_detail(
|
|
report_key: str,
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.get_sales_report_payload(report_key)
|
|
if payload is None:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail="Relatorio de vendas nao encontrado.",
|
|
)
|
|
|
|
return AdminSalesReportResponse(
|
|
service="orquestrador-admin",
|
|
domain=payload["domain"],
|
|
source=payload["source"],
|
|
materialization=payload["materialization"],
|
|
report=payload["report"],
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/arrecadacao/overview",
|
|
response_model=AdminRevenueReportOverviewResponse,
|
|
)
|
|
def revenue_reports_overview(
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.build_revenue_overview_payload()
|
|
return AdminRevenueReportOverviewResponse(
|
|
service="orquestrador-admin",
|
|
area=payload["area"],
|
|
source_domain=payload["source_domain"],
|
|
mode=payload["mode"],
|
|
source_dataset_keys=payload["source_dataset_keys"],
|
|
metrics=payload["metrics"],
|
|
materialization=payload["materialization"],
|
|
reports=payload["reports"],
|
|
next_steps=payload["next_steps"],
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/arrecadacao/reports",
|
|
response_model=AdminRevenueReportCatalogResponse,
|
|
)
|
|
def revenue_reports_catalog(
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.list_revenue_reports_payload()
|
|
return AdminRevenueReportCatalogResponse(
|
|
service="orquestrador-admin",
|
|
area=payload["area"],
|
|
source_domain=payload["source_domain"],
|
|
source=payload["source"],
|
|
materialization=payload["materialization"],
|
|
reports=payload["reports"],
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/arrecadacao/reports/{report_key}",
|
|
response_model=AdminRevenueReportResponse,
|
|
)
|
|
def revenue_report_detail(
|
|
report_key: str,
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.get_revenue_report_payload(report_key)
|
|
if payload is None:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail="Relatorio de arrecadacao nao encontrado.",
|
|
)
|
|
|
|
return AdminRevenueReportResponse(
|
|
service="orquestrador-admin",
|
|
area=payload["area"],
|
|
source_domain=payload["source_domain"],
|
|
source=payload["source"],
|
|
materialization=payload["materialization"],
|
|
report=payload["report"],
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/locacao/overview",
|
|
response_model=AdminRentalReportOverviewResponse,
|
|
)
|
|
def rental_reports_overview(
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.build_rental_overview_payload()
|
|
return AdminRentalReportOverviewResponse(
|
|
service="orquestrador-admin",
|
|
area=payload["area"],
|
|
source_domain=payload["source_domain"],
|
|
mode=payload["mode"],
|
|
source_dataset_keys=payload["source_dataset_keys"],
|
|
metrics=payload["metrics"],
|
|
materialization=payload["materialization"],
|
|
reports=payload["reports"],
|
|
next_steps=payload["next_steps"],
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/locacao/reports",
|
|
response_model=AdminRentalReportCatalogResponse,
|
|
)
|
|
def rental_reports_catalog(
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.list_rental_reports_payload()
|
|
return AdminRentalReportCatalogResponse(
|
|
service="orquestrador-admin",
|
|
area=payload["area"],
|
|
source_domain=payload["source_domain"],
|
|
source=payload["source"],
|
|
materialization=payload["materialization"],
|
|
reports=payload["reports"],
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/locacao/reports/{report_key}",
|
|
response_model=AdminRentalReportResponse,
|
|
)
|
|
def rental_report_detail(
|
|
report_key: str,
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.get_rental_report_payload(report_key)
|
|
if payload is None:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail="Relatorio de locacao nao encontrado.",
|
|
)
|
|
|
|
return AdminRentalReportResponse(
|
|
service="orquestrador-admin",
|
|
area=payload["area"],
|
|
source_domain=payload["source_domain"],
|
|
source=payload["source"],
|
|
materialization=payload["materialization"],
|
|
report=payload["report"],
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/fluxo-bot/overview",
|
|
response_model=AdminBotFlowReportOverviewResponse,
|
|
)
|
|
def bot_flow_reports_overview(
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.build_bot_flow_overview_payload()
|
|
return AdminBotFlowReportOverviewResponse(
|
|
service="orquestrador-admin",
|
|
area=payload["area"],
|
|
source_domain=payload["source_domain"],
|
|
mode=payload["mode"],
|
|
source_dataset_keys=payload["source_dataset_keys"],
|
|
metrics=payload["metrics"],
|
|
materialization=payload["materialization"],
|
|
reports=payload["reports"],
|
|
next_steps=payload["next_steps"],
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/fluxo-bot/reports",
|
|
response_model=AdminBotFlowReportCatalogResponse,
|
|
)
|
|
def bot_flow_reports_catalog(
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.list_bot_flow_reports_payload()
|
|
return AdminBotFlowReportCatalogResponse(
|
|
service="orquestrador-admin",
|
|
area=payload["area"],
|
|
source_domain=payload["source_domain"],
|
|
source=payload["source"],
|
|
materialization=payload["materialization"],
|
|
reports=payload["reports"],
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/fluxo-bot/reports/{report_key}",
|
|
response_model=AdminBotFlowReportResponse,
|
|
)
|
|
def bot_flow_report_detail(
|
|
report_key: str,
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.get_bot_flow_report_payload(report_key)
|
|
if payload is None:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail="Relatorio operacional do fluxo do bot nao encontrado.",
|
|
)
|
|
|
|
return AdminBotFlowReportResponse(
|
|
service="orquestrador-admin",
|
|
area=payload["area"],
|
|
source_domain=payload["source_domain"],
|
|
source=payload["source"],
|
|
materialization=payload["materialization"],
|
|
report=payload["report"],
|
|
)
|
|
|
|
@router.get(
|
|
"/telemetria-conversacional/overview",
|
|
response_model=AdminConversationTelemetryReportOverviewResponse,
|
|
)
|
|
def conversation_telemetry_reports_overview(
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.build_conversation_telemetry_overview_payload()
|
|
return AdminConversationTelemetryReportOverviewResponse(
|
|
service="orquestrador-admin",
|
|
area=payload["area"],
|
|
source_domain=payload["source_domain"],
|
|
mode=payload["mode"],
|
|
source_dataset_keys=payload["source_dataset_keys"],
|
|
metrics=payload["metrics"],
|
|
materialization=payload["materialization"],
|
|
reports=payload["reports"],
|
|
next_steps=payload["next_steps"],
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/telemetria-conversacional/reports",
|
|
response_model=AdminConversationTelemetryReportCatalogResponse,
|
|
)
|
|
def conversation_telemetry_reports_catalog(
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.list_conversation_telemetry_reports_payload()
|
|
return AdminConversationTelemetryReportCatalogResponse(
|
|
service="orquestrador-admin",
|
|
area=payload["area"],
|
|
source_domain=payload["source_domain"],
|
|
source=payload["source"],
|
|
materialization=payload["materialization"],
|
|
reports=payload["reports"],
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/telemetria-conversacional/reports/{report_key}",
|
|
response_model=AdminConversationTelemetryReportResponse,
|
|
)
|
|
def conversation_telemetry_report_detail(
|
|
report_key: str,
|
|
settings: AdminSettings = Depends(get_settings),
|
|
_: AuthenticatedStaffPrincipal = Depends(
|
|
require_admin_permission(AdminPermission.VIEW_REPORTS)
|
|
),
|
|
):
|
|
service = _build_service(settings)
|
|
payload = service.get_conversation_telemetry_report_payload(report_key)
|
|
if payload is None:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail="Relatorio de telemetria conversacional nao encontrado.",
|
|
)
|
|
|
|
return AdminConversationTelemetryReportResponse(
|
|
service="orquestrador-admin",
|
|
area=payload["area"],
|
|
source_domain=payload["source_domain"],
|
|
source=payload["source"],
|
|
materialization=payload["materialization"],
|
|
report=payload["report"],
|
|
) |