generated from corrad-software/corrad-af-2024
82 lines
2.3 KiB
JavaScript
82 lines
2.3 KiB
JavaScript
import fileConfig from "./configuration.json";
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
try {
|
|
// read configuration file if it exists and return error if it doesn't
|
|
if (!fileConfig) {
|
|
return {
|
|
statusCode: 404,
|
|
message: "Configuration file not found",
|
|
};
|
|
}
|
|
|
|
// Get all tables with primary key
|
|
const tables = await getAllTableWithPK();
|
|
if (!tables) {
|
|
return {
|
|
statusCode: 500,
|
|
message: "Please check your database connection",
|
|
};
|
|
}
|
|
|
|
// Remove columnTypes [{"group": "Foreign Keys", "options": [{"label": "TABLE_NAME (COLUMN_NAME)", "value": "TABLE_NAME"}]}] from fileconfig before appending
|
|
fileConfig.columnTypes = fileConfig.columnTypes.filter(
|
|
(columnType) => columnType.group !== "Foreign Keys"
|
|
);
|
|
|
|
// Append columnTypes from fileconfig with tables
|
|
fileConfig.columnTypes.push({
|
|
...tables,
|
|
});
|
|
|
|
return {
|
|
statusCode: 200,
|
|
message: "Configuration file successfully loaded",
|
|
data: fileConfig,
|
|
};
|
|
} catch (error) {
|
|
console.log(error.message);
|
|
return {
|
|
statusCode: 500,
|
|
message: "Internal Server Error",
|
|
};
|
|
}
|
|
});
|
|
|
|
async function getAllTableWithPK() {
|
|
try {
|
|
const tables = await prisma.$queryRaw` SELECT
|
|
table_name,
|
|
column_name
|
|
FROM
|
|
information_schema.columns
|
|
WHERE table_schema = DATABASE()
|
|
AND column_key = 'PRI'`;
|
|
|
|
if (!tables) return false;
|
|
|
|
// Reformat to {group: "table_name", options: [{label: "TABLE_NAME (COLUMN_NAME)", value: "TABLE_NAME"}]}
|
|
const remapTables = tables.reduce((acc, table) => {
|
|
const group = "Foreign Keys";
|
|
const option = {
|
|
label: `${table.TABLE_NAME} (${table.COLUMN_NAME})`,
|
|
value: `[[${table.TABLE_NAME}]]`,
|
|
};
|
|
const existingGroup = acc.find((item) => item.group === group);
|
|
|
|
if (existingGroup) {
|
|
existingGroup.options.push(option);
|
|
} else {
|
|
acc.push({ group, options: [option] });
|
|
}
|
|
|
|
return acc;
|
|
}, []);
|
|
|
|
return remapTables[0];
|
|
} catch (error) {
|
|
console.log(error.message);
|
|
return false;
|
|
}
|
|
}
|