Skip to content

Commit

Permalink
fix: #OBS-I452 changed to single api with actions
Browse files Browse the repository at this point in the history
  • Loading branch information
JeraldJF committed Jan 16, 2025
1 parent 5079252 commit 2379c29
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 83 deletions.
46 changes: 0 additions & 46 deletions api-service/src/controllers/DatasetAlias/AttachAlias.ts

This file was deleted.

75 changes: 75 additions & 0 deletions api-service/src/controllers/DatasetAlias/DatasetAlias.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import { Request, Response } from "express";
import { schemaValidation } from "../../services/ValidationService";
import DatasetAliasSchema from "./DatasetAliasValidationSchema.json"
import { obsrvError } from "../../types/ObsrvError";
import _ from "lodash";
import { datasetService } from "../../services/DatasetService";
import { Op } from "sequelize";
import { Dataset } from "../../models/Dataset";
import { ResponseHandler } from "../../helpers/ResponseHandler";
import httpStatus from "http-status";


const validateRequest = async (req: Request) => {

const isRequestValid: Record<string, any> = schemaValidation(req.body, DatasetAliasSchema)
if (!isRequestValid.isValid) {
throw obsrvError("", "DATASET_ALIAS_INPUT_INVALID", isRequestValid.message, "BAD_REQUEST", 400)
}

const { dataset_id } = _.get(req, ["body", "request"])
const dataset = await datasetService.getDataset(dataset_id, ["id", "name", "alias"], true);
if (_.isEmpty(dataset)) {
throw obsrvError(dataset_id, "DATASET_NOT_EXISTS", `Dataset does not exists with id:${dataset_id}`, "NOT_FOUND", 404);
}
return dataset
}

const datasetAlias = async (req: Request, res: Response) => {
const dataset = await validateRequest(req)
const { dataset_id, action, alias_name } = _.get(req, ["body", "request"])
const userID = (req as any)?.userID;
switch (action) {
case "attach":
await attachAlias(dataset, alias_name, userID);
break;
case "detach":
await detachAlias(dataset, userID);
break;
}
ResponseHandler.successResponse(req, res, { status: httpStatus.OK, data: { message: `Dataset alias name '${alias_name || _.get(dataset, "alias")}' ${action}ed successfully`, dataset_id } });
}

const attachAlias = async (dataset:Record<string,any>, alias_name: string, userID: string) => {
await validateDatasetToAttach(dataset, alias_name);
await Dataset.update({ alias: alias_name, updated_by: userID }, { where: { id: _.get(dataset, "id") } });
}

const detachAlias = async (dataset: Record<string,any>, userID: string) => {
const alias_name = await validateDatasetToDetach(dataset);
await Dataset.update({ alias: null, updated_by: userID }, { where: { id: _.get(dataset, "id") } });
return alias_name;
}

const validateDatasetToAttach = async (dataset:Record<string,any>, alias: string) => {

const dataset_id = _.get(dataset, "id")
if (_.get(dataset, "alias")) {
throw obsrvError(dataset_id, "DATASET_ALIAS_EXISTS", `Dataset already has alias '${_.get(dataset, "alias")}' associated with it. Please detach the existing alias and try again`, "CONFLICT", 409);
}
const datasetList = await datasetService.findDatasets({ [Op.or]: [{ dataset_id: alias }, { name: alias }, { alias }] }, ["id"]);
const draftDatasetList = await datasetService.findDraftDatasets({ [Op.or]: [{ dataset_id: alias }, { name: alias }] }, ["id"]);
if (!(_.isEmpty(datasetList) && _.isEmpty(draftDatasetList))) {
throw obsrvError(dataset_id, "DATASET_ALIAS_NOT_UNIQUE", `Dataset alias must be unique. The alias '${alias}' cannot be the same as the dataset id, dataset name or alias name of any other dataset.`, "CONFLICT", 409);
}
}

