diff --git a/src/meta/api/endpoint/ApiEndPoint.ts b/src/meta/api/endpoint/ApiEndPoint.ts index fc049ae05c..b418954dcf 100644 --- a/src/meta/api/endpoint/ApiEndPoint.ts +++ b/src/meta/api/endpoint/ApiEndPoint.ts @@ -113,6 +113,10 @@ export const ApiEndPoint = { }, }, + DataQuery: { + one: () => apiPath('data-query'), + }, + ExtData: { Taxa: { search: () => apiPath('ext-data', 'taxa', 'search'), diff --git a/src/server/api/api.ts b/src/server/api/api.ts index eefe382092..0666c929ce 100644 --- a/src/server/api/api.ts +++ b/src/server/api/api.ts @@ -1,5 +1,6 @@ import { Express } from 'express' +import { DataQueryApi } from 'server/api/dataQuery' import { ExtDataApi } from 'server/api/extData' import { AdminApi } from './admin' @@ -27,6 +28,7 @@ export const Api = { AdminApi.init(express) AreaApi.init(express) CycleDataApi.init(express) + DataQueryApi.init(express) DefinitionApi.init(express) ExtDataApi.init(express) FileApi.init(express) diff --git a/src/server/api/dataQuery/getDashboardItems.ts b/src/server/api/dataQuery/getDashboardItems.ts new file mode 100644 index 0000000000..1234e46107 --- /dev/null +++ b/src/server/api/dataQuery/getDashboardItems.ts @@ -0,0 +1,22 @@ +import { Response } from 'express' + +import { CycleRequest } from 'meta/api/request' + +import { AssessmentController } from 'server/controller/assessment' +import { DataQueryController } from 'server/controller/dataQuery' +import Requests from 'server/utils/requests' + +type Query = { query: string; limit: string } + +export const getDashboardItems = async (req: CycleRequest, res: Response) => { + try { + const { assessmentName, cycleName } = req.query + + const { assessment, cycle } = await AssessmentController.getOneWithCycle({ assessmentName, cycleName }) + + const result = await DataQueryController.getMany({ assessment, cycle }) + Requests.send(res, result) + } catch (e) { + Requests.sendErr(res, e) + } +} diff --git a/src/server/api/dataQuery/index.ts b/src/server/api/dataQuery/index.ts new file mode 100644 index 0000000000..ad23f032c8 --- /dev/null +++ b/src/server/api/dataQuery/index.ts @@ -0,0 +1,11 @@ +import { Express } from 'express' + +import { ApiEndPoint } from 'meta/api/endpoint' + +import { getDashboardItems } from './getDashboardItems' + +export const DataQueryApi = { + init: (express: Express): void => { + express.get(ApiEndPoint.DataQuery.one(), getDashboardItems) + }, +} diff --git a/src/server/controller/dataQuery/index.ts b/src/server/controller/dataQuery/index.ts new file mode 100644 index 0000000000..aff50ffe89 --- /dev/null +++ b/src/server/controller/dataQuery/index.ts @@ -0,0 +1,5 @@ +import { DataQueryRepository } from 'server/repository/dataQuery' + +export const DataQueryController = { + getMany: DataQueryRepository.getMany, +} diff --git a/src/server/repository/dataQuery/getMany.ts b/src/server/repository/dataQuery/getMany.ts new file mode 100644 index 0000000000..7b1276546e --- /dev/null +++ b/src/server/repository/dataQuery/getMany.ts @@ -0,0 +1,19 @@ +import { Assessment, Cycle } from 'meta/assessment' +import { DashboardItem, DashboardItemType } from 'meta/dashboard' +import { NodeExtType } from 'meta/nodeExt' + +import { BaseProtocol, DB, Schemas } from 'server/db' + +type Props = { assessment: Assessment; cycle: Cycle } + +export const getMany = async ( + props: Props, + client: BaseProtocol = DB +): Promise>> => { + const { assessment, cycle } = props + const schemaCycle = Schemas.getNameCycle(assessment, cycle) + + return client.many>(`select value from ${schemaCycle}.node_ext where type = $1`, [ + NodeExtType.dataQuery, + ]) +} diff --git a/src/server/repository/dataQuery/index.ts b/src/server/repository/dataQuery/index.ts new file mode 100644 index 0000000000..e0a521d324 --- /dev/null +++ b/src/server/repository/dataQuery/index.ts @@ -0,0 +1,5 @@ +import { getMany } from 'server/repository/dataQuery/getMany' + +export const DataQueryRepository = { + getMany, +}