fix
This commit is contained in:
parent
9debeedd0f
commit
3323a6d801
|
|
@ -33,6 +33,9 @@ export const execQuery = async (args: DBArg, prisma: any) => {
|
||||||
const schema_path = dir("app/db/prisma/schema.prisma");
|
const schema_path = dir("app/db/prisma/schema.prisma");
|
||||||
const schema = createPrismaSchemaBuilder(await readAsync(schema_path));
|
const schema = createPrismaSchemaBuilder(await readAsync(schema_path));
|
||||||
const schema_table = schema.findByType("model", { name: table });
|
const schema_table = schema.findByType("model", { name: table });
|
||||||
|
const tables = schema
|
||||||
|
.findAllByType("model", {})
|
||||||
|
.map((e) => e?.name) as string[];
|
||||||
|
|
||||||
if (schema_table) {
|
if (schema_table) {
|
||||||
let pks: Property[] = [];
|
let pks: Property[] = [];
|
||||||
|
|
@ -47,7 +50,7 @@ export const execQuery = async (args: DBArg, prisma: any) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const rels = getRels({ schema_table, schema, table });
|
const rels = getRels({ schema_table, schema, table, tables });
|
||||||
if (pks.length > 0) {
|
if (pks.length > 0) {
|
||||||
if (Object.keys(where.length > 0)) {
|
if (Object.keys(where.length > 0)) {
|
||||||
const select = {} as any;
|
const select = {} as any;
|
||||||
|
|
@ -236,8 +239,12 @@ export const execQuery = async (args: DBArg, prisma: any) => {
|
||||||
}
|
}
|
||||||
>;
|
>;
|
||||||
if (schema_table) {
|
if (schema_table) {
|
||||||
|
const tables = schema
|
||||||
|
.findAllByType("model", {})
|
||||||
|
.map((e) => e?.name) as string[];
|
||||||
|
|
||||||
if (action === "schema_rels") {
|
if (action === "schema_rels") {
|
||||||
return getRels({ schema_table, schema, table });
|
return getRels({ schema_table, schema, table, tables });
|
||||||
} else if (action === "schema_columns") {
|
} else if (action === "schema_columns") {
|
||||||
for (const col of schema_table.properties) {
|
for (const col of schema_table.properties) {
|
||||||
if (col.type === "field" && !col.array) {
|
if (col.type === "field" && !col.array) {
|
||||||
|
|
@ -264,13 +271,11 @@ export const execQuery = async (args: DBArg, prisma: any) => {
|
||||||
: type.toLowerCase(),
|
: type.toLowerCase(),
|
||||||
default: default_val,
|
default: default_val,
|
||||||
};
|
};
|
||||||
const c = columns[col.name];
|
|
||||||
if (c.type === c.db_type) {
|
|
||||||
delete columns[col.name];
|
|
||||||
console.log("schema_cols", attr);
|
|
||||||
}
|
}
|
||||||
}
|
} else if (
|
||||||
} else if (typeof col.fieldType === "string") {
|
typeof col.fieldType === "string" &&
|
||||||
|
!tables.includes(col.fieldType)
|
||||||
|
) {
|
||||||
columns[col.name] = {
|
columns[col.name] = {
|
||||||
is_pk: false,
|
is_pk: false,
|
||||||
type: col.fieldType.toLowerCase(),
|
type: col.fieldType.toLowerCase(),
|
||||||
|
|
@ -367,10 +372,12 @@ const getRels = ({
|
||||||
schema_table,
|
schema_table,
|
||||||
schema,
|
schema,
|
||||||
table,
|
table,
|
||||||
|
tables,
|
||||||
}: {
|
}: {
|
||||||
schema_table: any;
|
schema_table: any;
|
||||||
schema: any;
|
schema: ReturnType<typeof createPrismaSchemaBuilder>;
|
||||||
table: any;
|
table: any;
|
||||||
|
tables: string[];
|
||||||
}) => {
|
}) => {
|
||||||
const rels = {} as Record<
|
const rels = {} as Record<
|
||||||
string,
|
string,
|
||||||
|
|
@ -388,7 +395,9 @@ const getRels = ({
|
||||||
for (const col of schema_table.properties) {
|
for (const col of schema_table.properties) {
|
||||||
if (
|
if (
|
||||||
col.type === "field" &&
|
col.type === "field" &&
|
||||||
(!!col.array || (col.attributes && col.attributes?.length > 0))
|
(!!col.array ||
|
||||||
|
(col.attributes && col.attributes?.length > 0) ||
|
||||||
|
tables.includes(col.fieldType))
|
||||||
) {
|
) {
|
||||||
if (col.array) {
|
if (col.array) {
|
||||||
if (typeof col.fieldType === "string") {
|
if (typeof col.fieldType === "string") {
|
||||||
|
|
@ -443,6 +452,33 @@ const getRels = ({
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
const target = schema.findByType("model", {
|
||||||
|
name: col.fieldType,
|
||||||
|
});
|
||||||
|
if (target) {
|
||||||
|
const to = target.properties.find(
|
||||||
|
(e) => e.type === "field" && e.fieldType === table
|
||||||
|
);
|
||||||
|
if (to && to.type === "field" && (to.attributes?.length || 0) > 0) {
|
||||||
|
const rel = to.attributes?.find((e) => e.name === "relation");
|
||||||
|
if (rel) {
|
||||||
|
const { field, ref } = getFieldAndRef(rel, target, table);
|
||||||
|
|
||||||
|
rels[col.name] = {
|
||||||
|
type: "has-one",
|
||||||
|
to: {
|
||||||
|
table: field.table,
|
||||||
|
fields: ref.fields,
|
||||||
|
},
|
||||||
|
from: {
|
||||||
|
table: ref.table,
|
||||||
|
fields: field.fields,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue