export interface Photo { photo?: string; video?: string; url: string; type?: string; } export interface DescriptionField { key: string; value: string; } export interface Comment { id?: string; text: string; author?: string; stars?: number; createdAt?: string; } export interface ItemTranslation { name?: string; simpleDescription?: string; description?: DescriptionField[]; } export interface Review { rating?: number; content?: string; userID?: string; answer?: string; timestamp?: string; } /** @deprecated Use {@link Review} instead */ export type Callback = Review; export interface Question { question: string; answer: string; upvotes: number; downvotes: number; like?: number; dislike?: number; } /** Localized name entry from backend */ export interface ItemName { language: string; value: string; } /** Localized description entry from backend */ export interface ItemDescription { language: string; value: string; } /** Key-value attribute pair */ export interface ItemAttribute { key: string; value: string; } /** Item variant detail (price, size, colour per variant) */ export interface ItemDetail { color?: string; colour?: string; size?: string; price: number; deliveryPrice?: number; currency: string; remaining: number; } export interface Item { categoryID: number; itemID: number; name: string; photos: Photo[] | null; description: string; currency: string; price: number; deliveryPrice?: number; discount: number; remainings?: string; rating: number; callbacks: Review[] | null; questions: Question[] | null; quantity?: number; // Backend API fields colour?: string; size?: string; language?: string; names?: ItemName[]; descriptions?: ItemDescription[]; attributes?: ItemAttribute[]; // BackOffice API fields id?: string; visible?: boolean; priority?: number; imgs?: string[]; tags?: string[]; badges?: string[]; simpleDescription?: string; descriptionFields?: DescriptionField[]; subcategoryId?: string; translations?: Record; comments?: Comment[]; visits?: number; itemDetails?: ItemDetail[]; } export interface CartItem extends Item { quantity: number; }