# Analytics System Documentation
## Overview
The analytics system provides comprehensive insights into store performance, sales trends, customer behavior, and order management. It supports both vendors and staff users (sub-users) with appropriate access controls and server-side rendering for optimal performance.
## Features
### 🔐 Multi-User Support
- **Vendors**: Access their own store analytics automatically
- **Staff/Sub-Users**: Access store analytics by providing a `storeId` parameter via URL or cookies
- **Role-based Access**: Different permissions for different user types
- **Server-side Rendering**: Initial data fetched server-side for better performance
### 📊 Analytics Dashboard
- **Overview Metrics**: Total revenue, orders, customers, and products
- **Revenue Trends**: Time-based revenue analysis with interactive charts
- **Product Performance**: Top-selling products with stock status
- **Customer Insights**: Customer segmentation and behavior analysis
- **Order Analytics**: Order status distribution and processing times
### 🎯 Key Metrics
- Total and monthly revenue
- Order completion rates
- Customer acquisition and retention
- Product performance rankings
- Average order processing times
## API Endpoints
### Authentication
All endpoints require authentication using the new `protectStore` middleware:
```javascript
// For vendors (automatic store access)
GET /api/analytics/overview
// For staff users (requires storeId parameter)
GET /api/analytics/overview?storeId=store_id_here
```
### Available Endpoints
#### 1. Analytics Overview
```http
GET /api/analytics/overview
```
Returns comprehensive overview metrics including:
- Order statistics (total, completed, pending, completion rate)
- Revenue data (total, monthly, weekly, average order value)
- Product count
- Unique customer count
- User type (vendor/staff)
#### 2. Revenue Trends
```http
GET /api/analytics/revenue-trends?period=30&storeId=optional
```
Returns daily revenue and order trends for the specified period.
#### 3. Product Performance
```http
GET /api/analytics/product-performance?storeId=optional
```
Returns top-performing products with sales metrics and stock status.
#### 4. Customer Insights
```http
GET /api/analytics/customer-insights?storeId=optional
```
Returns customer segmentation and top customer analysis.
#### 5. Order Analytics
```http
GET /api/analytics/order-analytics?period=30&storeId=optional
```
Returns order status distribution and processing time analysis.
## Frontend Implementation
### Server-Side Rendering
The analytics page uses server-side rendering for optimal performance:
```typescript
// app/dashboard/analytics/page.tsx
export default async function AnalyticsPage({
searchParams,
}: {
searchParams: { storeId?: string };
}) {
const storeId = searchParams.storeId;
const initialData = await getAnalyticsOverviewServer(storeId);
return ;
}
```
### Store Selection for Staff Users
Staff users can select which store to view analytics for:
```typescript
// URL-based store selection
/dashboard/analytics?storeId=store_id_here
// StoreSelector component for easy store switching
```
### Components
#### AnalyticsDashboard
Main dashboard component with tabs for different analytics views.
**Props:**
- `initialData`: Initial analytics overview data (server-side fetched)
**Features:**
- Key metrics cards with trend indicators
- Tabbed interface for different analytics views
- Refresh functionality
- User type indicator (Vendor/Staff View)
#### StoreSelector
Client-side component for staff users to select stores.
**Features:**
- Input field for store ID
- URL-based navigation
- Current store display
- Error handling and validation
#### RevenueChart
Displays revenue trends over time with interactive charts.
**Props:**
- `timeRange`: Time period for analysis (7, 30, 90 days)
#### ProductPerformanceChart
Shows top-performing products in a table format.
#### CustomerInsightsChart
Displays customer segmentation and top customers.
#### OrderAnalyticsChart
Shows order status distribution and daily trends.
**Props:**
- `timeRange`: Time period for analysis
#### MetricsCard
Reusable component for displaying individual metrics.
**Props:**
- `title`: Metric title
- `value`: Metric value
- `description`: Metric description
- `icon`: Lucide icon component
- `trend`: Trend direction ("up", "down", "neutral")
- `trendValue`: Trend description
## Sub-User (Staff) Support
### Authentication Flow
1. Staff users authenticate using their staff credentials
2. When accessing analytics, they must provide a `storeId` parameter
3. The system verifies the store exists and grants access
4. All analytics data is filtered by the specified store
### Access Methods
Staff users can access store analytics in multiple ways:
1. **URL Parameter**: `/dashboard/analytics?storeId=store_id_here`
2. **Store Selector**: Use the StoreSelector component to choose a store
3. **Cookies**: Store ID can be stored in cookies for persistence
### Frontend Integration
The analytics service automatically handles both user types:
```typescript
// Server-side (for initial load)
const data = await getAnalyticsOverviewServer(storeId);
// Client-side (for refreshes and updates)
const data = await getAnalyticsOverviewWithStore();
```
## Usage Examples
### Basic Analytics Access
```typescript
// Server-side rendering
import { getAnalyticsOverviewServer } from '@/lib/server-api';
const overview = await getAnalyticsOverviewServer(storeId);
// Client-side updates
import { getAnalyticsOverviewWithStore } from '@/lib/services/analytics-service';
const overview = await getAnalyticsOverviewWithStore();
```
### Staff User with Specific Store
```typescript
// Navigate to analytics with store ID
router.push(`/dashboard/analytics?storeId=${storeId}`);
// Or use the store selector component
```
### Revenue Trends with Time Range
```typescript
import { getRevenueTrendsWithStore } from '@/lib/services/analytics-service';
// Get 30-day revenue trends
const trends = await getRevenueTrendsWithStore('30');
```
## Data Structure
### AnalyticsOverview
```typescript
interface AnalyticsOverview {
orders: {
total: number;
completed: number;
pending: number;
completionRate: string;
};
revenue: {
total: number;
monthly: number;
weekly: number;
averageOrderValue: number;
};
products: {
total: number;
};
customers: {
unique: number;
};
userType?: 'vendor' | 'staff';
}
```
### RevenueData
```typescript
interface RevenueData {
_id: {
year: number;
month: number;
day: number;
};
revenue: number;
orders: number;
}
```
### ProductPerformance
```typescript
interface ProductPerformance {
productId: string;
name: string;
image: string;
unitType: string;
currentStock: number;
stockStatus: string;
totalSold: number;
totalRevenue: number;
orderCount: number;
averagePrice: number;
}
```
## Security Considerations
### Access Control
- Vendors can only access their own store data
- Staff users must provide valid storeId parameter
- All requests are authenticated and authorized
- Store ownership is verified for staff access
### Data Privacy
- Customer data is anonymized in analytics
- No sensitive information is exposed
- All data is filtered by store ownership
## Error Handling
The system provides comprehensive error handling:
- **401 Unauthorized**: Invalid or missing authentication → Redirect to login
- **400 Bad Request**: Missing storeId for staff users → Show store selector
- **403 Forbidden**: Access denied to specific store
- **404 Not Found**: Store not found
- **500 Server Error**: Internal server errors
All errors are displayed to users via toast notifications in the frontend.
## Performance Optimization
- **Server-side data fetching** for initial load
- **Client-side caching** for subsequent requests
- **Efficient database queries** with proper indexing
- **Pagination** for large datasets
- **Real-time data refresh** capabilities
- **Optimized rendering** with React Suspense
## Backend Implementation
### Middleware
- `protectStore`: Handles both vendors and staff users
- `protectVendorOnly`: Vendor-specific routes
- `protectStaffOnly`: Staff-specific routes
### Database Queries
- Uses `storeId` for consistent data filtering
- Aggregation pipelines for complex analytics
- Proper indexing for performance
- Time-based filtering for trends
## Future Enhancements
- Real-time analytics updates
- Export functionality for reports
- Advanced filtering and date range selection
- Custom dashboard configurations
- Email reports and notifications
- Comparative analytics (period-over-period)
- Predictive analytics and forecasting
- Multi-store comparison for staff users