datasquirel/package-shared/shell/createDbFromSchema/grab-all-user-db-schemas.ts
2025-12-27 16:06:23 +01:00

73 lines
2.0 KiB
TypeScript

import fs from "fs";
import path from "path";
import grabDirNames from "../../utils/backend/names/grab-dir-names";
import EJSON from "../../utils/ejson";
import { DSQL_DatabaseSchemaType } from "../../types";
import numberfy from "../../utils/numberfy";
import _ from "lodash";
import uniqueByKey from "../../utils/unique-by-key";
type Params = {
userId: string | number | null;
parentDbId?: number | string | null;
parentTableId?: number | string | null;
};
/**
* # Grab All Database Schemas from Directory
* @param params
* @returns
*/
export default function grabAllDbSchemas({
userId,
parentDbId,
parentTableId,
}: Params): DSQL_DatabaseSchemaType[] | undefined {
try {
let dbSchemas: DSQL_DatabaseSchemaType[] = [];
const { targetUserPrivateDir } = grabDirNames({
userId,
});
if (!targetUserPrivateDir) {
console.log(`targetUserPrivateDir not found!`);
return undefined;
}
const dbSchemasFiles = fs.readdirSync(targetUserPrivateDir);
for (let i = 0; i < dbSchemasFiles.length; i++) {
try {
const dbSchemaFile = dbSchemasFiles[i];
const fullPath = path.join(targetUserPrivateDir, dbSchemaFile);
const json = fs.readFileSync(fullPath, "utf-8");
const dbSchema = EJSON.parse(json) as
| DSQL_DatabaseSchemaType
| undefined;
if (!dbSchema) {
continue;
}
if (parentDbId) {
const isDbChild =
numberfy(dbSchema.childDatabaseDbId) ==
numberfy(parentDbId);
if (isDbChild) {
dbSchemas.push(dbSchema);
}
continue;
}
dbSchemas.push(dbSchema);
} catch (error) {}
}
return dbSchemas;
} catch (error) {
return undefined;
}
}