GuidesAdminAnalytics

Analytics

Detailed analytics available to admin users through AnalyticsService.

Sales Analytics

Daily Sales

Fetched from the analytics_daily_sales view:

struct DailySales: Codable, Identifiable {
    let date: String
    let orderCount: Int
    let subtotalCents: Int
    let taxCents: Int
    let tipCents: Int
    let totalCents: Int
    let discountCents: Int
    let avgOrderCents: Int
}

Sales Summary

Computed from raw orders data:

struct SalesSummary {
    let orderCount: Int
    let totalRevenueCents: Int
    let totalTipsCents: Int
    let totalTaxCents: Int
    let avgOrderValueCents: Int
 
    var totalRevenueDollars: Double   // Computed
    var avgOrderValueDollars: Double  // Computed
    var totalTipsDollars: Double      // Computed
}

Hourly Distribution

Shows order volume and revenue by hour of day from analytics_hourly_distribution:

struct HourlyDistribution: Codable, Identifiable {
    let hour: Int             // 0-23
    let orderCount: Int
    let totalCents: Int
    var hourLabel: String     // e.g., "7AM", "2PM"
}

Useful for identifying peak hours and staffing needs.

Top Items

Best-selling menu items from analytics_top_items:

struct TopItem: Codable, Identifiable {
    let name: String
    let menuItemId: String?
    let totalQuantity: Int
    let totalRevenueCents: Int
    let orderCount: Int
    var totalRevenueDollars: Double   // Computed
}

Most-used modifiers from analytics_popular_modifiers:

struct PopularModifier: Codable, Identifiable {
    let name: String
    let usageCount: Int
    let totalAdjustmentCents: Int
}

Order Status Breakdown

Current order status distribution from analytics_order_status:

struct OrderStatusStats: Codable, Identifiable {
    let status: String
    let count: Int          // All time
    let todayCount: Int     // Today
    let weekCount: Int      // This week
}

Available Methods

MethodReturnsParameters
getDailySales(days:)[DailySales]Number of days
getSalesSummary(days:)SalesSummaryNumber of days
getHourlyDistribution()[HourlyDistribution]None
getTopItems(limit:)[TopItem]Max items (default 10)
getPopularModifiers(limit:)[PopularModifier]Max items (default 10)
getOrderStatusBreakdown()[OrderStatusStats]None
getEmployeePerformance()[EmployeePerformance]None
getLoyaltyTierDistribution()[LoyaltyTierStats]None
getStarTransactionsSummary(days:)StarTransactionsSummaryNumber of days
getNewCustomers(days:)IntNumber of days
getTotalCustomers()IntNone