From 084675a811d524d504cd87baf966c5ff8866b3a1 Mon Sep 17 00:00:00 2001 From: Rizky Date: Thu, 7 Mar 2024 16:28:15 +0700 Subject: [PATCH] wip fix --- bun.lockb | Bin 137833 -> 140946 bytes package.json | 1 + pkgs/api/_dbs.ts | 5 +- pkgs/server/create.ts | 6 ++ pkgs/utils/global.ts | 3 + pkgs/utils/query.ts | 149 +++++++++++++++++++++++++++++++++++++++++- 6 files changed, 160 insertions(+), 4 deletions(-) diff --git a/bun.lockb b/bun.lockb index 46934e63870bacaea0d159be5a15a102ed7aaf05..fb92a69aca17013c1c191cca0cf0abfbedd763ee 100755 GIT binary patch delta 23174 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 { await scan(dir(`app/srv/api`)); await scan(dir(`pkgs/api`)); + g.createServer = (arg) => { + return async (site_id: string) => { + return arg; + }; + }; + g.server = Bun.serve({ port: g.port, maxRequestBodySize: 1024 * 1024 * 128, diff --git a/pkgs/utils/global.ts b/pkgs/utils/global.ts index 303b1c7..dc546dc 100644 --- a/pkgs/utils/global.ts +++ b/pkgs/utils/global.ts @@ -70,6 +70,9 @@ export const g = global as unknown as { br: Record; br_timeout: Set; }; + createServer: ( + arg: PrasiServer & { api: any; db: any } + ) => (site_id: string) => Promise; deploy: { init: boolean; raw: any; diff --git a/pkgs/utils/query.ts b/pkgs/utils/query.ts index 76d4801..3dce3b5 100644 --- a/pkgs/utils/query.ts +++ b/pkgs/utils/query.ts @@ -1,4 +1,7 @@ +import { createPrismaSchemaBuilder } from "@mrleebo/prisma-ast"; +import { readAsync } from "fs-jetpack"; import { Prisma } from "../../app/db/db"; +import { dir } from "./dir"; export type DBArg = { db: string; @@ -10,7 +13,125 @@ export type DBArg = { export const execQuery = async (args: DBArg, prisma: any) => { const { table, action, params } = args; - console.log(args); + if (action.startsWith("schema_")) { + const schema_path = dir("app/db/prisma/schema.prisma"); + const schema = createPrismaSchemaBuilder(await readAsync(schema_path)); + if (action === "schema_tables") { + const tables = schema.findAllByType("model", {}).map((e) => e?.name); + return tables || []; + } else { + const schema_table = schema.findByType("model", { name: table }); + const columns = {} as Record< + string, + { + is_pk: boolean; + type: string; + optional: boolean; + db_type: string; + default?: any + } + >; + const rels = {} as Record + if (schema_table) { + if (action === "schema_rels") { + for (const col of schema_table.properties) { + if ( + col.type === "field" && + (!!col.array || + col.attributes && + col.attributes?.length > 0) + ) { + if (col.array) { + if (typeof col.fieldType === 'string') { + const target = schema.findByType('model', { name: col.fieldType }) + + if (target) { + const field = target.properties.find(e => { + if (e.type === 'field' + && e.fieldType === table) { + return true; + } + }); + if (field && field.type === 'field') { + const rel = field.attributes?.find(e => e.kind === 'field'); + + if (rel && rel.args) { + const { field, ref } = getFieldAndRef(rel, target, table); + + if (target && ref) { + rels[col.name] = { + type: 'has-many', + to: field, + from: ref + } + } + + } + } + } + } + } else if (col.attributes) { + const rel = col.attributes.find(e => e.type === 'attribute' && e.name === 'relation'); + if (rel && typeof col.fieldType === 'string') { + const target = schema.findByType('model', { name: col.fieldType }); + 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 + } + } + } + } + } + } + return rels; + } else if (action === "schema_columns") { + for (const col of schema_table.properties) { + if ( + col.type === "field" && + !col.array && + col.attributes && + col.attributes?.length > 0 + ) { + const attr = col.attributes.find(e => e.name !== 'id' && e.name !== 'default'); + + const default_val = col.attributes.find(e => e.name === 'default'); + const is_pk = col.attributes.find(e => e.name === 'id'); + + if (attr && attr.name !== "relation") { + let type = "String"; + if (typeof col.fieldType === "string") type = col.fieldType; + + columns[col.name] = { + is_pk: !!is_pk, + type: type.toLowerCase(), + optional: !!col.optional, + db_type: attr.name, + default: default_val + }; + } + } + } + return columns; + } + } + } + } const tableInstance = prisma[table]; @@ -42,3 +163,29 @@ export const execQuery = async (args: DBArg, prisma: any) => { } } }; + +const getFieldAndRef = (rel: any, target: any, table: string) => { + let field = null as unknown as { table: string, fields: string[] }; + let ref = null as unknown as { table: string, fields: string[] }; + for (const e of rel.args) { + if (typeof e.value === 'object' + && !Array.isArray(e.value) + && e.value.type === 'keyValue' + && typeof e.value.value === 'object' + && !Array.isArray(e.value.value) + && e.value.value.type === 'array') { + if (e.value.key === 'fields') { + field = { + table: target.name, + fields: e.value.value.args + } + } else if (e.value.key === 'references') { + ref = { + table: table, + fields: e.value.value.args + } + } + } + } + return { field, ref }; +} \ No newline at end of file