/**
* Event Catalog KV Models
*/
export interface NearbyEventEntry {
events: Event[];
featured_events: Event[];
favorite_performer?: Performer; // added by workers
}
export interface EventCatalogEntry {
event_data?: Event;
inventory_trends?: Record<InventoryTrendType, InventoryTrend[]>;
tracked_count?: number;
untracked_count?: number;
probabilities?: Record<EventProbabilityType, EventProbabilityValue>;
}
export const INVENTORY_TREND_TYPES = {
MIN_PRICE: "min_price",
AVE_PRICE: "ave_price",
QTY: "qty",
} as const;
export type InventoryTrendType =
(typeof INVENTORY_TREND_TYPES)[keyof typeof INVENTORY_TREND_TYPES];
export interface InventoryTrend {
from_date: string;
to_date: string;
from_value: number;
to_value: number;
pct_diff: number;
}
export interface TrendData {
from: number;
to: number;
pct_diff: number;
}
export const EVENT_PROBABILITY_TYPES = {
PRICE_INCREASE: "price_increase",
} as const;
export type EventProbabilityType =
(typeof EVENT_PROBABILITY_TYPES)[keyof typeof EVENT_PROBABILITY_TYPES];
export interface EventProbabilityValue {
value: number;
updated_at: string;
model_version?: string;
}
export interface EventInventoryTrend {
min_price?: Record<number, TrendData>;
ave_price?: Record<number, TrendData>;
qty?: Record<number, TrendData>;
}
export interface Event {
event_id: string;
display_name: string;
description: string;
event_date?: string | null;
event_date_utc?: string | null;
city: string;
state: string;
image_url: string;
event_name: string;
event_type: string;
child_category: string;
grandchild_category: string;
main_performer: Performer;
secondary_performers: Performer[];
venue: Venue;
buy_url: string;
status: "Scheduled" | "Rescheduled" | "Postponed" | "Canceled";
original_event_date: string;
short_name: string;
share_link: string;
tags?: { type: string; precedence?: number }[];
is_favorited?: boolean; // added by workers
}
export interface Performer {
performer_id: string;
name: string;
url: string;
sell_url: string;
img_url: string;
home_venue?: number;
slug: string;
short_name: string;
share_link: string;
primary_color: string;
secondary_color: string;
has_image?: boolean;
role?: string;
}
export interface Venue {
id?: number;
name: string;
address: string;
city: string;
state: string;
zipcode: string;
country: string;
description: string;
img_url: string;
url: string;
latitude?: number;
longitude?: number;
timezone: string;
}