Skip to content

Commit bee15c7

Browse files
committed
fixed update rows, adding rows, made it so that the schema/user shows up with the table and its not just public
1 parent 652f1c9 commit bee15c7

27 files changed

+336
-402
lines changed

server/controllers/helperFunctions/universal.helpers.ts

Lines changed: 62 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,6 @@ import { DataSource } from 'typeorm';
44

55
// HELPER FUNCTIONS FOR THE HELPER FUNCTIONS
66

7-
const tableNameFormat = async (req: Request, dbDataSource: DataSource) => {
8-
const { db_type, username } = req.session;
9-
const { tableName } = req.body;
10-
11-
let tableNameFormat = '';
12-
switch (db_type) {
13-
case 'oracle':
14-
tableNameFormat = `"${(username as string).toUpperCase()}"."${tableName}"`;
15-
break;
16-
case 'mssql':
17-
const schemaName: {[SchemaName: string]: string}[] = await dbDataSource.query(`SELECT SCHEMA_NAME() AS SchemaName;`);
18-
tableNameFormat = `${schemaName[0].SchemaName}.${tableName}`;
19-
break;
20-
default:
21-
tableNameFormat = tableName;
22-
break;
23-
};
24-
return tableNameFormat;
25-
};
26-
277
interface NewColumn {
288
name: string,
299
type: string,
@@ -113,28 +93,28 @@ export const dbConnect = async (req: Request) => {
11393
//-------------------------------------DATA TABLE ROWS----------------------------------------------------------------------------------------
11494
//-------------------ADD NEW ROW-----------------------------------------------------------------------------------------
11595

116-
export const addNewDbRow: RequestHandler = async (req: Request, _res: Response, next: NextFunction,) => {
96+
export const addNewDbRow: RequestHandler = async (req: Request, res: Response, next: NextFunction,) => {
11797
const dbDataSource = await dbConnect(req);
11898
const { db_type } = req.session;
119-
const { newRow } = req.body;
99+
const { newRow, tableName } = req.body;
120100

121101
try{
122-
// const tableNameAdd: string = db_type === 'oracle' ? `"${(username as string).toUpperCase()}"."${tableName}"` : tableName;
123-
const tableNameAdd = await Promise.resolve(tableNameFormat(req, dbDataSource));
124-
const newSqlRow: {[key: string]: string} = newRow as {};
102+
const keys: string = db_type === 'oracle' ? Object.keys(newRow).map(key => `"${key}"`).join(", ") : Object.keys(newRow).join(", ");
103+
const values: string = Object.values(newRow).map(val => `'${val}'`).join(", ");
125104

126-
const keys: string = db_type === 'oracle' ? Object.keys(newSqlRow).map(key => `"${key}"`).join(", ") : Object.keys(newSqlRow).join(", ");
127-
const values: string = Object.values(newSqlRow).map(val => `'${val}'`).join(", ");
105+
console.log('tablename: ', tableName)
106+
console.log('keys: ', keys)
107+
console.log('values: ', values)
128108

129109
const dbAddedRow: Promise<unknown> = await dbDataSource.query(`
130-
INSERT INTO ${tableNameAdd} (${keys})
110+
INSERT INTO ${tableName} (${keys})
131111
VALUES (${values})
132112
`);
133113

134114
await dbDataSource.destroy();
135115
console.log('Database has been disconnected');
136116
console.log('dbAddedRow in helper: ', dbAddedRow);
137-
return dbAddedRow;
117+
return;
138118

139119
} catch (err: unknown) {
140120
console.log('Error occurred in the addNewDbRow middleware: ', err);
@@ -148,26 +128,11 @@ export const addNewDbRow: RequestHandler = async (req: Request, _res: Response,
148128

149129
export const updateRow: RequestHandler = async (req: Request, _res: Response, next: NextFunction,) => {
150130
const dbDataSource = await dbConnect(req);
151-
const { db_type, username } = req.session;
131+
const { db_type } = req.session;
152132
const { newRow, tableName, primaryKey } = req.body;
153133

154134
try{
155-
let tableNameUpdate = '';
156-
switch (db_type) {
157-
case 'oracle':
158-
tableNameUpdate = `"${(username as string).toUpperCase()}"."${tableName}"`;
159-
break;
160-
case 'mssql':
161-
const schemaName: {[SchemaName: string]: string}[] = await dbDataSource.query(`SELECT SCHEMA_NAME() AS SchemaName;`);
162-
tableNameUpdate = `${schemaName[0].SchemaName}.${tableName}`;
163-
break;
164-
default:
165-
tableNameUpdate = tableName;
166-
break;
167-
};
168-
169-
//const tableNameUpdate = await Promise.resolve(tableNameFormat(req, dbDataSource));
170-
135+
console.log('req.body: ', req.body)
171136
const updateKeys = Object.keys(newRow);
172137
const updateValues = Object.values(newRow);
173138
let oracleKeyValueString = '';
@@ -177,18 +142,31 @@ export const updateRow: RequestHandler = async (req: Request, _res: Response, ne
177142

178143
const keyValueString = oracleKeyValueString.replace(/"/g, '');
179144

180-
const primaryKeyName = Object.keys(primaryKey);
181-
const primaryKeyValue = Object.values(primaryKey);
145+
if (primaryKey) {
146+
147+
const primaryKeyName = Object.keys(primaryKey);
148+
const primaryKeyValue = Object.values(primaryKey);
149+
const dbUpdatedRow = await dbDataSource.query(`
150+
UPDATE ${tableName}
151+
SET ${db_type === 'oracle' ? oracleKeyValueString : keyValueString }
152+
WHERE ${db_type === 'oracle' ? `"${primaryKeyName}"` : primaryKeyName} = ${db_type === 'oracle' || db_type === 'mysql' ? `'${primaryKeyValue}'` : primaryKeyValue}
153+
`);
154+
155+
await dbDataSource.destroy();
156+
console.log('Database has been disconnected');
157+
return dbUpdatedRow;
158+
159+
} else {
182160

183-
const dbUpdatedRow = await dbDataSource.query(`
184-
UPDATE ${tableNameUpdate}
161+
const dbUpdatedRow = await dbDataSource.query(`
162+
UPDATE ${tableName}
185163
SET ${db_type === 'oracle' ? oracleKeyValueString : keyValueString }
186-
WHERE ${db_type === 'oracle' ? `"${primaryKeyName}"` : primaryKeyName} = ${db_type === 'oracle' || db_type === 'mysql' ? `'${primaryKeyValue}'` : primaryKeyValue}
187-
`);
164+
`);
188165

189-
await dbDataSource.destroy();
190-
console.log('Database has been disconnected');
191-
return dbUpdatedRow;
166+
await dbDataSource.destroy();
167+
console.log('Database has been disconnected');
168+
return dbUpdatedRow;
169+
};
192170

193171
} catch (err: unknown) {
194172
console.log('Error occurred in the updatedRow middleware: ', err);
@@ -203,11 +181,9 @@ export const updateRow: RequestHandler = async (req: Request, _res: Response, ne
203181
export const deleteRow: RequestHandler = async (req: Request, _res: Response, next: NextFunction,) => {
204182
const dbDataSource = await dbConnect(req);
205183
const { db_type } = req.session;
206-
const { value } = req.body
184+
const { value, tableName } = req.body
207185

208186
try{
209-
const tableNameDelete = await Promise.resolve(tableNameFormat(req, dbDataSource));
210-
211187
const deleteEntries = Object.entries(value).filter(([_key, value]) => value !== null);
212188
const deleteKeys = deleteEntries.map(([key, _value]) => key);
213189
const deleteValues = deleteEntries.map(([_key, value]) => value);
@@ -219,7 +195,7 @@ export const deleteRow: RequestHandler = async (req: Request, _res: Response, ne
219195
const keyValueString = oracleKeyValueString.replace(/"/g, '');
220196

221197
await dbDataSource.query(`
222-
DELETE FROM ${tableNameDelete}
198+
DELETE FROM ${tableName}
223199
WHERE ${db_type === 'oracle' ? oracleKeyValueString : keyValueString }
224200
`)
225201

@@ -241,27 +217,24 @@ export const deleteRow: RequestHandler = async (req: Request, _res: Response, ne
241217
export const addNewDbColumn: RequestHandler = async (req: Request, _res: Response, next: NextFunction,) => {
242218
const dbDataSource = await dbConnect(req);
243219
const { db_type } = req.session;
244-
const { columnData } = req.body;
220+
const { columnData, tableName } = req.body;
245221
console.log('req.body: ', req.body)
246222

247223
try{
248-
const tableNameAddColumn = await Promise.resolve(tableNameFormat(req, dbDataSource));
249-
console.log('tableNameAddColumn: ', tableNameAddColumn)
250-
251224
let keyValueString: string = '';
252225
let newColumnString: string = ''
253226

254227
columnData.forEach((el: NewColumn) => {
255228
if (db_type === 'mssql') {
256-
keyValueString += `ALTER TABLE ${tableNameAddColumn} ADD "${el.name}" ${el.type === 'AUTO_INCREMENT' ? 'INT' : el.type}${el.isPrimary ? ' PRIMARY KEY' : ''}${el.isNullable ? '' : ' NOT NULL'}${el.defaultValue ? ` DEFAULT ${el.defaultValue}` : ''}${el.type === 'AUTO_INCREMENT' ? ' AUTO_INCREMENT' : ''}; `
229+
keyValueString += `ALTER TABLE ${tableName} ADD "${el.name}" ${el.type === 'AUTO_INCREMENT' ? 'INT' : el.type}${el.isPrimary ? ' PRIMARY KEY' : ''}${el.isNullable ? '' : ' NOT NULL'}${el.defaultValue ? ` DEFAULT ${el.defaultValue}` : ''}${el.type === 'AUTO_INCREMENT' ? ' AUTO_INCREMENT' : ''}; `
257230
} else if(db_type === 'oracle') {
258231
let number: string = '';
259232
if (el.type.includes('VARCHAR')) {
260233
const regex = /\((\d+)\)/;
261234
const match = el.type.match(regex)
262235
number = (match as RegExpMatchArray)[1]
263236
}
264-
keyValueString += `ALTER TABLE ${tableNameAddColumn} ADD(${el.name} ${el.type.includes('VARCHAR') ? `VARCHAR2(${+number})` : el.type}${el.isPrimary ? ' PRIMARY KEY' : ''}${el.isNullable ? '' : ' NOT NULL'}${el.defaultValue ? ` DEFAULT ${el.defaultValue}` : ''}${el.type === 'AUTO_INCREMENT' ? ' AUTO_INCREMENT' : ''}))`
237+
keyValueString += `ALTER TABLE ${tableName} ADD(${el.name} ${el.type.includes('VARCHAR') ? `VARCHAR2(${+number})` : el.type}${el.isPrimary ? ' PRIMARY KEY' : ''}${el.isNullable ? '' : ' NOT NULL'}${el.defaultValue ? ` DEFAULT ${el.defaultValue}` : ''}${el.type === 'AUTO_INCREMENT' ? ' AUTO_INCREMENT' : ''}))`
265238
} else {
266239
keyValueString += `ADD${db_type === 'postgres' ? ' COLUMN' : '' } ${ db_type === 'mysql' ? `${el.name}` : `"${el.name}"`} ${el.type === 'AUTO_INCREMENT' ? 'INT' : el.type}${el.isPrimary ? ' PRIMARY KEY' : ''}${el.isNullable ? '' : ' NOT NULL'}${el.defaultValue ? ` DEFAULT ${el.defaultValue}` : ''}${el.type === 'AUTO_INCREMENT' ? ' AUTO_INCREMENT' : ''}, `
267240
};
@@ -284,7 +257,7 @@ export const addNewDbColumn: RequestHandler = async (req: Request, _res: Respons
284257
return addedNewColumn;
285258
} else {
286259
const addedNewColumn: Promise<unknown> = await dbDataSource.query(`
287-
ALTER TABLE ${tableNameAddColumn}
260+
ALTER TABLE ${tableName}
288261
${newColumnString}
289262
`);
290263

@@ -302,27 +275,21 @@ export const addNewDbColumn: RequestHandler = async (req: Request, _res: Respons
302275
};
303276

304277
//-----------------UPDATE COLUMN---------------------------------------------------------------------------------------------
305-
278+
//Currently Does not work
306279
export const updateDbColumn: RequestHandler = async (req: Request, _res: Response, next: NextFunction,) => {
307280
const dbDataSource = await dbConnect(req);
308281
const { db_type } = req.session;
309-
const { columnName, schemaData, columnData } = req.body;
282+
const { columnName, schemaData, columnData, tableName } = req.body;
310283

311284
try{
312-
const tableNameUpdateColumn = await Promise.resolve(tableNameFormat(req, dbDataSource));
313-
console.log('schemaData: ', schemaData)
314-
console.log('columnData: ', columnData)
315-
316-
317285
await dbDataSource.query(`
318-
UPDATE ${tableNameUpdateColumn}
286+
UPDATE ${tableName}
319287
${db_type === 'postgres' || db_type === 'microsoft' ? 'ALTER COLUMN' : 'MODIFY' } "${columnName}" ${db_type} ${ columnData.additional_constraint ? columnData.additional_constraint : ''};
320288
`);
321289

322290
dbDataSource.destroy();
323291
console.log('Database has been disconnected');
324-
// console.log('addedForeignKey in helper: ', updatedColumn);
325-
// return updatedColumn;
292+
return;
326293

327294
} catch (err: unknown) {
328295
console.log('Error occurred in the addedForeignKey middleware: ', err);
@@ -337,13 +304,11 @@ export const updateDbColumn: RequestHandler = async (req: Request, _res: Respons
337304
export const deleteColumn: RequestHandler = async (req: Request, _res: Response, next: NextFunction,) => {
338305
const dbDataSource = await dbConnect(req)
339306
const { db_type } = req.session
340-
const { columnName } = req.body
341-
console.log('we are in the helper functions: ', req.body)
342-
try{
343-
const columnTableNameDelete = await Promise.resolve(tableNameFormat(req, dbDataSource));
307+
const { columnName, tableName } = req.body
344308

309+
try{
345310
const deletedColumn: Promise<unknown> = await dbDataSource.query(`
346-
ALTER TABLE ${columnTableNameDelete}
311+
ALTER TABLE ${tableName}
347312
DROP${db_type !== 'mysql' ? ' COLUMN' : ''} ${columnName}
348313
`)
349314

@@ -365,24 +330,21 @@ console.log('we are in the helper functions: ', req.body)
365330

366331
export const addNewTable: RequestHandler = async (req: Request, _res: Response, next: NextFunction,) => {
367332
const dbDataSource = await dbConnect(req)
368-
const { newColumns } = req.body
369-
370-
try{
371-
const tableNameNewTable = await Promise.resolve(tableNameFormat(req, dbDataSource));
372-
333+
const { newColumns, tableName } = req.body
373334

374-
let keyValueString: string = '';
375-
newColumns.forEach((el: NewColumn) => {
376-
keyValueString += `${el.name} ${el.type}${el.isPrimary ? ' PRIMARY KEY' : ''}${el.isNullable ? '' : ' NOT NULL'}, `
377-
});
335+
try{
336+
let keyValueString: string = '';
337+
newColumns.forEach((el: NewColumn) => {
338+
keyValueString += `${el.name} ${el.type}${el.isPrimary ? ' PRIMARY KEY' : ''}${el.isNullable ? '' : ' NOT NULL'}, `
339+
});
378340

379-
const newTableColumnString: string = keyValueString.slice(0, -2);
341+
const newTableColumnString: string = keyValueString.slice(0, -2);
380342

381-
await dbDataSource.query(`
382-
CREATE TABLE ${tableNameNewTable} (
383-
${newTableColumnString}
384-
)`
385-
);
343+
await dbDataSource.query(`
344+
CREATE TABLE ${tableName} (
345+
${newTableColumnString}
346+
)`
347+
);
386348

387349
await dbDataSource.destroy();
388350
console.log('Database has been disconnected');
@@ -461,24 +423,9 @@ export const getTableNames: RequestHandler = async (req: Request, res: Response,
461423
export const deleteTable: RequestHandler = async (req: Request, _res: Response, next: NextFunction,) => {
462424
const dbDataSource = await dbConnect(req);
463425
const { db_type, username } = req.session;
426+
const { tableName } = req.body
464427

465428
try{
466-
const deleteTableData: {[key: string]: string } = req.body;
467-
468-
let tableName = '';
469-
switch (db_type) {
470-
case 'oracle':
471-
tableName = `"${(username as string).toUpperCase()}"."${deleteTableData.tableName}"`;
472-
break;
473-
case 'mssql':
474-
const schemaName: {[SchemaName: string]: string}[] = await dbDataSource.query(`SELECT SCHEMA_NAME() AS SchemaName;`);
475-
tableName = `${schemaName[0].SchemaName}.${deleteTableData.tableName}`;
476-
break;
477-
default:
478-
tableName = deleteTableData.tableName;
479-
break;
480-
};
481-
482429
const deletedTable: Promise<unknown> = await dbDataSource.query(`DROP TABLE ${tableName}`)
483430

484431
dbDataSource.destroy();
@@ -556,14 +503,12 @@ export const addForeignKey: RequestHandler = async (req: Request, _res: Response
556503
export const removeForeignKey: RequestHandler = async (req: Request, _res: Response, next: NextFunction,) => {
557504
const dbDataSource = await dbConnect(req);
558505
const { db_type } = req.session;
506+
const { tableName, constraintName } = req.body
559507

560508
try{
561-
const removeForeignKeyTableName = await Promise.resolve(tableNameFormat(req, dbDataSource));
562-
const removeForeignKeyData: {[key: string]: string } = req.body;
563-
564509
const removedForeignKey: Promise<unknown> = await dbDataSource.query(`
565-
ALTER TABLE ${removeForeignKeyTableName}
566-
DROP ${db_type === 'mysql' ? 'FOREIGN KEY' : 'CONSTRAINT'} ${removeForeignKeyData.constraintName}
510+
ALTER TABLE ${tableName}
511+
DROP ${db_type === 'mysql' ? 'FOREIGN KEY' : 'CONSTRAINT'} ${constraintName}
567512
`);
568513

569514
dbDataSource.destroy();

0 commit comments

Comments
 (0)