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 { 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; } }