82 lines
2.2 KiB
TypeScript
82 lines
2.2 KiB
TypeScript
import serverError from "./serverError";
|
|
import createDbFromSchema from "../../shell/createDbFromSchema";
|
|
import grabSchemaFieldsFromData from "./grabSchemaFieldsFromData";
|
|
import {
|
|
grabPrimaryRequiredDbSchema,
|
|
writeUpdatedDbSchema,
|
|
} from "../../shell/createDbFromSchema/grab-required-database-schemas";
|
|
|
|
type Param = {
|
|
userId: number | string;
|
|
database: string;
|
|
newFields?: string[];
|
|
newPayload?: { [s: string]: any };
|
|
dbId: string | number;
|
|
};
|
|
|
|
/**
|
|
* # Add User Table to Database
|
|
*/
|
|
export default async function updateUsersTableSchema({
|
|
userId,
|
|
database,
|
|
newFields,
|
|
newPayload,
|
|
dbId,
|
|
}: Param): Promise<any> {
|
|
try {
|
|
const dbFullName = database;
|
|
|
|
let targetDatabase = grabPrimaryRequiredDbSchema({
|
|
dbId,
|
|
userId,
|
|
});
|
|
|
|
if (!targetDatabase) {
|
|
throw new Error("Couldn't Find Target Database!");
|
|
}
|
|
|
|
let existingTableIndex = targetDatabase?.tables.findIndex(
|
|
(table) => table.tableName === "users"
|
|
);
|
|
|
|
const usersTable = targetDatabase.tables[existingTableIndex];
|
|
|
|
if (!usersTable?.fields?.[0]) throw new Error("Users Table Not Found!");
|
|
|
|
const additionalFields = grabSchemaFieldsFromData({
|
|
fields: newFields,
|
|
data: newPayload,
|
|
});
|
|
|
|
const spliceStartIndex = usersTable.fields.findIndex(
|
|
(field) => field.fieldName === "date_created"
|
|
);
|
|
const finalSpliceStartIndex =
|
|
spliceStartIndex >= 0 ? spliceStartIndex : 0;
|
|
|
|
usersTable.fields.splice(finalSpliceStartIndex, 0, ...additionalFields);
|
|
|
|
writeUpdatedDbSchema({ dbSchema: targetDatabase, userId });
|
|
|
|
const dbShellUpdate = await createDbFromSchema({
|
|
userId,
|
|
targetDatabase: dbFullName,
|
|
});
|
|
|
|
return `Done!`;
|
|
} catch (error: any) {
|
|
global.ERROR_CALLBACK?.(
|
|
`Error Updating User Table Schema`,
|
|
error as Error
|
|
);
|
|
|
|
serverError({
|
|
component: "addUsersTableToDb",
|
|
message: error.message,
|
|
user: { id: userId },
|
|
});
|
|
return error.message;
|
|
}
|
|
}
|