// (C) 2007-2019 GoodData Corporation import { Promise } from "es6-promise"; import { Application } from "express"; import * as HttpStatusCodes from "http-status-codes"; import { IError } from "../../model/Error"; import { IMetadataObject } from "../../model/MetadataObject"; import { IDateAttribute } from "../../model/DateDataSet"; import { IAttribute } from "../../model/Attribute"; import { IMockProject, getAttributes, getMetrics, getFacts, getDateDataSets, getAnalyticalDashboards, getFilterContexts, getVisualizationObjects, getAttributeDisplayForms, getVisualizationClasses, getDateAttributes, getDateAttributeDisplayForms, getDateFilterConfig, } from "../../model/MockProject"; import { getIdentifier, getWrappedMetadataObject } from "../helpers/metadataObjects"; import { WrappedMetadataObject } from "../../model/index"; function convertDateAttributeToAttribute(dateAttribute: IDateAttribute): IAttribute { return { content: { displayForms: dateAttribute.displayForms, }, meta: dateAttribute.meta, }; } function getMetadataObjects(project: IMockProject): IMetadataObject[] { return [ ...getAttributes(project), ...getDateAttributes(project).map(convertDateAttributeToAttribute), ...getMetrics(project), ...getFacts(project), ...getDateDataSets(project), ...getAnalyticalDashboards(project), ...getFilterContexts(project), ...getVisualizationObjects(project), ...getVisualizationClasses(project), ...getAttributeDisplayForms(project), ...getDateAttributeDisplayForms(project), getDateFilterConfig(project), ]; } function getMetadataObject(project: IMockProject, id: string): Promise { const metadataObjects: IMetadataObject[] = getMetadataObjects(project); const metadataObject: IMetadataObject = metadataObjects.find(obj => getIdentifier(obj) === id); return metadataObject ? Promise.resolve(getWrappedMetadataObject(metadataObject)) : Promise.reject(createError(id)); } function createError(id: string): IError { return { error: { parameters: [id], requestId: "eZ0emrTLhskSSpcZ:k5z86eamalfb20lu", component: "Resource::Obj::Service", errorClass: "GDC::Exception::NotFound", message: "Object ID %s not found", }, }; } export const metadataObject = { register(app: Application, project: IMockProject) { app.get(`/gdc/md/${project.project.meta.identifier}/obj/:id`, (req, res) => { getMetadataObject(project, req.params.id) .then(mdObject => [HttpStatusCodes.OK, mdObject]) .catch(error => [HttpStatusCodes.NOT_FOUND, error]) .then(([status, body]) => res.status(status).json(body)); }); app.delete(`/gdc/md/${project.project.meta.identifier}/obj/:id`, (req, res) => { getMetadataObject(project, req.params.id) .then(() => res.status(204).end()) .catch(error => res.status(HttpStatusCodes.NOT_FOUND).json(error)); }); return app; }, };