import { injectable } from "inversify"; import { IJsonApiResponse, IJsonApiResource, IJsonApiRelationship, } from "../../interfaces"; import { IImage } from "../image"; export const partnerActivityType = "partner_activity"; export interface IPartnerActivityAttributes { accommodation?: string; canonical_category?: string; categories?: string[]; departure_info?: string; descriptions?: { long_description?: string; short_description?: string; }; difficulty?: { description?: string; grade?: number; scale?: number; }; duration?: { duration: number; unit: string; }; duration_info?: string; exclusions?: string[]; external_id?: string; group_size?: { average_size: string; description: string; maximum_size: string; minimum_size: string; }; highlights?: string[]; inclusions?: string[]; itinerary?: Array<{ day: number; title: string; description: string; }>; meals?: string; media?: { images: string[]; videos: string[]; }; name?: string; pricing?: { discounted_price?: { amount: number; currency: string; formatted_amount: string; }; regular_price?: { amount: number; currency: string; formatted_amount: string; }; }; prices?: { discounted_prices?: Array<{ amount: number; currency: string; formatted_amount: string; }>; regular_prices?: Array<{ amount: number; currency: string; formatted_amount: string; }>; }; provider?: string; rating?: string; return_info?: string; review_count?: string; staff_experts?: string; transport?: string; } export interface IPartnerActivityResource extends IJsonApiResource {} export interface IPartnerActivityResponse extends IJsonApiResponse {} export interface IPartnerActivityPrice { amount: number; currency: string; formattedAmount: string; } export interface IPartnerActivity { id: string; type: string; accommodation?: string; canonicalCategory?: string; categories?: string[]; departureInfo?: string; descriptions?: { longDescription?: string; shortDescription?: string; }; difficulty?: { description?: string; grade?: number; scale?: number; }; duration?: { duration: number; unit: string; }; durationInfo?: string; exclusions?: string[]; externalId?: string; groupSize?: { averageSize?: string; description?: string; maximumSize?: string; minimumSize?: string; }; highlights?: string[]; inclusions?: string[]; itinerary?: Array<{ day: number; title: string; description: string; }>; meals?: string; media?: { images: string[]; videos: string[]; }; name?: string; prices?: { discountedPrices: IPartnerActivityPrice[]; regularPrices: IPartnerActivityPrice[]; }; pricing?: { discountedPrice?: IPartnerActivityPrice; regularPrice?: IPartnerActivityPrice; }; provider?: string; rating?: string; returnInfo?: string; reviewCount?: string; staffExperts?: string; transport?: string; containingPlaceId?: string; containingCityName?: string; containingContinentName?: string; containingCountryName?: string; containingNeighborhoodName?: string; containingRegionNames?: string[]; map?: string; booking?: string; images?: IImage[]; activityType: string; } @injectable() export default class PartnerActivity implements IPartnerActivity { id: string; type: string = "partner_activity"; accommodation?: string; canonicalCategory?: string; categories?: string[] = []; departureInfo?: string; descriptions?: { longDescription?: string; shortDescription?: string; } = {}; difficulty?: { description?: string; grade?: number; scale?: number; } = {}; duration?: { duration: number; unit: string; } = { duration: 0, unit: "", }; durationInfo?: string; exclusions?: string[] = []; externalId?: string; groupSize?: { averageSize?: string; description?: string; maximumSize?: string; minimumSize?: string; } = {}; highlights?: string[] = []; inclusions?: string[] = []; itinerary?: Array<{ day: number; title: string; description: string; }> = []; meals?: string; media?: { images: string[]; videos: string[]; } = { images: [], videos: [] }; name?: string; prices?: { discountedPrices: IPartnerActivityPrice[], regularPrices: IPartnerActivityPrice[], } = { discountedPrices: [], regularPrices: [] }; pricing?: { discountedPrice?: IPartnerActivityPrice; regularPrice?: IPartnerActivityPrice; } = { discountedPrice: { amount: 0, currency: "", formattedAmount: "", }, regularPrice: { amount: 0, currency: "", formattedAmount: "", }, }; provider?: string; rating?: string; returnInfo?: string; reviewCount?: string; staffExperts?: string; transport?: string; containingPlaceId?: string; containingCityName?: string; containingContinentName?: string; containingCountryName?: string; containingNeighborhoodName?: string; containingRegionNames?: string[]; map?: string; booking?: string; images?: IImage[]; activityType: string; constructor(options?: IPartnerActivity) { Object.assign(this, options); } }