// (C) 2007-2019 GoodData Corporation import { IUser } from "../../model/User"; import { get, first, partial } from "lodash"; import { ensureItems, ensureIdentifier } from "../helpers/objects"; import { objectUri, profileUri } from "../../route/routes"; import { IProject, getProjectId } from "../../model/Project"; import { webalize } from "../../utils/string"; import { IKpiAlert } from "../../model/KpiAlert"; import { ISchemaKpiAlert } from "../model/SchemaKpiAlert"; import { ISchema } from "../model/Schema"; import { createUsers } from "./UserBuilder"; import { createProject } from "./ProjectBuilder"; const createKpiAlertIdentifier = (kpiAlert: ISchemaKpiAlert) => `alert.${webalize(kpiAlert.kpiId)}.${webalize(kpiAlert.dashboardId)}`; function createKpiAlert(project: IProject, users: IUser[], kpiAlert: ISchemaKpiAlert): IKpiAlert { const author = profileUri(kpiAlert.author || first(users).identifier); const dashboardUri = objectUri(getProjectId(project), kpiAlert.dashboardId); const projectId = getProjectId(project); const identifier = ensureIdentifier(kpiAlert, createKpiAlertIdentifier(kpiAlert)); const filterContextTitle: string = get(kpiAlert, "filterContext.title"); const { kpiId, threshold, isTriggered, whenTriggered } = kpiAlert; return { content: { kpi: objectUri(projectId, kpiId), dashboard: dashboardUri, threshold, isTriggered, whenTriggered, filterContext: filterContextTitle ? objectUri(projectId, webalize(filterContextTitle)) : "", }, meta: { author, category: "kpiAlert", identifier, title: "kpi alert", uri: objectUri(projectId, identifier), }, }; } export function createKpiAlerts(schema: ISchema): IKpiAlert[] { const project = createProject(schema); const users = createUsers(schema); return ensureItems(schema.kpiAlerts).map(partial(createKpiAlert, project, users)); }