import { injectable } from "inversify"; import BaseService from "../../service"; import { IHttpClient, IService, IResourceMapper, IOpenIdUserInfoResponse, IFindParams, IJsonApiResponse, IAvailabilityParams, IAvailabilityDates } from "../../interfaces"; import { availabilityType, IAvailabilityResource, IAvailability, IAvailabilityResponse } from "./"; import Mapper from "./mapper"; import * as TYPES from "../../types"; export interface IAvailabilityService extends IService { checkDates(lodgingId: string, dates: IAvailabilityDates, options?: IFindParams): Promise; } @injectable() export default class AvailabilityService extends BaseService implements IAvailabilityService { resource: string = availabilityType; mapper: IResourceMapper = new Mapper(); public url() { return `${this.host}/lodgings/availability`; } public async checkDates(lodgingId: string, dates: IAvailabilityDates, options?: IFindParams): Promise { const dateOptions = { ...options, available: { from: dates.fromDate, to: dates.toDate, }, }; const response = await this.http.fetch>( `${this.url()}${this.qs(dateOptions)}&filter[lodgings][equals]=${lodgingId}`, { ...options, headers: this.headers(), }); const parsed = this.parse(response); return parsed; } }