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
}