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