import { inject, injectable } from "inversify"; import Poi, { IPlace, IPlaceResource, IPlaceAttributes } from "./"; import { IJsonApiResource } from "../../interfaces"; import Mapper from "../../mapper"; import * as TYPES from "../../types"; import { placeType } from "./"; @injectable() export class PlaceMapper extends Mapper { @inject(TYPES.Bookmark) model: IPlace; toModel(resource: IPlaceResource, included: IJsonApiResource[] = []): IPlace { const model = new Poi(); const attrs = resource.attributes; model.id = resource.id; model.ancestorIds = attrs.ancestor_ids; model.center = attrs.center; model.name = attrs.name; model.placeType = attrs.place_type; model.ancestry = included .filter((resource) => attrs.ancestor_ids.indexOf(parseInt(resource.id)) > -1 && resource.type === placeType ) .map((resource) => this.toModel(resource)); return model; } toResource(model: IPlace): IPlaceResource { const resource = { id: model.id, type: placeType, attributes: { id: model.id, ancestor_ids: model.ancestorIds, center: model.center, name: model.name, place_type: model.placeType, }, }; return resource; } } export default PlaceMapper;