114 lines
2.6 KiB
Python
114 lines
2.6 KiB
Python
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
|