fix(admin): refresh analytics dashboard layout
This commit is contained in:
@@ -432,6 +432,44 @@ class ApiClient {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getAdminUserAnalytics(params?: { date_from?: string; date_to?: string }) {
|
||||||
|
const query = new URLSearchParams();
|
||||||
|
if (params?.date_from) query.set('date_from', params.date_from);
|
||||||
|
if (params?.date_to) query.set('date_to', params.date_to);
|
||||||
|
return this.request<Types.UserAnalyticsSchema>(
|
||||||
|
`/api/analytics/admin/users${query.toString() ? `?${query.toString()}` : ''}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async getAdminEventAnalytics(params?: { date_from?: string; date_to?: string; event_id?: number }) {
|
||||||
|
const query = new URLSearchParams();
|
||||||
|
if (params?.date_from) query.set('date_from', params.date_from);
|
||||||
|
if (params?.date_to) query.set('date_to', params.date_to);
|
||||||
|
if (params?.event_id != null) query.set('event_id', String(params.event_id));
|
||||||
|
return this.request<Types.EventAnalyticsSchema>(
|
||||||
|
`/api/analytics/admin/events${query.toString() ? `?${query.toString()}` : ''}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async getAdminBlogAnalytics(params?: { date_from?: string; date_to?: string }) {
|
||||||
|
const query = new URLSearchParams();
|
||||||
|
if (params?.date_from) query.set('date_from', params.date_from);
|
||||||
|
if (params?.date_to) query.set('date_to', params.date_to);
|
||||||
|
return this.request<Types.BlogAnalyticsSchema>(
|
||||||
|
`/api/analytics/admin/blog${query.toString() ? `?${query.toString()}` : ''}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async getAdminDashboardEventOptions(params?: { search?: string; limit?: number; offset?: number }) {
|
||||||
|
const query = new URLSearchParams();
|
||||||
|
if (params?.search) query.set('search', params.search);
|
||||||
|
if (params?.limit != null) query.set('limit', String(params.limit));
|
||||||
|
if (params?.offset != null) query.set('offset', String(params.offset));
|
||||||
|
return this.request<Types.AnalyticsEventOptionsSchema>(
|
||||||
|
`/api/analytics/admin/events/options${query.toString() ? `?${query.toString()}` : ''}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// ============= Blog Endpoints =============
|
// ============= Blog Endpoints =============
|
||||||
|
|
||||||
async getPosts(params?: {
|
async getPosts(params?: {
|
||||||
|
|||||||
@@ -759,6 +759,12 @@ export interface AnalyticsPointSchema {
|
|||||||
value: number;
|
value: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface AnalyticsPointGroupSchema {
|
||||||
|
top_items: AnalyticsPointSchema[];
|
||||||
|
other_count: number;
|
||||||
|
total_count: number;
|
||||||
|
}
|
||||||
|
|
||||||
export interface AnalyticsTrendPointSchema {
|
export interface AnalyticsTrendPointSchema {
|
||||||
date: string;
|
date: string;
|
||||||
label: string;
|
label: string;
|
||||||
@@ -790,6 +796,12 @@ export interface AnalyticsPostPopularitySchema {
|
|||||||
comments: number;
|
comments: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface AnalyticsPostPopularityGroupSchema {
|
||||||
|
top_items: AnalyticsPostPopularitySchema[];
|
||||||
|
other_count: number;
|
||||||
|
total_count: number;
|
||||||
|
}
|
||||||
|
|
||||||
export interface AnalyticsTopPostSchema extends AnalyticsPostPopularitySchema {
|
export interface AnalyticsTopPostSchema extends AnalyticsPostPopularitySchema {
|
||||||
score: number;
|
score: number;
|
||||||
}
|
}
|
||||||
@@ -855,6 +867,81 @@ export interface AdminDashboardAnalyticsSchema {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface AnalyticsEventOptionsSchema {
|
||||||
|
count: number;
|
||||||
|
results: Array<{
|
||||||
|
value: string;
|
||||||
|
label: string;
|
||||||
|
description?: string | null;
|
||||||
|
}>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UserAnalyticsSchema {
|
||||||
|
filters: {
|
||||||
|
date_from?: string | null;
|
||||||
|
date_to?: string | null;
|
||||||
|
granularity: 'day' | 'week' | 'month';
|
||||||
|
};
|
||||||
|
summary: {
|
||||||
|
total_users: number;
|
||||||
|
verified_users: number;
|
||||||
|
unverified_users: number;
|
||||||
|
profile_completion_rate: number;
|
||||||
|
};
|
||||||
|
signup_trend: AnalyticsTrendPointSchema[];
|
||||||
|
by_major: AnalyticsPointGroupSchema;
|
||||||
|
by_university: AnalyticsPointGroupSchema;
|
||||||
|
by_year: AnalyticsPointGroupSchema;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface EventAnalyticsSchema {
|
||||||
|
filters: {
|
||||||
|
date_from?: string | null;
|
||||||
|
date_to?: string | null;
|
||||||
|
event_id?: number | null;
|
||||||
|
};
|
||||||
|
summary: {
|
||||||
|
total_events: number;
|
||||||
|
total_registrations: number;
|
||||||
|
distinct_participants: number;
|
||||||
|
total_revenue: number;
|
||||||
|
total_discount: number;
|
||||||
|
total_base: number;
|
||||||
|
learning_hours: number;
|
||||||
|
};
|
||||||
|
registration_status: AnalyticsRegistrationStatusSchema[];
|
||||||
|
payment_status: AnalyticsRegistrationStatusSchema[];
|
||||||
|
attendee_by_major: AnalyticsPointGroupSchema;
|
||||||
|
attendee_by_university: AnalyticsPointGroupSchema;
|
||||||
|
registration_trend: AnalyticsTrendPointSchema[];
|
||||||
|
revenue_trend: AnalyticsTrendPointSchema[];
|
||||||
|
revenue_by_event: AnalyticsPointGroupSchema;
|
||||||
|
top_events: {
|
||||||
|
top_items: AnalyticsTopEventSchema[];
|
||||||
|
other_count: number;
|
||||||
|
total_count: number;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface BlogAnalyticsSchema {
|
||||||
|
filters: {
|
||||||
|
date_from?: string | null;
|
||||||
|
date_to?: string | null;
|
||||||
|
};
|
||||||
|
summary: {
|
||||||
|
published_posts: number;
|
||||||
|
total_likes: number;
|
||||||
|
total_saves: number;
|
||||||
|
total_comments: number;
|
||||||
|
community_engagement: number;
|
||||||
|
};
|
||||||
|
activity_trend: Array<{ date: string; likes: number; saves: number; comments: number }>;
|
||||||
|
post_popularity: AnalyticsPostPopularityGroupSchema;
|
||||||
|
top_posts: AnalyticsTopPostSchema[];
|
||||||
|
by_category: AnalyticsPointGroupSchema;
|
||||||
|
by_tag: AnalyticsPointGroupSchema;
|
||||||
|
}
|
||||||
|
|
||||||
// payment
|
// payment
|
||||||
export interface CreatePaymentOut {
|
export interface CreatePaymentOut {
|
||||||
start_pay_url: string;
|
start_pay_url: string;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user