feat(analytics): add admin dashboard api
This commit is contained in:
113
apps/analytics/api/schemas.py
Normal file
113
apps/analytics/api/schemas.py
Normal file
@@ -0,0 +1,113 @@
|
||||
from typing import Literal
|
||||
|
||||
from ninja import Schema
|
||||
|
||||
|
||||
class AnalyticsPointSchema(Schema):
|
||||
label: str
|
||||
value: int | float
|
||||
|
||||
|
||||
class AnalyticsTrendPointSchema(Schema):
|
||||
date: str
|
||||
label: str
|
||||
value: int | float
|
||||
|
||||
|
||||
class AnalyticsRegistrationStatusSchema(Schema):
|
||||
status: str
|
||||
label: str
|
||||
value: int
|
||||
|
||||
|
||||
class AnalyticsTopEventSchema(Schema):
|
||||
id: int
|
||||
title: str
|
||||
slug: str
|
||||
attendees: int
|
||||
capacity: int | None = None
|
||||
fill_rate: float | None = None
|
||||
revenue: int = 0
|
||||
|
||||
|
||||
class AnalyticsPostPopularitySchema(Schema):
|
||||
id: int
|
||||
title: str
|
||||
slug: str
|
||||
likes: int
|
||||
saves: int
|
||||
comments: int
|
||||
|
||||
|
||||
class AnalyticsTopPostSchema(AnalyticsPostPopularitySchema):
|
||||
score: int
|
||||
|
||||
|
||||
class AnalyticsSummarySchema(Schema):
|
||||
total_users: int
|
||||
verified_users: int
|
||||
total_events: int
|
||||
total_registrations: int
|
||||
total_revenue: int
|
||||
total_discount: int
|
||||
published_posts: int
|
||||
total_likes: int
|
||||
total_saves: int
|
||||
total_comments: int
|
||||
|
||||
|
||||
class AnalyticsUsersSchema(Schema):
|
||||
signup_trend: list[AnalyticsTrendPointSchema]
|
||||
by_major: list[AnalyticsPointSchema]
|
||||
by_university: list[AnalyticsPointSchema]
|
||||
by_year: list[AnalyticsPointSchema]
|
||||
|
||||
|
||||
class AnalyticsEventsSchema(Schema):
|
||||
registration_status: list[AnalyticsRegistrationStatusSchema]
|
||||
by_major: list[AnalyticsPointSchema]
|
||||
by_university: list[AnalyticsPointSchema]
|
||||
top_events: list[AnalyticsTopEventSchema]
|
||||
registration_trend: list[AnalyticsTrendPointSchema]
|
||||
|
||||
|
||||
class AnalyticsRevenueSchema(Schema):
|
||||
trend: list[AnalyticsTrendPointSchema]
|
||||
by_event: list[AnalyticsPointSchema]
|
||||
payment_status: list[AnalyticsRegistrationStatusSchema]
|
||||
total_paid: int
|
||||
total_discount: int
|
||||
total_base: int
|
||||
|
||||
|
||||
class AnalyticsBlogSchema(Schema):
|
||||
totals: dict[str, int]
|
||||
post_popularity: list[AnalyticsPostPopularitySchema]
|
||||
top_posts: list[AnalyticsTopPostSchema]
|
||||
activity_trend: list[dict[str, int | str]]
|
||||
by_category: list[AnalyticsPointSchema]
|
||||
by_tag: list[AnalyticsPointSchema]
|
||||
|
||||
|
||||
class AnalyticsAchievementsSchema(Schema):
|
||||
distinct_participants: int
|
||||
learning_hours: float
|
||||
published_content: int
|
||||
community_engagement: int
|
||||
|
||||
|
||||
class AnalyticsFiltersSchema(Schema):
|
||||
date_from: str | None = None
|
||||
date_to: str | None = None
|
||||
event_id: int | None = None
|
||||
granularity: Literal["day", "week", "month"]
|
||||
|
||||
|
||||
class AdminDashboardAnalyticsSchema(Schema):
|
||||
filters: AnalyticsFiltersSchema
|
||||
summary: AnalyticsSummarySchema
|
||||
users: AnalyticsUsersSchema
|
||||
events: AnalyticsEventsSchema
|
||||
revenue: AnalyticsRevenueSchema
|
||||
blog: AnalyticsBlogSchema
|
||||
achievements: AnalyticsAchievementsSchema
|
||||
Reference in New Issue
Block a user