Skip to content

Commit

Permalink
database crud for records fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
delchev committed Nov 28, 2024
1 parent 31b71ea commit a00ec55
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 50 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { Controller, Get, Post, Put, Delete, response } from "sdk/http";
import { query } from "sdk/db";
import { update } from "sdk/db";

@Controller
class CRUDService {

@Get("/")
async getAll(req, res) {
const { schemaName, tableName } = req.body;
async getAllRows(filter) {
const { schemaName, tableName } = filter;

const sqlQuery = `
SELECT * FROM "${schemaName}"."${tableName}";
Expand All @@ -21,11 +22,11 @@ class CRUDService {
}

@Post("/create")
async create(req, res) {
const { schemaName, tableName, data } = req.body;
async createRow(record) {
const { schemaName, tableName, data } = record;

if (!entityName || !data) {
return res.status(400).send({ error: "Entity name and data are required" });
if (!schemaName || !tableName || !data) {
return res.status(400).send({ error: "Required 'schemaName', 'tableName' and 'data'" });
}

const columns = Object.keys(data);
Expand All @@ -39,63 +40,68 @@ class CRUDService {
`;

try {
query.execute(sqlQuery, values);
update.execute(sqlQuery, values);
res.send({ success: true });
} catch (error) {
res.status(500).send({ error: "Failed to create row", details: error });
}
}

@Put("/update")
async update(req, res) {
const { tableName, schemaName, data, primaryKey } = req.body;
debugger
if (!entityName || !data || !primaryKey) {
return res.status(400).send({ error: "Entity name, data, and primary key are required" });
async updateRow(record) {

const { schemaName, tableName, data, primaryKey } = record;

if (!schemaName || !tableName || !data || !primaryKey) {
return res.status(400).send({ error: "Required 'schemaName', 'tableName', 'data' and 'primaryKey'" });
}

const setClauses = [];
const parameters = [];
const whereClauses = [];
const keyValues = [];
const columnValues = [];

Object.keys(data).forEach((key) => {
if (!primaryKey.includes(key)) {
setClauses.push(`"${key}" = ?`);
parameters.push(data[key]);
columnValues.push(data[key]);
} else {
whereClauses.push(`"${key}" = ?`);
parameters.push(data[key]);
keyValues.push(data[key]);
}
});

const parameters = columnValues.concat(keyValues);

const sqlQuery = `
UPDATE "${schemaName}"."${tableName}"
SET ${setClauses.join(", ")}
WHERE ${whereClauses.join(" AND ")};
`;

try {
query.execute(sqlQuery, parameters);
update.execute(sqlQuery, parameters);
res.send({ success: true });
} catch (error) {
res.status(500).send({ error: "Failed to update row", details: error });
}
}

@Delete("/delete")
async delete(req, res) {
const { schemaName, tableName, primaryKey } = req.body;
@Post("/delete")
async deleteRow(keys) {

const { schemaName, tableName, data, primaryKey } = keys;

if (!entityName || !primaryKey) {
return res.status(400).send({ error: "Entity name and primary key are required" });
if (!schemaName || !tableName || !primaryKey) {
return res.status(400).send({ error: "Required 'schemaName', 'tableName' and 'primaryKey'" });
}

const whereClauses = [];
const parameters = [];

primaryKey.forEach((key) => {
whereClauses.push(`"${key}" = ?`);
parameters.push(req.body[key]);
parameters.push(data[key]);
});

const sqlQuery = `
Expand All @@ -104,7 +110,7 @@ class CRUDService {
`;

try {
query.execute(sqlQuery, parameters);
update.execute(sqlQuery, parameters);
res.send({ success: true });
} catch (error) {
res.status(500).send({ error: "Failed to delete row", details: error });
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ resultView.controller('DatabaseResultController', ['$scope', '$http', 'messageHu
$scope.isEditDialogOpen = true;
};

$scope.saveRow = function () {
$scope.confirmEdit = function () {
if (!$scope.selectedRow) {
console.error("No row selected for editing.");
return;
Expand Down Expand Up @@ -142,7 +142,7 @@ resultView.controller('DatabaseResultController', ['$scope', '$http', 'messageHu
data: $scope.selectedRow
};

$http.delete("/services/js/ide-result/js/crud.js/delete", requestBody)
$http.post("/services/js/ide-result/js/crud.js/delete", requestBody)
.then((response) => {
$scope.isDeleteDialogOpen = false;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,12 @@
</head>

<body class="dg-vbox">
<fd-toolbar dg-type="solid">
<fd-toolbar-spacer></fd-toolbar-spacer>
<fd-button dg-type="transparent" glyph="sap-icon--add" title="New" aria-label="Add New Record"
ng-click="createRow()" ng-show="columns">
</fd-button>
</fd-toolbar>
<fd-scrollbar class="dg-full-height" ng-hide="hasMultipleProcedureResults">
<fd-busy-indicator-extended class="dg-fill-parent" ng-hide="state.error || !state.isBusy" dg-size="l">
{{state.busyText}}
Expand All @@ -65,16 +71,10 @@
ng-show="columns" outer-borders="none" class="dg-list-border-bottom">
<thead fd-table-header sticky="true">
<tr fd-table-row>
<td fd-table-cell colspan="{{columns.length}}">
</td>
<td fd-table-cell style="text-align: right;">
<fd-button compact="true" glyph="sap-icon--add" dg-type="emphasized"
aria-label="Add New Record" ng-click="createRow()">+</fd-button>
</td>
</tr>
<tr fd-table-row>
<th fd-table-header-cell ng-repeat="column in columns">{{column}}</th>
<th fd-table-header-cell>Actions</th>
<th fd-table-header-cell ng-repeat="column in columns">
{{column}}
</th>
<th fd-table-header-cell style="text-align: center; width: 8em">Actions</th>
</tr>
</thead>
<tbody fd-table-body>
Expand All @@ -84,7 +84,7 @@
{{cell}}
</div>
</td>
<td fd-table-cell>
<td fd-table-cell style="text-align: center; width: 8em">
<fd-button compact="true" glyph="sap-icon--edit" dg-type="transparent" aria-label="Edit"
ng-click="editRow(row)">Edit</fd-button>
<fd-button compact="true" glyph="sap-icon--delete" dg-type="transparent" aria-label="Delete"
Expand Down Expand Up @@ -136,14 +136,26 @@
<h3>Edit Row</h3>
<form>
<div ng-repeat="(key, value) in selectedRow" ng-if="!key.toUpperCase().includes('ID')">
<label>{{key}}</label>
<input type="text" ng-model="selectedRow[key]" />
</div>
<div class="dialog-actions">
<fd-button dg-label="Save" dg-type="emphasized" ng-click="saveRow()">Save</fd-button>
<fd-button dg-label="Cancel" dg-type="transparent" ng-click="closeEditDialog()">Cancel
</fd-button>
<fd-form-group>
<fd-form-item>
<fd-form-label for="{{key}}" dg-colon="true" dg-required="true">{{key}}</fd-form-label>
<fd-input id="{{key}}" name="{{key}}" type="text" placeholder="Enter a {{key}}"
ng-model="selectedRow[key]" ng-required="true" ng-trim="false"></fd-input>
</fd-form-item>
</fd-form-group>
</div>
<fd-bar bar-design="footer">
<fd-bar-right>
<fd-bar-element>
<fd-button dg-label="Save" ng-click="confirmEdit()" dg-type="emphasized" compact="true">
</fd-button>
</fd-bar-element>
<fd-bar-element>
<fd-button dg-label="Cancel" ng-click="closeEditDialog()" dg-type="transparent"
compact="true"></fd-button>
</fd-bar-element>
</fd-bar-right>
</fd-bar>
</form>
</div>
</div>
Expand All @@ -164,14 +176,27 @@ <h3>Delete Row</h3>
<h3>Add New Row</h3>
<form>
<div ng-repeat="(key, value) in newRow">
<label>{{key}}</label>
<input type="text" ng-model="newRow[key]" />
</div>
<div class="dialog-actions">
<fd-button dg-label="Save" dg-type="emphasized" ng-click="confirmCreate()">Save</fd-button>
<fd-button dg-label="Cancel" dg-type="transparent" ng-click="closeCreateDialog()">Cancel
</fd-button>
<fd-form-group>
<fd-form-item>
<fd-form-label for="{{key}}" dg-colon="true" dg-required="true">{{key}}</fd-form-label>
<fd-input id="{{key}}" name="{{key}}" type="text" placeholder="Enter a {{key}}"
ng-model="newRow[key]" ng-required="true" ng-trim="false"></fd-input>
</fd-form-item>
</fd-form-group>
</div>
<fd-bar bar-design="footer">
<fd-bar-right>
<fd-bar-element>
<fd-button dg-label="Save" ng-click="confirmCreate()" dg-type="emphasized"
compact="true">
</fd-button>
</fd-bar-element>
<fd-bar-element>
<fd-button dg-label="Cancel" ng-click="closeCreateDialog()" dg-type="transparent"
compact="true"></fd-button>
</fd-bar-element>
</fd-bar-right>
</fd-bar>
</form>
</div>
</div>
Expand Down

0 comments on commit a00ec55

Please sign in to comment.