const validateDatasetToDetach = async (dataset: Record<string,any>) => {
const dataset_id = _.get(dataset, "id")
if (!_.get(dataset, "alias")) {
throw obsrvError(dataset_id, "DATASET_ALIAS_NOT_EXISTS", `Dataset '${dataset_id}' does not have any alias associated with it`, "NOT_FOUND", 404);
}
return _.get(dataset, "alias")
}

export default datasetAlias;
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"id": {
"type": "string",
"enum": [
"api.datasets.alias.attach"
"api.datasets.alias"
]
},
"ver": {
Expand All @@ -28,17 +28,40 @@
"request": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"attach",
"detach"
]
},
"dataset_id": {
"type": "string"
},
"alias_name": {
"type": "string",
"minLength": 1
"type": "string"
}
},
"if": {
"properties": {
"action": {
"const": "attach"
}
}
},
"then": {
"properties": {
"alias_name": {
"minLength": 1
}
},
"required": [
"alias_name"
]
},
"required": [
"dataset_id",
"alias_name"
"action",
"dataset_id"
],
"additionalProperties": false
}
Expand Down
28 changes: 0 additions & 28 deletions api-service/src/controllers/DatasetAlias/DetachAlias.ts

This file was deleted.

6 changes: 2 additions & 4 deletions api-service/src/routes/Router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,10 @@ import { OperationType, telemetryAuditStart } from "../services/telemetry";
import telemetryActions from "../telemetry/telemetryActions";
import checkRBAC from "../middlewares/RBAC_middleware";
import connectorRegisterController from "../controllers/ConnectorRegister/ConnectorRegisterController";
import attachAlias from "../controllers/DatasetAlias/AttachAlias";
import detachAlias from "../controllers/DatasetAlias/DetachAlias";
import dataMetrics from "../controllers/DataMetrics/DataMetricsController";
import datasetMetrics from "../controllers/DatasetMetrics/DatasetMetricsController";
import { dataAnalyzePII } from "../controllers/DataAnalyzePII/DataAnalyzePIIController";
import datasetAlias from "../controllers/DatasetAlias/DatasetAlias";

export const router = express.Router();

Expand Down Expand Up @@ -64,8 +63,7 @@ router.post("/connectors/list", setDataToRequestObject("api.connectors.list"), o
router.get("/connectors/read/:id", setDataToRequestObject("api.connectors.read"), onRequest({entity: Entity.Management }), telemetryAuditStart({action: telemetryActions.readConnectors, operationType: OperationType.GET}), checkRBAC.handler(), ConnectorsRead);
router.post("/datasets/import", setDataToRequestObject("api.datasets.import"), onRequest({ entity: Entity.Management }), checkRBAC.handler(), DatasetImport);
router.post("/connector/register", setDataToRequestObject("api.connector.register"), onRequest({ entity: Entity.Management }), connectorRegisterController);
router.post("/datasets/alias/attach", setDataToRequestObject("api.datasets.alias.attach"), onRequest({ entity: Entity.Management }), checkRBAC.handler(), attachAlias);
router.delete("/datasets/alias/detach/:dataset_id", setDataToRequestObject("api.datasets.alias.detach"), onRequest({ entity: Entity.Management }), checkRBAC.handler(), detachAlias);
router.post("/datasets/alias", setDataToRequestObject("api.datasets.alias"), onRequest({ entity: Entity.Management }), checkRBAC.handler(), datasetAlias);
router.post("/data/analyze/pii", setDataToRequestObject("api.data.analyze.pii"), onRequest({ entity: Entity.Management }),checkRBAC.handler(), dataAnalyzePII);
//Wrapper Service
router.post("/obsrv/data/sql-query", setDataToRequestObject("api.obsrv.data.sql-query"), onRequest({ entity: Entity.Data_out }), checkRBAC.handler(), sqlQuery);
Expand Down

0 comments on commit 2379c29

Please sign in to comment.