Files
Hotel-Booking/Frontend/src/features/analytics/services/analyticsService.ts
Iliyan Angelov 39fcfff811 update
2025-11-30 22:43:09 +02:00

328 lines
9.0 KiB
TypeScript

import apiClient from '../../../shared/services/apiClient';
// ==================== REVENUE ANALYTICS ====================
export interface RevPARData {
revpar: number;
total_revenue: number;
available_room_nights: number;
period_days: number;
total_rooms: number;
}
export interface ADRData {
adr: number;
period: {
start: string | null;
end: string | null;
};
}
export interface OccupancyRateData {
occupancy_rate: number;
occupied_room_nights: number;
available_room_nights: number;
period_days: number;
}
export interface RevenueForecastData {
forecast: Array<{
date: string;
forecasted_revenue: number;
confidence: string;
}>;
average_daily_revenue: number;
forecast_period: number;
based_on_days: number;
}
export interface MarketPenetrationData {
total_bookings: number;
penetration_by_room_type: Array<{
room_type: string;
bookings: number;
revenue: number;
market_share: number;
}>;
period: {
start: string;
end: string;
};
}
// ==================== OPERATIONAL ANALYTICS ====================
export interface StaffPerformanceData {
staff_performance: Array<{
staff_id: number;
staff_name: string;
email: string;
check_ins_handled: number;
performance_score: number;
}>;
period: {
start: string;
end: string;
};
}
export interface ServiceUsageData {
services: Array<{
service_id: number;
service_name: string;
category: string;
usage_count: number;
total_revenue: number;
average_price: number;
}>;
total_services: number;
total_usage: number;
total_revenue: number;
}
export interface OperationalEfficiencyData {
conversion_rate: number;
average_booking_value: number;
cancellation_rate: number;
total_bookings: number;
confirmed_bookings: number;
cancelled_bookings: number;
}
// ==================== GUEST ANALYTICS ====================
export interface GuestLTVData {
guests: Array<{
user_id: number;
name: string;
email: string;
total_bookings: number;
lifetime_value: number;
average_booking_value: number;
}>;
average_ltv: number;
total_guests_analyzed: number;
}
export interface CustomerAcquisitionCostData {
new_customers: number;
period: {
start: string;
end: string;
};
note: string;
}
export interface RepeatGuestRateData {
repeat_guest_rate: number;
total_guests: number;
repeat_guests: number;
one_time_guests: number;
}
export interface GuestSatisfactionTrendsData {
trends: Array<{
date: string;
average_rating: number;
review_count: number;
}>;
overall_average_rating: number;
total_reviews: number;
}
// ==================== FINANCIAL ANALYTICS ====================
export interface ProfitLossData {
total_revenue: number;
refunds: number;
net_revenue: number;
gross_profit: number;
period: {
start: string;
end: string;
};
}
export interface PaymentMethodAnalyticsData {
payment_methods: Array<{
payment_method: string;
transaction_count: number;
total_amount: number;
average_amount: number;
percentage: number;
}>;
total_transactions: number;
total_amount: number;
}
export interface RefundAnalysisData {
refunds: Array<{
date: string;
refund_count: number;
refund_amount: number;
}>;
total_refund_amount: number;
total_refund_count: number;
average_refund_amount: number;
}
// ==================== COMPREHENSIVE ANALYTICS ====================
export interface ComprehensiveAnalyticsData {
period: {
start: string | null;
end: string | null;
};
revenue?: {
revpar: RevPARData;
adr: ADRData;
occupancy_rate: OccupancyRateData;
revenue_forecast: RevenueForecastData;
market_penetration: MarketPenetrationData;
};
operational?: {
staff_performance: StaffPerformanceData;
service_usage: ServiceUsageData;
operational_efficiency: OperationalEfficiencyData;
};
guest?: {
lifetime_value: GuestLTVData;
customer_acquisition_cost: CustomerAcquisitionCostData;
repeat_guest_rate: RepeatGuestRateData;
satisfaction_trends: GuestSatisfactionTrendsData;
};
financial?: {
profit_loss: ProfitLossData;
payment_methods: PaymentMethodAnalyticsData;
refund_analysis: RefundAnalysisData;
};
}
export interface AnalyticsParams {
from?: string;
to?: string;
days?: number;
include_revenue?: boolean;
include_operational?: boolean;
include_guest?: boolean;
include_financial?: boolean;
}
// ==================== API FUNCTIONS ====================
// Revenue Analytics
export const getRevPAR = async (params?: AnalyticsParams): Promise<{ status: string; data: RevPARData }> => {
const response = await apiClient.get('/analytics/revenue/revpar', { params });
return response.data;
};
export const getADR = async (params?: AnalyticsParams): Promise<{ status: string; data: ADRData }> => {
const response = await apiClient.get('/analytics/revenue/adr', { params });
return response.data;
};
export const getOccupancyRate = async (params?: AnalyticsParams): Promise<{ status: string; data: OccupancyRateData }> => {
const response = await apiClient.get('/analytics/revenue/occupancy', { params });
return response.data;
};
export const getRevenueForecast = async (days: number = 30): Promise<{ status: string; data: RevenueForecastData }> => {
const response = await apiClient.get('/analytics/revenue/forecast', { params: { days } });
return response.data;
};
export const getMarketPenetration = async (params?: AnalyticsParams): Promise<{ status: string; data: MarketPenetrationData }> => {
const response = await apiClient.get('/analytics/revenue/market-penetration', { params });
return response.data;
};
// Operational Analytics
export const getStaffPerformance = async (params?: AnalyticsParams): Promise<{ status: string; data: StaffPerformanceData }> => {
const response = await apiClient.get('/analytics/operational/staff-performance', { params });
return response.data;
};
export const getServiceUsageAnalytics = async (params?: AnalyticsParams): Promise<{ status: string; data: ServiceUsageData }> => {
const response = await apiClient.get('/analytics/operational/service-usage', { params });
return response.data;
};
export const getOperationalEfficiency = async (params?: AnalyticsParams): Promise<{ status: string; data: OperationalEfficiencyData }> => {
const response = await apiClient.get('/analytics/operational/efficiency', { params });
return response.data;
};
// Guest Analytics
export const getGuestLifetimeValue = async (params?: AnalyticsParams): Promise<{ status: string; data: GuestLTVData }> => {
const response = await apiClient.get('/analytics/guest/lifetime-value', { params });
return response.data;
};
export const getCustomerAcquisitionCost = async (params?: AnalyticsParams): Promise<{ status: string; data: CustomerAcquisitionCostData }> => {
const response = await apiClient.get('/analytics/guest/acquisition-cost', { params });
return response.data;
};
export const getRepeatGuestRate = async (params?: AnalyticsParams): Promise<{ status: string; data: RepeatGuestRateData }> => {
const response = await apiClient.get('/analytics/guest/repeat-rate', { params });
return response.data;
};
export const getGuestSatisfactionTrends = async (params?: AnalyticsParams): Promise<{ status: string; data: GuestSatisfactionTrendsData }> => {
const response = await apiClient.get('/analytics/guest/satisfaction-trends', { params });
return response.data;
};
// Financial Analytics
export const getProfitLoss = async (params?: AnalyticsParams): Promise<{ status: string; data: ProfitLossData }> => {
const response = await apiClient.get('/analytics/financial/profit-loss', { params });
return response.data;
};
export const getPaymentMethodAnalytics = async (params?: AnalyticsParams): Promise<{ status: string; data: PaymentMethodAnalyticsData }> => {
const response = await apiClient.get('/analytics/financial/payment-methods', { params });
return response.data;
};
export const getRefundAnalysis = async (params?: AnalyticsParams): Promise<{ status: string; data: RefundAnalysisData }> => {
const response = await apiClient.get('/analytics/financial/refunds', { params });
return response.data;
};
// Comprehensive Analytics
export const getComprehensiveAnalytics = async (params?: AnalyticsParams): Promise<{ status: string; data: ComprehensiveAnalyticsData }> => {
const response = await apiClient.get('/analytics/comprehensive', { params });
return response.data;
};
const analyticsService = {
// Revenue Analytics
getRevPAR,
getADR,
getOccupancyRate,
getRevenueForecast,
getMarketPenetration,
// Operational Analytics
getStaffPerformance,
getServiceUsageAnalytics,
getOperationalEfficiency,
// Guest Analytics
getGuestLifetimeValue,
getCustomerAcquisitionCost,
getRepeatGuestRate,
getGuestSatisfactionTrends,
// Financial Analytics
getProfitLoss,
getPaymentMethodAnalytics,
getRefundAnalysis,
// Comprehensive
getComprehensiveAnalytics,
};
export default analyticsService;