bookwiz.io / lib / types / usage-tracking.ts
usage-tracking.ts
Raw
export interface UserUsage {
  id: string
  user_id: string
  period_start: string
  period_end: string
  
  // Current usage counts
  smart_prompts_used: number
  fast_prompts_used: number
  storage_used_gb: number
  custom_templates_created: number
  books_created: number
  
  // Metadata
  last_reset_at: string
  created_at: string
  updated_at: string
}

export interface UsageLog {
  id: string
  user_id: string
  feature_type: string
  action: 'increment' | 'decrement' | 'reset'
  amount: number
  metadata?: Record<string, any>
  created_at: string
}

export interface UsagePeriod {
  start: Date
  end: Date
  type: 'monthly' | 'annually'
}

export interface UsageStats {
  period: UsagePeriod
  usage: UserUsage
  limits: {
    smart_prompts: number
    fast_prompts: number | null // null = unlimited
    storage_gb: number
    custom_templates: number | null | undefined // null/undefined = unlimited
    books: number | null | undefined // null/undefined = unlimited
  }
  quotas: {
    smart_prompts: { used: number; limit: number; percentage: number }
    fast_prompts: { used: number; limit: number | null; percentage: number | null }
    storage_gb: { used: number; limit: number; percentage: number }
    custom_templates: { used: number; limit: number | null | undefined; percentage: number | null }
    books: { used: number; limit: number | null | undefined; percentage: number | null }
  }
}

// For API requests
export type FeatureType = 'smart_prompts' | 'fast_prompts' | 'storage_gb' | 'custom_templates' | 'books'

export interface IncrementUsageRequest {
  feature_type: FeatureType
  amount?: number // defaults to 1
  metadata?: Record<string, any>
}

export interface ResetUsageRequest {
  user_id: string
  feature_types?: string[] // if not provided, resets all
}