storemw-core-api 1.0.163 → 1.0.165
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/index.d.ts +2 -0
- package/dist/lib/index.js +5 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/model_factory/ModelFactory.d.ts +7 -6
- package/dist/lib/model_factory/ModelFactory.js +595 -197
- package/dist/lib/model_factory/ModelFactory.js.map +1 -1
- package/dist/lib/query_builder/queryBuilder.d.ts +1 -1
- package/dist/lib/query_builder/queryBuilder.js +66 -15
- package/dist/lib/query_builder/queryBuilder.js.map +1 -1
- package/dist/lib/query_builder/queryDocumentProfile.d.ts +7 -0
- package/dist/lib/query_builder/queryDocumentProfile.js +87 -0
- package/dist/lib/query_builder/queryDocumentProfile.js.map +1 -0
- package/dist/lib/query_builder/queryUserBranch.d.ts +10 -0
- package/dist/lib/query_builder/queryUserBranch.js +31 -0
- package/dist/lib/query_builder/queryUserBranch.js.map +1 -0
- package/dist/models/access_control/AccessControlRoleModel.d.ts +4 -5
- package/dist/models/access_control/AccessControlRolePolicyModel.d.ts +4 -5
- package/dist/models/access_control/AccessControlUserRoleModel.d.ts +4 -5
- package/dist/models/account/AccountModel.d.ts +4 -5
- package/dist/models/auth/AccessKeyModel.d.ts +4 -5
- package/dist/models/branch/UserBranchModel.d.ts +4 -5
- package/dist/models/branch_user/BranchUserModel.d.ts +4 -5
- package/dist/models/business/BusinessModel.d.ts +4 -5
- package/dist/models/document/DocumentAmountModel.d.ts +4 -5
- package/dist/models/document/DocumentDocumentModel.d.ts +4 -5
- package/dist/models/document/DocumentItemModel.d.ts +4 -5
- package/dist/models/document/DocumentLocationModel.d.ts +4 -5
- package/dist/models/document/DocumentModel.d.ts +4 -5
- package/dist/models/document/DocumentPaymentModel.d.ts +4 -5
- package/dist/models/document/DocumentProfileModel.d.ts +4 -5
- package/dist/models/document/DocumentTotalModel.d.ts +4 -5
- package/dist/models/file/FileModel.d.ts +4 -5
- package/dist/models/group/GroupModel.d.ts +4 -5
- package/dist/models/group/GroupOwnerModel.d.ts +4 -5
- package/dist/models/injection_field/DocumentInjectionFieldModel.d.ts +4 -5
- package/dist/models/injection_field/InjectionFieldModel.d.ts +4 -5
- package/dist/models/injection_field/ItemInjectionFieldModel.d.ts +4 -5
- package/dist/models/injection_field/LogisticInjectionFieldModel.d.ts +4 -5
- package/dist/models/injection_field/RepositoryInjectionFieldModel.d.ts +4 -5
- package/dist/models/injection_field/UserInjectionFieldModel.d.ts +4 -5
- package/dist/models/item/BrandModel.d.ts +4 -5
- package/dist/models/item/CategoryModel.d.ts +4 -5
- package/dist/models/item/ItemModel.d.ts +4 -5
- package/dist/models/item/ProductModel.d.ts +4 -5
- package/dist/models/item/UomModel.d.ts +4 -5
- package/dist/models/location/LocationModel.d.ts +4 -5
- package/dist/models/location/LocationRackModel.d.ts +4 -5
- package/dist/models/location/LocationSlotModel.d.ts +4 -5
- package/dist/models/others/NumberDateSequenceModel.d.ts +4 -5
- package/dist/models/others/OneTimeCodeModel.d.ts +4 -5
- package/dist/models/region/AreaModel.d.ts +4 -5
- package/dist/models/region/CountryModel.d.ts +4 -5
- package/dist/models/region/StateModel.d.ts +4 -5
- package/dist/models/repository/RepositoryCartonModel.d.ts +4 -5
- package/dist/models/repository/RepositoryContainerModel.d.ts +4 -5
- package/dist/models/repository/RepositoryModel.d.ts +4 -5
- package/dist/models/repository/RepositoryPackageItemModel.d.ts +4 -5
- package/dist/models/repository/RepositoryPackageModel.d.ts +4 -5
- package/dist/models/repository/RepositoryPalletModel.d.ts +4 -5
- package/dist/models/scheduler/SchedulerLogModel.d.ts +4 -5
- package/dist/models/scheduler/SchedulerRequestModel.d.ts +4 -5
- package/dist/models/subscription/account/AccountSubscribeModel.d.ts +4 -5
- package/dist/models/subscription/plan/SubscribePlanModel.d.ts +4 -5
- package/dist/models/user/AdministratorModel.d.ts +4 -5
- package/dist/models/user/AgentModel.d.ts +4 -5
- package/dist/models/user/CustomerModel.d.ts +4 -5
- package/dist/models/user/DriverModel.d.ts +4 -5
- package/dist/models/user/MemberModel.d.ts +4 -5
- package/dist/models/user/OperatorModel.d.ts +4 -5
- package/dist/models/user/RetailerModel.d.ts +4 -5
- package/dist/models/user/UserModel.d.ts +4 -5
- package/dist/models/user/UserPropModel.d.ts +4 -5
- package/dist/models/user/WorkerModel.d.ts +4 -5
- package/dist/schema/payload/document/schemaDocumentCashSales.d.ts +64 -64
- package/dist/schema/payload/document/schemaDocumentDeliveryOrder.d.ts +64 -64
- package/dist/schema/payload/document/schemaDocumentProformaSales.d.ts +64 -64
- package/dist/schema/payload/document/schemaDocumentReplacementDeliveryOrder.d.ts +64 -64
- package/dist/schema/payload/document/schemaDocumentSalesOrder.d.ts +64 -64
- package/dist/services/branch/UserBranchService.d.ts +2 -2
- package/dist/services/branch/UserBranchService.js +53 -22
- package/dist/services/branch/UserBranchService.js.map +1 -1
- package/dist/services/document/DocumentProfileService.js +47 -19
- package/dist/services/document/DocumentProfileService.js.map +1 -1
- package/dist/utils/serviceUtils.d.ts +2 -0
- package/dist/utils/serviceUtils.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelFactory.js","sourceRoot":"","sources":["../../../src/lib/model_factory/ModelFactory.ts"],"names":[],"mappings":"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","sourcesContent":["import { DefaultServiceProps } from \"@/utils\";\nimport {\n DefaultOmitFields,\n getDefaultCreateFields,\n getDefaultUpdateFields,\n getDefaultTrashFields,\n getDefaultRemoveFields,\n getDefaultGetWhere,\n getDefaultUpdateWhere,\n getDefaultTrashWhere,\n getDefaultRemoveWhere,\n errorRecordNotFoundAlreadyDeleted,\n errorRecordNotFoundAfterUpdated,\n errorRecordNotFoundAfterTrashed,\n errorRecordNotFoundAfterRemoved\n} from \"./default\";\n// import { PrismaClient } from \"@prisma/client\";\nimport type { PrismaClient } from \"@prisma/client\";\n\nimport { getCoreConfiguration } from \"@/utils\";\n\n// Minimal transaction interface\ntype TxModel<T> = {\n updateMany(args: any): Promise<{ count: number }>;\n findUnique(args: any): Promise<T | null>;\n findMany?(args: any): Promise<T[]>;\n};\n\ntype ColumnInfo = { column_name: string; data_type: string };\ntype Column = { name: string; type: string };\n\ntype ModelFactoryProps<\n TClient extends Record<string, any>,\n TName extends keyof TClient,\n TModel = any\n> = {\n debug?: boolean,\n modelName: TName,\n primaryKey?: keyof TModel;\n // prisma?: TClient,\n // isConsoleTable?: boolean\n\n // accountId: number,\n // actionUserId: number,\n\n} & Omit<DefaultServiceProps, \"prisma\">\n\nexport const ModelFactory = <\n // TModel extends object\n // TClient extends { [k: string]: any }, // generic PrismaClient\n // TModel extends object,\n // TName extends keyof TClient\n TClient extends Record<string, any>, // PrismaClient\n TName extends keyof TClient, // \"plant_clones\"\n TDelegate extends TClient[TName], // PrismaClient[\"plant_clones\"]\n TModel // plant_clones type\n>({\n debug = false,\n // prisma,\n modelName,\n primaryKey = \"id\" as keyof TModel,\n accountId,\n actionUserId,\n authToken = '',\n isOperator = false,\n // isConsoleTable = false\n}: ModelFactoryProps<TClient, TName, TModel>) => {\n\n // load prisma from core configuration\n const { prisma: coreConfigPrisma } = getCoreConfiguration()\n\n const selectedPrisma = coreConfigPrisma\n\n // const delegate = prisma[modelName] as any;\n const delegate = selectedPrisma[modelName] as unknown as {\n create: (args: any) => Promise<TModel>;\n update: (args: any) => Promise<TModel>;\n delete: (args: any) => Promise<TModel>;\n findUnique: (args: any) => Promise<TModel | null>;\n findFirst: (args: any) => Promise<TModel | null>; // ✅ add this\n findMany: (args: any) => Promise<TModel[]>;\n updateMany: (args: any) => Promise<{ count: number }>; // ✅ useful for update\n };\n\n const getFields = async (\n prefix?: string,\n excludeKeywords: string[] = []\n ): Promise<Column[]> => {\n // 👇 Tell TS exactly what comes back from selectedPrisma\n const fields: ColumnInfo[] = await selectedPrisma.$queryRaw<ColumnInfo[]>`\n SELECT column_name, data_type\n FROM information_schema.columns \n WHERE table_name = ${String(modelName)}\n `;\n\n return fields\n .map((f: ColumnInfo): Column => ({\n name: f.column_name,\n type: f.data_type,\n }))\n .filter((c: Column) => !prefix || c.name.startsWith(prefix))\n .filter((c: Column) => !excludeKeywords.some((kw) => c.name.includes(kw)));\n };\n\n // const getFields = async (\n // prefix?: string,\n // excludeKeywords?: string[]\n // ): Promise<{ name: string; type: string }[]> => {\n // const fields = await selectedPrisma.$queryRaw<{ column_name: string; data_type: string }[]>`\n // SELECT column_name, data_type\n // FROM information_schema.columns \n // WHERE table_name = ${String(modelName)}\n // `;\n\n // let cols = fields.map(f => ({ name: f.column_name, type: f.data_type }));\n\n // if (prefix) {\n // cols = cols.filter(c => c.name.startsWith(prefix));\n // }\n\n // if (excludeKeywords && excludeKeywords.length > 0) {\n // cols = cols.filter(c => !excludeKeywords.some(kw => c.name.includes(kw)));\n // }\n\n // return cols;\n // };\n\n const create = async ({ data }: { data: Omit<any, DefaultOmitFields> }): Promise<TModel> => {\n\n const _data = { ...data, ...getDefaultCreateFields(actionUserId, accountId) }\n\n if (debug) {\n console.log(`[ModelFactory(data)]: ${JSON.stringify(_data)}`)\n console.log(\"[ModelFactory:delegate]\", JSON.stringify(Object.keys(selectedPrisma)));\n }\n\n return delegate.create({\n data: _data,\n });\n };\n\n const createMany = async ({\n dataList,\n disableRollback = false,\n }: {\n dataList: Omit<any, DefaultOmitFields>[];\n disableRollback?: boolean;\n }): Promise<TModel[]> => {\n if (!Array.isArray(dataList) || dataList.length === 0) {\n throw new Error(\"createMany: dataList cannot be empty.\");\n }\n\n if (debug) {\n console.log(`[ModelFactory(createMany)]: count=${dataList.length}`);\n }\n\n return selectedPrisma.$transaction(async (tx: typeof selectedPrisma) => {\n const modelTx = (tx as any)[modelName] as {\n createMany: (args: any) => Promise<{ count: number }>;\n findMany: (args: any) => Promise<TModel[]>;\n };\n\n // inject system fields for each record\n const records = dataList.map((d) => ({\n ...d,\n ...getDefaultCreateFields(actionUserId, accountId),\n }));\n\n const result = await modelTx.createMany({\n data: records,\n });\n\n if (disableRollback === false) {\n if (!result.count || result.count !== dataList.length) {\n throw new Error(\"Error: Not all records were inserted.\");\n }\n }\n\n // re-fetch the inserted records (if they have predictable keys)\n // only works if they share identifiable property (like foreign key)\n // or you can just return records if no need to verify\n let inserted: TModel[] = [];\n try {\n inserted = await modelTx.findMany({\n where: {\n ...(isOperator === false ? { accountid: accountId } : {}),\n ...getDefaultGetWhere,\n },\n orderBy: {\n [primaryKey as string]: \"desc\",\n },\n take: dataList.length,\n });\n } catch (err) {\n if (debug) console.warn(\"Could not re-fetch newly created records:\", err);\n }\n\n return inserted;\n });\n };\n\n const get = async ({\n id,\n where,\n include,\n }: {\n id?: number;\n where?: Record<string, any>;\n include?: any;\n }): Promise<TModel | null> => {\n const condition = id ? { [primaryKey]: id } : where ?? {};\n const condition2 = isOperator === false ? { accountid: accountId } : {}\n\n if (debug) {\n console.log(\"[ModelFactory:delegate]\", JSON.stringify(Object.keys(selectedPrisma)));\n }\n\n return delegate.findFirst({\n where: { ...condition, ...condition2, ...getDefaultGetWhere },\n include,\n });\n };\n\n const list = async ({ where, orderBy, offset, limit, include }: any = {}): Promise<TModel[]> => {\n\n if (debug) {\n console.log(\"[ModelFactory:delegate]\", JSON.stringify(Object.keys(selectedPrisma)));\n }\n\n return delegate.findMany({\n where,\n orderBy,\n skip: offset,\n take: limit,\n include,\n });\n };\n\n const count = async ({ where }: { where?: Record<string, any> } = {}): Promise<number> => {\n\n if (debug) {\n console.log(`[ModelFactory:count:${String(modelName)}] where =`, where);\n }\n\n // Use Prisma's built-in count\n const result = await (delegate as any).count({\n where: {\n ...where,\n ...(isOperator === false ? { accountid: accountId } : {}),\n ...getDefaultGetWhere,\n },\n });\n\n return result ?? 0;\n };\n\n const aggregate = async ({\n field,\n operation = \"sum\",\n where = {},\n }: {\n field: keyof TModel;\n operation?: \"sum\" | \"avg\" | \"min\" | \"max\" | \"count\";\n where?: Record<string, any>;\n }): Promise<number> => {\n if (debug) {\n console.log(`[ModelFactory:aggregate:${String(modelName)}] ${operation}(${String(field)})`, where);\n }\n\n // Build dynamic aggregation key\n const aggregateKey = `_${operation}` as\n | \"_sum\"\n | \"_avg\"\n | \"_min\"\n | \"_max\"\n | \"_count\";\n\n // Build only the key you need\n const aggregateInput: Record<string, any> = {\n [aggregateKey]: { [field]: true },\n where: {\n ...where,\n ...(isOperator === false ? { accountid: accountId } : {}),\n ...getDefaultGetWhere,\n },\n };\n\n // Run Prisma aggregate dynamically\n const result = await (delegate as any).aggregate(aggregateInput);\n\n // Extract inner value\n const inner = result?.[aggregateKey] ?? {};\n const value = inner?.[field as string] ?? (operation === \"count\" ? 0 : 0);\n\n return Number(value) || 0;\n }\n\n const update = async ({ id, where, data, disableRollback = false }: {\n id?: number;\n where?: Record<string, any>;\n data: Partial<TModel>,\n disableRollback?: Boolean\n }): Promise<TModel> => {\n\n if (debug) {\n console.log(`[ModelFactory(data)]: ${JSON.stringify(data)}`)\n console.log(\"[ModelFactory:delegate]\", JSON.stringify(Object.keys(selectedPrisma)));\n }\n\n return selectedPrisma.$transaction(async (tx: typeof selectedPrisma) => {\n\n const modelTx = (tx as any)[modelName] as TxModel<TModel>;\n\n // prefer primary key if provided, otherwise fall back to custom where\n let finalWhere = id ?\n {\n [primaryKey]: id,\n ...getDefaultUpdateWhere,\n ...(isOperator === false ? { accountid: accountId } : {}),\n }\n :\n {\n ...where,\n ...getDefaultUpdateWhere,\n ...(isOperator === false ? { accountid: accountId } : {}),\n };\n\n const result = await modelTx.updateMany({\n where: finalWhere,\n data: { ...data, ...getDefaultUpdateFields(actionUserId) },\n });\n\n if (disableRollback === false) {\n if (!result.count) {\n throw new Error(errorRecordNotFoundAlreadyDeleted);\n }\n }\n\n // const updatedRecord = await modelTx.findUnique({ where: { [primaryKey]: id } });\n\n let updatedRecord: TModel | null = null;\n\n if (id) {\n // use findUnique when updating by primary key\n updatedRecord = await modelTx.findUnique({ where: { [primaryKey]: id } });\n } else {\n // use findFirst when updating by other field(s)\n updatedRecord = await (modelTx as any).findFirst({ where: finalWhere });\n }\n\n if (disableRollback === false) {\n if (!updatedRecord) {\n throw new Error(errorRecordNotFoundAfterUpdated);\n }\n }\n\n return updatedRecord;\n });\n };\n\n const updateMany = async ({\n dataList,\n disableRollback = false,\n }: {\n dataList: { where: Record<string, any>; data: Partial<TModel> }[];\n disableRollback?: boolean;\n }): Promise<TModel[]> => {\n if (!Array.isArray(dataList) || dataList.length === 0) {\n throw new Error(\"updateMany: dataList cannot be empty.\");\n }\n\n if (debug) {\n console.log(`[ModelFactory(updateMany)]: count=${dataList.length}`);\n }\n\n return selectedPrisma.$transaction(async (tx: typeof selectedPrisma) => {\n const modelTx = (tx as any)[modelName] as TxModel<TModel> & {\n findMany: (args: any) => Promise<TModel[]>;\n };\n\n let totalUpdated = 0;\n\n for (const { where, data } of dataList) {\n const result = await modelTx.updateMany({\n where: {\n ...where,\n ...getDefaultUpdateWhere,\n },\n data: {\n ...data,\n ...getDefaultUpdateFields(actionUserId),\n },\n });\n\n totalUpdated += result.count;\n }\n\n if (disableRollback === false && totalUpdated === 0) {\n throw new Error(errorRecordNotFoundAlreadyDeleted);\n }\n\n // Attempt to refetch updated records for confirmation\n let updatedRecords: TModel[] = [];\n try {\n const allWhere = dataList.map(d => d.where);\n // Combine OR condition if Prisma supports OR for this table\n updatedRecords = await modelTx.findMany({\n where: {\n OR: allWhere,\n ...(isOperator === false ? { accountid: accountId } : {}),\n ...getDefaultGetWhere,\n },\n });\n } catch (err) {\n if (debug) console.warn(\"Could not re-fetch updated records:\", err);\n }\n\n return updatedRecords;\n });\n };\n\n const trash = async ({ ids }: { ids: number[] }): Promise<TModel[]> => {\n\n if (debug) {\n console.log(\"[ModelFactory:delegate]\", JSON.stringify(Object.keys(selectedPrisma)));\n }\n\n return selectedPrisma.$transaction(async (tx: typeof selectedPrisma) => {\n const modelTx = (tx as any)[modelName] as TxModel<TModel>;\n\n const result = await modelTx.updateMany({\n where: { [primaryKey]: { in: ids }, ...getDefaultTrashWhere },\n data: { ...getDefaultTrashFields(actionUserId) },\n });\n\n if (!result.count || result.count !== ids.length)\n throw new Error(errorRecordNotFoundAlreadyDeleted);\n\n const updated = await modelTx.findMany!({ where: { [primaryKey]: { in: ids } } });\n if (!updated.length) throw new Error(errorRecordNotFoundAfterTrashed);\n\n return updated;\n });\n };\n\n const remove = async ({ ids, where }: { ids?: number[], where?: Record<string, any>; }): Promise<TModel[]> => {\n\n if (debug) {\n console.log(\"[ModelFactory:delegate]\", JSON.stringify(Object.keys(selectedPrisma)));\n }\n\n return selectedPrisma.$transaction(async (tx: typeof selectedPrisma) => {\n const modelTx = (tx as any)[modelName] as TxModel<TModel>;\n\n // prefer primary ids if provided, otherwise fall back to custom where\n const finalWhere = ids\n ? { [primaryKey]: { in: ids }, ...getDefaultRemoveWhere }\n : { ...where, ...getDefaultRemoveWhere };\n\n const result = await modelTx.updateMany({\n where: finalWhere,\n data: { ...getDefaultRemoveFields(actionUserId) },\n });\n\n // if (!result.count) throw new Error(errorRecordNotFoundAlreadyDeleted);\n if (!result.count) {\n // no rows touched → just return []\n return [];\n }\n\n let updated: TModel[] | null;\n\n if (ids) {\n updated = await modelTx.findMany!({ where: { [primaryKey]: { in: ids } } });\n } else {\n updated = await modelTx.findMany!({ where });\n }\n\n if (!updated || updated.length === 0) {\n throw new Error(errorRecordNotFoundAfterRemoved);\n }\n\n return updated;\n });\n };\n\n // Used for SELECT queries (read operations)\n const raw = async <T = any>(query: string, params: any[] = []): Promise<T[]> => {\n\n if (debug) {\n console.log(\"[ModelFactory:delegate]\", JSON.stringify(Object.keys(selectedPrisma)));\n }\n\n // const client = prisma as unknown as PrismaClient;\n const client = selectedPrisma as unknown as PrismaClient;\n\n // return prisma.$queryRawUnsafe<T[]>(query, ...params);\n return client.$queryRawUnsafe<T[]>(query, ...params);\n };\n\n // Used for mutations (INSERT, UPDATE, DELETE, DDL like CREATE TABLE etc.)\n const rawExec = async (query: string, params: any[] = []): Promise<number> => {\n\n if (debug) {\n console.log(\"[ModelFactory:delegate]\", JSON.stringify(Object.keys(selectedPrisma)));\n }\n\n return selectedPrisma.$executeRawUnsafe(query, ...params); // returns number of affected rows\n };\n\n return {\n selectedPrisma,\n primaryKey,\n getFields,\n create,\n createMany,\n get,\n list,\n count,\n aggregate,\n update,\n updateMany,\n trash,\n remove,\n raw,\n rawExec\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"ModelFactory.js","sourceRoot":"","sources":["../../../src/lib/model_factory/ModelFactory.ts"],"names":[],"mappings":"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","sourcesContent":["import { DefaultServiceProps } from \"@/utils\";\nimport {\n DefaultOmitFields,\n getDefaultCreateFields,\n getDefaultUpdateFields,\n getDefaultTrashFields,\n getDefaultRemoveFields,\n getDefaultGetWhere,\n getDefaultUpdateWhere,\n getDefaultTrashWhere,\n getDefaultRemoveWhere,\n errorRecordNotFoundAlreadyDeleted,\n errorRecordNotFoundAfterUpdated,\n errorRecordNotFoundAfterTrashed,\n errorRecordNotFoundAfterRemoved\n} from \"./default\";\n// import { PrismaClient } from \"@prisma/client\";\nimport type { PrismaClient, Prisma } from \"@prisma/client\";\n\nimport { getCoreConfiguration } from \"@/utils\";\n\n// Minimal transaction interface\ntype TxModel<T> = {\n updateMany(args: any): Promise<{ count: number }>;\n findUnique(args: any): Promise<T | null>;\n findMany?(args: any): Promise<T[]>;\n};\n\ntype ColumnInfo = { column_name: string; data_type: string };\ntype Column = { name: string; type: string };\n\ntype ModelFactoryProps<\n TClient extends Record<string, any>,\n TName extends keyof TClient,\n TModel = any\n> = {\n debug?: boolean,\n modelName: TName,\n primaryKey?: keyof TModel,\n tx?: Prisma.TransactionClient; // ✅ ADD THIS\n\n} & Omit<DefaultServiceProps, \"prisma\">\n\nexport const ModelFactory = <\n TClient extends Record<string, any>, // PrismaClient\n TName extends keyof TClient, // \"plant_clones\"\n TDelegate extends TClient[TName], // PrismaClient[\"plant_clones\"]\n TModel // plant_clones type\n>({\n debug = false,\n // prisma,\n modelName,\n primaryKey = \"id\" as keyof TModel,\n accountId,\n actionUserId,\n authToken = '',\n isOperator = false,\n tx, // ✅ ADD THIS LINE\n}: ModelFactoryProps<TClient, TName, TModel>) => {\n\n // load prisma from core configuration\n const { prisma: coreConfigPrisma } = getCoreConfiguration()\n\n // const selectedPrisma = coreConfigPrisma\n const selectedPrisma = tx ?? coreConfigPrisma\n\n const getSelectedPrisma = () => tx ?? coreConfigPrisma;\n const getModel = () => getSelectedPrisma()[modelName];\n\n // const delegate = prisma[modelName] as any;\n // const delegate = selectedPrisma[modelName] as unknown as {\n // create: (args: any) => Promise<TModel>;\n // update: (args: any) => Promise<TModel>;\n // delete: (args: any) => Promise<TModel>;\n // findUnique: (args: any) => Promise<TModel | null>;\n // findFirst: (args: any) => Promise<TModel | null>; // ✅ add this\n // findMany: (args: any) => Promise<TModel[]>;\n // updateMany: (args: any) => Promise<{ count: number }>; // ✅ useful for update\n // };\n\n // const getFields = async (\n // prefix?: string,\n // excludeKeywords: string[] = []\n // ): Promise<Column[]> => {\n\n // // 👇 Tell TS exactly what comes back from selectedPrisma\n // const fields: ColumnInfo[] = await selectedPrisma.$queryRaw<ColumnInfo[]>`\n // SELECT column_name, data_type\n // FROM information_schema.columns \n // WHERE table_name = ${String(modelName)}\n // `;\n\n // return fields\n // .map((f: ColumnInfo): Column => ({\n // name: f.column_name,\n // type: f.data_type,\n // }))\n // .filter((c: Column) => !prefix || c.name.startsWith(prefix))\n // .filter((c: Column) => !excludeKeywords.some((kw) => c.name.includes(kw)));\n // };\n\n const getFields = async (\n prefix?: string,\n excludeKeywords: string[] = []\n ): Promise<Column[]> => {\n\n const run = async (client: any) => {\n const fields: ColumnInfo[] = await client.$queryRaw`\n SELECT column_name, data_type\n FROM information_schema.columns \n WHERE table_name = ${String(modelName)}\n `;\n\n return fields\n .map((f: ColumnInfo): Column => ({\n name: f.column_name,\n type: f.data_type,\n }))\n .filter((c: Column) => !prefix || c.name.startsWith(prefix))\n .filter((c: Column) => !excludeKeywords.some((kw) => c.name.includes(kw)));\n };\n\n // 🔥 external transaction support\n if (tx) {\n return run(tx);\n }\n\n // 🔥 fallback to global prisma\n return run(selectedPrisma);\n };\n\n // const create = async ({ data }: { data: Omit<any, DefaultOmitFields> }): Promise<TModel> => {\n\n // // const model = selectedPrisma[modelName] as any;\n // // const model = selectedPrisma[modelName] as TDelegate;\n // const model = getModel() as TDelegate;\n\n // const _data = {\n // ...data,\n // ...getDefaultCreateFields(actionUserId, accountId),\n // };\n\n // // if (debug) {\n // // console.log(`[ModelFactory(data)]: ${JSON.stringify(_data)}`)\n // // console.log(\"[ModelFactory:delegate]\", JSON.stringify(Object.keys(selectedPrisma)));\n // // }\n\n // if (debug) {\n // console.log(`[ModelFactory:create:${String(modelName)}]`, _data);\n // }\n\n // // return delegate.create({\n // // data: _data,\n // // });\n\n // return model.create({\n // data: _data,\n // });\n // };\n\n const create = async ({\n data,\n }: {\n data: Omit<any, DefaultOmitFields>;\n }): Promise<TModel> => {\n\n const run = async (client: any) => {\n const model = client[modelName] as TDelegate;\n\n const _data = {\n ...data,\n ...getDefaultCreateFields(actionUserId, accountId),\n };\n\n if (debug) {\n console.log(`[ModelFactory:create:${String(modelName)}]`, _data);\n }\n\n return model.create({\n data: _data,\n });\n };\n\n // 🔥 external transaction support\n if (tx) {\n return run(tx);\n }\n\n // 🔥 internal transaction fallback (ensures rollback safety)\n return selectedPrisma.$transaction(run);\n };\n\n // const createMany = async ({\n // dataList,\n // disableRollback = false,\n // }: {\n // dataList: Omit<any, DefaultOmitFields>[];\n // disableRollback?: boolean;\n // }): Promise<TModel[]> => {\n // if (!Array.isArray(dataList) || dataList.length === 0) {\n // throw new Error(\"createMany: dataList cannot be empty.\");\n // }\n\n // if (debug) {\n // console.log(`[ModelFactory(createMany)]: count=${dataList.length}`);\n // }\n\n // return selectedPrisma.$transaction(async (tx: typeof selectedPrisma) => {\n // const modelTx = (tx as any)[modelName] as {\n // createMany: (args: any) => Promise<{ count: number }>;\n // findMany: (args: any) => Promise<TModel[]>;\n // };\n\n // // inject system fields for each record\n // const records = dataList.map((d) => ({\n // ...d,\n // ...getDefaultCreateFields(actionUserId, accountId),\n // }));\n\n // const result = await modelTx.createMany({\n // data: records,\n // });\n\n // if (disableRollback === false) {\n // if (!result.count || result.count !== dataList.length) {\n // throw new Error(\"Error: Not all records were inserted.\");\n // }\n // }\n\n // // re-fetch the inserted records (if they have predictable keys)\n // // only works if they share identifiable property (like foreign key)\n // // or you can just return records if no need to verify\n // let inserted: TModel[] = [];\n // try {\n // inserted = await modelTx.findMany({\n // where: {\n // ...(isOperator === false ? { accountid: accountId } : {}),\n // ...getDefaultGetWhere,\n // },\n // orderBy: {\n // [primaryKey as string]: \"desc\",\n // },\n // take: dataList.length,\n // });\n // } catch (err) {\n // if (debug) console.warn(\"Could not re-fetch newly created records:\", err);\n // }\n\n // return inserted;\n // });\n // };\n\n const createMany = async ({\n dataList,\n disableRollback = false,\n }: {\n dataList: Omit<any, DefaultOmitFields>[];\n disableRollback?: boolean;\n }): Promise<TModel[]> => {\n\n if (!Array.isArray(dataList) || dataList.length === 0) {\n throw new Error(\"createMany: dataList cannot be empty.\");\n }\n\n if (debug) {\n console.log(`[ModelFactory(createMany)]: count=${dataList.length}`);\n }\n\n const run = async (client: any) => {\n const model = client[modelName];\n\n const records = dataList.map((d) => ({\n ...d,\n ...getDefaultCreateFields(actionUserId, accountId),\n }));\n\n const result = await model.createMany({\n data: records,\n });\n\n if (!disableRollback && result.count !== dataList.length) {\n throw new Error(\"Error: Not all records were inserted.\");\n }\n\n let inserted: TModel[] = [];\n\n try {\n inserted = await model.findMany({\n where: {\n ...(isOperator === false ? { accountid: accountId } : {}),\n ...getDefaultGetWhere,\n },\n orderBy: {\n [primaryKey as string]: \"desc\",\n },\n take: dataList.length,\n });\n } catch (err) {\n if (debug) console.warn(\"Could not re-fetch newly created records:\", err);\n }\n\n return inserted;\n };\n\n // 🔥 external transaction support\n if (tx) {\n return run(tx);\n }\n\n // 🔥 internal transaction fallback\n return selectedPrisma.$transaction(run);\n };\n\n // const get = async ({\n // id,\n // where,\n // include,\n // }: {\n // id?: number;\n // where?: Record<string, any>;\n // include?: any;\n // }): Promise<TModel | null> => {\n // const condition = id ? { [primaryKey]: id } : where ?? {};\n // const condition2 = isOperator === false ? { accountid: accountId } : {}\n\n // if (debug) {\n // console.log(\"[ModelFactory:delegate]\", JSON.stringify(Object.keys(selectedPrisma)));\n // }\n\n // return delegate.findFirst({\n // where: { ...condition, ...condition2, ...getDefaultGetWhere },\n // include,\n // });\n // };\n\n const get = async ({\n id,\n where,\n include,\n }: {\n id?: number;\n where?: Record<string, any>;\n include?: any;\n }): Promise<TModel | null> => {\n\n const condition = id ? { [primaryKey]: id } : where ?? {};\n const condition2 = isOperator === false ? { accountid: accountId } : {};\n\n if (debug) {\n console.log(\"[ModelFactory:get]\", JSON.stringify(Object.keys(selectedPrisma)));\n }\n\n const run = async (client: any) => {\n const model = client[modelName];\n\n return model.findFirst({\n where: {\n ...condition,\n ...condition2,\n ...getDefaultGetWhere,\n },\n include,\n });\n };\n\n // 🔥 use external transaction if exists\n if (tx) {\n return run(tx);\n }\n\n // 🔥 fallback to normal prisma\n return run(selectedPrisma);\n };\n\n // const list = async ({ where, orderBy, offset, limit, include }: any = {}): Promise<TModel[]> => {\n\n // if (debug) {\n // console.log(\"[ModelFactory:delegate]\", JSON.stringify(Object.keys(selectedPrisma)));\n // }\n\n // return delegate.findMany({\n // where,\n // orderBy,\n // skip: offset,\n // take: limit,\n // include,\n // });\n // };\n\n const list = async ({\n where,\n orderBy,\n offset,\n limit,\n include,\n }: any = {}): Promise<TModel[]> => {\n\n if (debug) {\n console.log(\"[ModelFactory:list]\", JSON.stringify(Object.keys(selectedPrisma)));\n }\n\n const run = async (client: any) => {\n const model = client[modelName];\n\n return model.findMany({\n where,\n orderBy,\n skip: offset,\n take: limit,\n include,\n });\n };\n\n // 🔥 external transaction support\n if (tx) {\n return run(tx);\n }\n\n // 🔥 normal execution\n return run(selectedPrisma);\n };\n\n // const count = async ({ where }: { where?: Record<string, any> } = {}): Promise<number> => {\n\n // if (debug) {\n // console.log(`[ModelFactory:count:${String(modelName)}] where =`, where);\n // }\n\n // // Use Prisma's built-in count\n // const result = await (delegate as any).count({\n // where: {\n // ...where,\n // ...(isOperator === false ? { accountid: accountId } : {}),\n // ...getDefaultGetWhere,\n // },\n // });\n\n // return result ?? 0;\n // };\n\n const count = async ({\n where,\n }: { where?: Record<string, any> } = {}): Promise<number> => {\n\n if (debug) {\n console.log(`[ModelFactory:count:${String(modelName)}] where =`, where);\n }\n\n const run = async (client: any) => {\n const model = client[modelName];\n\n return model.count({\n where: {\n ...where,\n ...(isOperator === false ? { accountid: accountId } : {}),\n ...getDefaultGetWhere,\n },\n });\n };\n\n // 🔥 external transaction case\n if (tx) {\n return run(tx);\n }\n\n // 🔥 normal case (no transaction needed for count)\n return run(selectedPrisma);\n };\n\n // const aggregate = async ({\n // field,\n // operation = \"sum\",\n // where = {},\n // }: {\n // field: keyof TModel;\n // operation?: \"sum\" | \"avg\" | \"min\" | \"max\" | \"count\";\n // where?: Record<string, any>;\n // }): Promise<number> => {\n // if (debug) {\n // console.log(`[ModelFactory:aggregate:${String(modelName)}] ${operation}(${String(field)})`, where);\n // }\n\n // // Build dynamic aggregation key\n // const aggregateKey = `_${operation}` as\n // | \"_sum\"\n // | \"_avg\"\n // | \"_min\"\n // | \"_max\"\n // | \"_count\";\n\n // // Build only the key you need\n // const aggregateInput: Record<string, any> = {\n // [aggregateKey]: { [field]: true },\n // where: {\n // ...where,\n // ...(isOperator === false ? { accountid: accountId } : {}),\n // ...getDefaultGetWhere,\n // },\n // };\n\n // // Run Prisma aggregate dynamically\n // const result = await (delegate as any).aggregate(aggregateInput);\n\n // // Extract inner value\n // const inner = result?.[aggregateKey] ?? {};\n // const value = inner?.[field as string] ?? (operation === \"count\" ? 0 : 0);\n\n // return Number(value) || 0;\n // }\n\n const aggregate = async ({\n field,\n operation = \"sum\",\n where = {},\n }: {\n field: keyof TModel;\n operation?: \"sum\" | \"avg\" | \"min\" | \"max\" | \"count\";\n where?: Record<string, any>;\n }): Promise<number> => {\n\n const run = async (client: any) => {\n const model = client[modelName];\n\n const aggregateKey = `_${operation}` as\n | \"_sum\"\n | \"_avg\"\n | \"_min\"\n | \"_max\"\n | \"_count\";\n\n const aggregateInput: Record<string, any> = {\n [aggregateKey]: { [field]: true },\n where: {\n ...where,\n ...(isOperator === false ? { accountid: accountId } : {}),\n ...getDefaultGetWhere,\n },\n };\n\n const result = await (model as any).aggregate(aggregateInput);\n\n const inner = result?.[aggregateKey] ?? {};\n const value = inner?.[field as string] ?? 0;\n\n return Number(value) || 0;\n };\n\n // 🔥 external tx support\n if (tx) {\n return run(tx);\n }\n\n // 🔥 internal fallback\n return selectedPrisma.$transaction(run);\n };\n\n // const update = async ({ id, where, data, disableRollback = false }: {\n // id?: number;\n // where?: Record<string, any>;\n // data: Partial<TModel>,\n // disableRollback?: Boolean\n // }): Promise<TModel> => {\n\n // if (debug) {\n // console.log(`[ModelFactory(data)]: ${JSON.stringify(data)}`)\n // console.log(\"[ModelFactory:delegate]\", JSON.stringify(Object.keys(selectedPrisma)));\n // }\n\n // return selectedPrisma.$transaction(async (tx: typeof selectedPrisma) => {\n\n // const modelTx = (tx as any)[modelName] as TxModel<TModel>;\n\n // // prefer primary key if provided, otherwise fall back to custom where\n // let finalWhere = id ?\n // {\n // [primaryKey]: id,\n // ...getDefaultUpdateWhere,\n // ...(isOperator === false ? { accountid: accountId } : {}),\n // }\n // :\n // {\n // ...where,\n // ...getDefaultUpdateWhere,\n // ...(isOperator === false ? { accountid: accountId } : {}),\n // };\n\n // const result = await modelTx.updateMany({\n // where: finalWhere,\n // data: { ...data, ...getDefaultUpdateFields(actionUserId) },\n // });\n\n // if (disableRollback === false) {\n // if (!result.count) {\n // throw new Error(errorRecordNotFoundAlreadyDeleted);\n // }\n // }\n\n // // const updatedRecord = await modelTx.findUnique({ where: { [primaryKey]: id } });\n\n // let updatedRecord: TModel | null = null;\n\n // if (id) {\n // // use findUnique when updating by primary key\n // updatedRecord = await modelTx.findUnique({ where: { [primaryKey]: id } });\n // } else {\n // // use findFirst when updating by other field(s)\n // updatedRecord = await (modelTx as any).findFirst({ where: finalWhere });\n // }\n\n // if (disableRollback === false) {\n // if (!updatedRecord) {\n // throw new Error(errorRecordNotFoundAfterUpdated);\n // }\n // }\n\n // return updatedRecord;\n // });\n // };\n\n const update = async ({\n id,\n where,\n data,\n disableRollback = false\n }: {\n id?: number;\n where?: Record<string, any>;\n data: Partial<TModel>;\n disableRollback?: boolean;\n }): Promise<TModel> => {\n\n const run = async (client: any) => {\n\n const model = client[modelName];\n\n const finalWhere = id\n ? {\n [primaryKey]: id,\n ...getDefaultUpdateWhere,\n ...(isOperator === false ? { accountid: accountId } : {}),\n }\n : {\n ...where,\n ...getDefaultUpdateWhere,\n ...(isOperator === false ? { accountid: accountId } : {}),\n };\n\n const result = await model.updateMany({\n where: finalWhere,\n data: {\n ...data,\n ...getDefaultUpdateFields(actionUserId),\n },\n });\n\n if (!disableRollback && result.count === 0) {\n throw new Error(errorRecordNotFoundAlreadyDeleted);\n }\n\n const updated = id\n ? await model.findUnique({ where: { [primaryKey]: id } })\n : await model.findFirst({ where: finalWhere });\n\n if (!disableRollback && !updated) {\n throw new Error(errorRecordNotFoundAfterUpdated);\n }\n\n return updated;\n };\n\n // ✅ external transaction support\n if (tx) {\n return run(tx);\n }\n\n // ✅ internal transaction fallback\n return selectedPrisma.$transaction(run);\n };\n\n // const updateMany = async ({\n // dataList,\n // disableRollback = false,\n // }: {\n // dataList: { where: Record<string, any>; data: Partial<TModel> }[];\n // disableRollback?: boolean;\n // }): Promise<TModel[]> => {\n // if (!Array.isArray(dataList) || dataList.length === 0) {\n // throw new Error(\"updateMany: dataList cannot be empty.\");\n // }\n\n // if (debug) {\n // console.log(`[ModelFactory(updateMany)]: count=${dataList.length}`);\n // }\n\n // return selectedPrisma.$transaction(async (tx: typeof selectedPrisma) => {\n // const modelTx = (tx as any)[modelName] as TxModel<TModel> & {\n // findMany: (args: any) => Promise<TModel[]>;\n // };\n\n // let totalUpdated = 0;\n\n // for (const { where, data } of dataList) {\n // const result = await modelTx.updateMany({\n // where: {\n // ...where,\n // ...getDefaultUpdateWhere,\n // },\n // data: {\n // ...data,\n // ...getDefaultUpdateFields(actionUserId),\n // },\n // });\n\n // totalUpdated += result.count;\n // }\n\n // if (disableRollback === false && totalUpdated === 0) {\n // throw new Error(errorRecordNotFoundAlreadyDeleted);\n // }\n\n // // Attempt to refetch updated records for confirmation\n // let updatedRecords: TModel[] = [];\n // try {\n // const allWhere = dataList.map(d => d.where);\n // // Combine OR condition if Prisma supports OR for this table\n // updatedRecords = await modelTx.findMany({\n // where: {\n // OR: allWhere,\n // ...(isOperator === false ? { accountid: accountId } : {}),\n // ...getDefaultGetWhere,\n // },\n // });\n // } catch (err) {\n // if (debug) console.warn(\"Could not re-fetch updated records:\", err);\n // }\n\n // return updatedRecords;\n // });\n // };\n\n const updateMany = async ({\n dataList,\n disableRollback = false,\n }: {\n dataList: { where: Record<string, any>; data: Partial<TModel> }[];\n disableRollback?: boolean;\n }): Promise<TModel[]> => {\n\n if (!Array.isArray(dataList) || dataList.length === 0) {\n throw new Error(\"updateMany: dataList cannot be empty.\");\n }\n\n const run = async (txClient: any) => {\n const model = txClient[modelName];\n\n let totalUpdated = 0;\n\n for (const { where, data } of dataList) {\n const result = await model.updateMany({\n where: {\n ...where,\n ...getDefaultUpdateWhere,\n },\n data: {\n ...data,\n ...getDefaultUpdateFields(actionUserId),\n },\n });\n\n totalUpdated += result.count;\n }\n\n if (!disableRollback && totalUpdated === 0) {\n throw new Error(errorRecordNotFoundAlreadyDeleted);\n }\n\n return model.findMany({\n where: {\n OR: dataList.map(d => d.where),\n ...(isOperator === false ? { accountid: accountId } : {}),\n ...getDefaultGetWhere,\n },\n });\n };\n\n // 🔥 transaction boundary ONLY here\n if (tx) {\n return run(tx);\n }\n\n return selectedPrisma.$transaction(run);\n };\n\n // const trash = async ({ ids }: { ids: number[] }): Promise<TModel[]> => {\n\n // if (debug) {\n // console.log(\"[ModelFactory:delegate]\", JSON.stringify(Object.keys(selectedPrisma)));\n // }\n\n // return selectedPrisma.$transaction(async (tx: typeof selectedPrisma) => {\n // const modelTx = (tx as any)[modelName] as TxModel<TModel>;\n\n // const result = await modelTx.updateMany({\n // where: { [primaryKey]: { in: ids }, ...getDefaultTrashWhere },\n // data: { ...getDefaultTrashFields(actionUserId) },\n // });\n\n // if (!result.count || result.count !== ids.length)\n // throw new Error(errorRecordNotFoundAlreadyDeleted);\n\n // const updated = await modelTx.findMany!({ where: { [primaryKey]: { in: ids } } });\n // if (!updated.length) throw new Error(errorRecordNotFoundAfterTrashed);\n\n // return updated;\n // });\n // };\n\n const trash = async ({ ids }: { ids: number[] }): Promise<TModel[]> => {\n\n if (debug) {\n console.log(\"[ModelFactory:trash]\", JSON.stringify(Object.keys(selectedPrisma)));\n }\n\n const run = async (client: any) => {\n const model = client[modelName];\n\n const result = await model.updateMany({\n where: {\n [primaryKey]: { in: ids },\n ...getDefaultTrashWhere,\n },\n data: {\n ...getDefaultTrashFields(actionUserId),\n },\n });\n\n if (!result.count || result.count !== ids.length) {\n throw new Error(errorRecordNotFoundAlreadyDeleted);\n }\n\n const updated = await model.findMany({\n where: { [primaryKey]: { in: ids } },\n });\n\n if (!updated.length) {\n throw new Error(errorRecordNotFoundAfterTrashed);\n }\n\n return updated;\n };\n\n // ✅ external transaction support\n if (tx) {\n return run(tx);\n }\n\n // ✅ internal fallback transaction\n return selectedPrisma.$transaction(run);\n };\n\n // const remove = async ({ ids, where }: { ids?: number[], where?: Record<string, any>; }): Promise<TModel[]> => {\n\n // if (debug) {\n // console.log(\"[ModelFactory:delegate]\", JSON.stringify(Object.keys(selectedPrisma)));\n // }\n\n // return selectedPrisma.$transaction(async (tx: typeof selectedPrisma) => {\n // const modelTx = (tx as any)[modelName] as TxModel<TModel>;\n\n // // prefer primary ids if provided, otherwise fall back to custom where\n // const finalWhere = ids\n // ? { [primaryKey]: { in: ids }, ...getDefaultRemoveWhere }\n // : { ...where, ...getDefaultRemoveWhere };\n\n // const result = await modelTx.updateMany({\n // where: finalWhere,\n // data: { ...getDefaultRemoveFields(actionUserId) },\n // });\n\n // // if (!result.count) throw new Error(errorRecordNotFoundAlreadyDeleted);\n // if (!result.count) {\n // // no rows touched → just return []\n // return [];\n // }\n\n // let updated: TModel[] | null;\n\n // if (ids) {\n // updated = await modelTx.findMany!({ where: { [primaryKey]: { in: ids } } });\n // } else {\n // updated = await modelTx.findMany!({ where });\n // }\n\n // if (!updated || updated.length === 0) {\n // throw new Error(errorRecordNotFoundAfterRemoved);\n // }\n\n // return updated;\n // });\n // };\n\n const remove = async ({\n ids,\n where\n }: {\n ids?: number[],\n where?: Record<string, any>;\n }): Promise<TModel[]> => {\n\n if (debug) {\n console.log(\"[ModelFactory:remove]\", JSON.stringify(Object.keys(selectedPrisma)));\n }\n\n const run = async (client: any) => {\n const model = client[modelName];\n\n const finalWhere = ids\n ? {\n [primaryKey]: { in: ids },\n ...getDefaultRemoveWhere,\n }\n : {\n ...where,\n ...getDefaultRemoveWhere,\n };\n\n const result = await model.updateMany({\n where: finalWhere,\n data: {\n ...getDefaultRemoveFields(actionUserId),\n },\n });\n\n if (!result.count) {\n return [];\n }\n\n const updated = ids\n ? await model.findMany({\n where: { [primaryKey]: { in: ids } },\n })\n : await model.findMany({\n where,\n });\n\n if (!updated || updated.length === 0) {\n throw new Error(errorRecordNotFoundAfterRemoved);\n }\n\n return updated;\n };\n\n // 🔥 external transaction support\n if (tx) {\n return run(tx);\n }\n\n // 🔥 internal transaction fallback\n return selectedPrisma.$transaction(run);\n };\n\n // Used for SELECT queries (read operations)\n // const raw = async <T = any>(query: string, params: any[] = []): Promise<T[]> => {\n\n // if (debug) {\n // console.log(\"[ModelFactory:delegate]\", JSON.stringify(Object.keys(selectedPrisma)));\n // }\n\n // // const client = prisma as unknown as PrismaClient;\n // const client = selectedPrisma as unknown as PrismaClient;\n\n // // return prisma.$queryRawUnsafe<T[]>(query, ...params);\n // return client.$queryRawUnsafe<T[]>(query, ...params);\n // };\n\n const raw = async <T = any>(\n query: string,\n params: any[] = []\n ): Promise<T[]> => {\n\n const run = async (client: any): Promise<T[]> => {\n return client.$queryRawUnsafe(query, ...params) as Promise<T[]>;\n };\n\n // 🔥 use tx if exists\n if (tx) {\n return run(tx);\n }\n\n // 🔥 fallback to global prisma\n return run(selectedPrisma);\n };\n\n // Used for mutations (INSERT, UPDATE, DELETE, DDL like CREATE TABLE etc.)\n // const rawExec = async (query: string, params: any[] = []): Promise<number> => {\n\n // if (debug) {\n // console.log(\"[ModelFactory:delegate]\", JSON.stringify(Object.keys(selectedPrisma)));\n // }\n\n // return selectedPrisma.$executeRawUnsafe(query, ...params); // returns number of affected rows\n // };\n\n // const rawExec = async (\n // query: string,\n // params: any[] = []\n // ): Promise<number> => {\n\n // const run = async (client: any) => {\n // return client.$executeRawUnsafe(query, ...params);\n // };\n\n // // 🔥 if external tx exists → use it\n // if (tx) {\n // return run(tx);\n // }\n\n // // 🔥 otherwise use global prisma (no transaction wrapper needed for raw exec)\n // return run(selectedPrisma);\n // };\n\n return {\n selectedPrisma,\n primaryKey,\n getFields,\n create,\n createMany,\n get,\n list,\n count,\n aggregate,\n update,\n updateMany,\n trash,\n remove,\n raw,\n // rawExec\n };\n};\n"]}
|
|
@@ -41,7 +41,7 @@ export declare const buildSqlRawSelect: ({ tableName, mainAlias, accountId, sqlS
|
|
|
41
41
|
sqlLimitOffset: string;
|
|
42
42
|
skipFilterAccountId?: boolean;
|
|
43
43
|
}) => string;
|
|
44
|
-
export declare const buildSqlRawSelectCount: ({ tableName, mainAlias, accountId,
|
|
44
|
+
export declare const buildSqlRawSelectCount: ({ tableName, mainAlias, accountId, sqlRelation, sqlWhere, sqlGroupBy, skipFilterAccountId }: {
|
|
45
45
|
tableName: string;
|
|
46
46
|
mainAlias: string;
|
|
47
47
|
accountId: number;
|
|
@@ -29,20 +29,70 @@ const buildSqlRawSelect = ({ tableName, mainAlias, accountId, sqlSelect, sqlRela
|
|
|
29
29
|
`;
|
|
30
30
|
};
|
|
31
31
|
exports.buildSqlRawSelect = buildSqlRawSelect;
|
|
32
|
-
const buildSqlRawSelectCount = ({
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
32
|
+
// export const buildSqlRawSelectCount = ({
|
|
33
|
+
// tableName,
|
|
34
|
+
// mainAlias,
|
|
35
|
+
// accountId,
|
|
36
|
+
// sqlSelect,
|
|
37
|
+
// sqlRelation,
|
|
38
|
+
// sqlWhere,
|
|
39
|
+
// sqlGroupBy,
|
|
40
|
+
// sqlOrderby,
|
|
41
|
+
// skipFilterAccountId = false
|
|
42
|
+
// }: {
|
|
43
|
+
// tableName: string,
|
|
44
|
+
// mainAlias: string,
|
|
45
|
+
// accountId: number,
|
|
46
|
+
// sqlSelect: string[]
|
|
47
|
+
// sqlRelation: string[]
|
|
48
|
+
// sqlWhere: string[]
|
|
49
|
+
// sqlGroupBy: string[]
|
|
50
|
+
// sqlOrderby: string,
|
|
51
|
+
// skipFilterAccountId?: boolean
|
|
52
|
+
// }) => {
|
|
53
|
+
// const sql = buildSqlRawSelect({
|
|
54
|
+
// tableName,
|
|
55
|
+
// mainAlias,
|
|
56
|
+
// accountId,
|
|
57
|
+
// sqlSelect,
|
|
58
|
+
// sqlRelation,
|
|
59
|
+
// sqlWhere,
|
|
60
|
+
// sqlGroupBy,
|
|
61
|
+
// sqlOrderby,
|
|
62
|
+
// sqlLimitOffset: "",
|
|
63
|
+
// skipFilterAccountId
|
|
64
|
+
// })
|
|
65
|
+
// return `WITH filtered_docs AS (${sql}) SELECT COUNT(*) AS filtered_count FROM filtered_docs;`
|
|
66
|
+
// }
|
|
67
|
+
const buildSqlRawSelectCount = ({ tableName, mainAlias, accountId, sqlRelation, sqlWhere, sqlGroupBy, skipFilterAccountId = false }) => {
|
|
68
|
+
// enforce account isolation
|
|
69
|
+
if (!skipFilterAccountId) {
|
|
70
|
+
sqlWhere = [
|
|
71
|
+
...sqlWhere,
|
|
72
|
+
`${mainAlias}.accountid = ${accountId}`
|
|
73
|
+
];
|
|
74
|
+
}
|
|
75
|
+
const baseQuery = `
|
|
76
|
+
FROM ${tableName} AS ${mainAlias}
|
|
77
|
+
${sqlRelation.join(" ")}
|
|
78
|
+
${sqlWhere.length > 0 ? `WHERE ${sqlWhere.join(" AND ")}` : ""}
|
|
79
|
+
`;
|
|
80
|
+
// CASE 1: no grouping → FASTEST PATH
|
|
81
|
+
if (!sqlGroupBy.length) {
|
|
82
|
+
return `
|
|
83
|
+
SELECT COUNT(*)
|
|
84
|
+
${baseQuery}
|
|
85
|
+
`;
|
|
86
|
+
}
|
|
87
|
+
// CASE 2: grouping → safe count of grouped results
|
|
88
|
+
return `
|
|
89
|
+
SELECT COUNT(*)
|
|
90
|
+
FROM (
|
|
91
|
+
SELECT 1
|
|
92
|
+
${baseQuery}
|
|
93
|
+
GROUP BY ${sqlGroupBy.join(",")}
|
|
94
|
+
) t
|
|
95
|
+
`;
|
|
46
96
|
};
|
|
47
97
|
exports.buildSqlRawSelectCount = buildSqlRawSelectCount;
|
|
48
98
|
/**
|
|
@@ -328,7 +378,8 @@ const getListWithCount = async ({ model, tableName, mainAlias, countKey, sqlRela
|
|
|
328
378
|
sqlSelect: [`${mainAlias}.${countKey}`],
|
|
329
379
|
sqlRelation: filteredArray,
|
|
330
380
|
sqlWhere,
|
|
331
|
-
sqlGroupBy: [`${mainAlias}.${countKey}`],
|
|
381
|
+
// sqlGroupBy: [`${mainAlias}.${countKey}`],
|
|
382
|
+
sqlGroupBy: [],
|
|
332
383
|
sqlOrderby: ``
|
|
333
384
|
});
|
|
334
385
|
let count = await model.raw(sqlRawCount);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryBuilder.js","sourceRoot":"","sources":["../../../src/lib/query_builder/queryBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { queryListFilterOperators } from '@/schema/common';\nimport { QueryList, QueryListFilter } from \"@/schema/common\";\nimport { throwError } from '@/utils';\n\ntype SqlDialect = \"postgres\" | \"mysql\";\ntype JoinType = \"left\" | \"inner\" | \"right\";\n\n/**\n * Create a typed map of model fields for safer access in raw queries.\n *\n * This utility takes a TypeScript model type `T` and returns an object\n * where each key is the field name and the value is the same string.\n * \n * The returned object can be used for dot-suggestion, reducing typos\n * when referencing columns in SQL queries.\n *\n * @example\n * import type { Customer } from \"@prisma/client\";\n * import { createFields } from \"@/utils/createFields\";\n * \n * const CustomerFields = createFields<Customer>();\n * console.log(CustomerFields.id); // \"id\"\n * console.log(CustomerFields.name); // \"name\"\n * \n * const query = `SELECT ${CustomerFields.id}, ${CustomerFields.name} FROM customers`;\n */\ntype FieldMap<T> = {\n [K in keyof T]: K;\n};\n\nexport function getFieldsByType<T>(): FieldMap<T> {\n return new Proxy({} as FieldMap<T>, {\n get: (_, prop) => prop,\n }) as FieldMap<T>;\n}\n\ntype FieldMeta = { name: string; type: string };\n\nexport const toFieldMap = (\n fields: FieldMeta[],\n prefix = \"uip\",\n infix = \"inf_\"\n): Record<string, string> => {\n return Object.fromEntries(\n fields.map(f => [`${prefix}.${f.name}`, `${infix}${f.name}`])\n );\n}\n\nexport const buildSqlRawSelect = ({\n tableName,\n mainAlias,\n accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId = false\n}: {\n tableName: string,\n mainAlias: string,\n accountId: number,\n sqlSelect: string[]\n sqlRelation: string[]\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string\n sqlLimitOffset: string\n skipFilterAccountId?: boolean\n}) => {\n\n if (skipFilterAccountId === false) {\n sqlWhere = [...sqlWhere, `${mainAlias}.accountid = ${accountId}`]\n }\n\n return `SELECT \n ${sqlSelect.join(\",\")}\n FROM \n ${tableName} as ${mainAlias}\n ${sqlRelation.join(\" \")}\n ${sqlWhere.length > 0 ? `WHERE ${sqlWhere.join(' and ')}` : ``}\n ${sqlGroupBy.length > 0 ? `GROUP BY ${sqlGroupBy.join(\",\")}` : \"\"}\n ${sqlOrderby} \n ${sqlLimitOffset}\n `\n}\n\n\nexport const buildSqlRawSelectCount = ({\n tableName,\n mainAlias,\n accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n skipFilterAccountId = false\n}: {\n tableName: string,\n mainAlias: string,\n accountId: number,\n sqlSelect: string[]\n sqlRelation: string[]\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string,\n skipFilterAccountId?: boolean\n}) => {\n\n const sql = buildSqlRawSelect({\n tableName,\n mainAlias,\n accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset: \"\",\n skipFilterAccountId\n })\n\n return `WITH filtered_docs AS (${sql}) SELECT COUNT(*) AS filtered_count FROM filtered_docs;`\n}\n\n/**\n * Build a SQL join clause\n * @param joinType - \"left\" | \"inner\" | \"right\" (default: \"left\")\n * @param sourceAlias - alias of the source table, e.g., \"cus\"\n * @param targetTable - table to join, e.g., \"users\"\n * @param targetAlias - alias for the target table, e.g., \"usr\"\n * @param onConditions - array of ON conditions, e.g., [\"cus.user_id = usr.user_id\", \"usr.isdelete = false\"]\n */\nexport const buildSqlRelation = (\n joinType: JoinType,\n sourceAlias: string,\n targetTable: string,\n targetAlias: string,\n onConditions: string[]\n) => {\n return `\n ${joinType} join ${targetTable} as ${targetAlias}\n on ${onConditions.join(\" and \")}\n `;\n}\n/**\n * Build a SQL SELECT column list with aliases\n *\n * This function takes a table alias and a mapping of column names to\n * desired aliases, and returns a comma-separated string suitable for\n * inclusion in a SQL SELECT statement.\n *\n * @param abb - The alias of the table in the SQL query (e.g., \"cus\" for customers)\n * @param columns - An object mapping column names to their desired aliases\n * e.g., { id: \"customerId\", name: \"customerName\" }\n * @returns A string of columns with aliases, e.g.,\n * \"cus.id as customerId, cus.name as customerName\"\n *\n * @example\n * const cols = buildSqlSelect(\"cus\", { id: \"customerId\", name: \"customerName\" });\n * // cols => \"cus.id as customerId, cus.name as customerName\"\n */\nexport const buildSqlSelect = (abb: string, columns: Record<string, string>): string => {\n\n if (!columns || Object.keys(columns).length === 0) return \"\";\n\n return Object.entries(columns)\n .map(([col, alias]) => `${abb ? abb + \".\" : \"\"}${col} as ${alias}`)\n .join(\", \");\n}\n\nexport const buildSqlWhere = (\n filters: QueryListFilter[] | undefined,\n selectColumns: any,\n ctx: { dialect: SqlDialect } = {\n dialect: \"postgres\"\n }\n): {\n where: string,\n colNames: string[],\n aliasKeys: string[]\n} => {\n\n if (!filters || filters.length === 0) {\n return {\n where: ``,\n colNames: [],\n aliasKeys: []\n }\n }\n\n const andClauses: string[] = [];\n const orClauses: string[] = [];\n\n // const col = (field: string) => (tableAlias ? `${tableAlias}.${field}` : field);\n\n const col = (field: string) => {\n let filteredColumns = Object.fromEntries(\n Object.entries(selectColumns).filter(([key, alias]) => alias === field)\n )\n return filteredColumns ? Object.keys(filteredColumns)[0] : field\n }\n\n const colNames: string[] = []\n\n for (const filter of filters) {\n if (!filter) continue;\n\n const { field, operator, value } = filter;\n\n // const formatValue = (val: any, prefix?: string, suffix?: string) => \n // typeof val === \"string\" ? `'${prefix ?? \"\"}${val.replace(/'/g, \"''\")}${suffix ?? \"\"}'` : val;\n\n const formatValue = (\n val: any,\n operator: QueryListFilter[\"operator\"],\n prefix?: string,\n suffix?: string\n ) => {\n\n let returnValue = val\n let sqlValuePrefix = ``\n let sqlValueSuffix = ``\n\n if (operator === queryListFilterOperators.startsWith) {\n sqlValuePrefix = ``\n sqlValueSuffix = `%`\n }\n\n if (operator === queryListFilterOperators.endsWith) {\n sqlValuePrefix = `%`\n sqlValueSuffix = ``\n }\n\n if (\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n sqlValuePrefix = `%`\n sqlValueSuffix = `%`\n }\n\n // override\n if (prefix) sqlValuePrefix = prefix\n if (suffix) sqlValueSuffix = suffix\n\n if (typeof val === \"string\") {\n returnValue = `'${sqlValuePrefix ?? \"\"}${val.replace(/'/g, \"''\")}${sqlValueSuffix ?? \"\"}'`\n }\n\n // check the type of val must string & operator is using like\n if (\n operator === queryListFilterOperators.startsWith ||\n operator === queryListFilterOperators.endsWith ||\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n if (typeof val !== \"string\") {\n throwError(`Filters part:${field} using:${operator} like the val must be string`)\n }\n }\n\n return returnValue\n\n }\n\n const formatWherePart = (val: any, operator: QueryListFilter[\"operator\"]) => {\n\n let sqlOperator: string = operator\n\n // check with like operator\n if (\n operator === queryListFilterOperators.startsWith ||\n operator === queryListFilterOperators.endsWith ||\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n sqlOperator = ctx.dialect === \"postgres\" ? `ILIKE` : `LIKE` // only ILIKE supported in postgres\n }\n\n // not array in value\n if (Array.isArray(value) === false) {\n\n let sqlValue = formatValue(val, operator)\n return `${colName} ${sqlOperator} ${sqlValue}`\n\n }\n\n // for array in value\n let subOrQuery: string[] = []\n\n value.forEach((i: any) => {\n\n let sqlValue = `${formatValue(i, operator)}`\n\n subOrQuery.push(`${colName} ${sqlOperator} ${sqlValue}`)\n\n })\n\n return `(${subOrQuery.join(\" OR \")})`\n\n }\n\n const colName = `${col(field)}`\n\n switch (operator) {\n case queryListFilterOperators.eq:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.eq)}`);\n // andClauses.push(`${colName} = ${formatValue(value)}`);\n break;\n case queryListFilterOperators.notEq:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.notEq)}`);\n // andClauses.push(`${colName} != ${formatValue(value)}`);\n break;\n case queryListFilterOperators.startsWith:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.startsWith)}`);\n // andClauses.push(`${colName} ILIKE '${value}%'`);\n break;\n case queryListFilterOperators.endsWith:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.endsWith)}`);\n // andClauses.push(`${colName} ILIKE '%${value}'`);\n break;\n case queryListFilterOperators.contains:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.contains)}`);\n // andClauses.push(`${colName} ILIKE '%${value}%'`);\n break;\n case queryListFilterOperators.anyOf:\n andClauses.push(`${colName} IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.excludeOf:\n andClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.moreThanEq:\n andClauses.push(`${colName} >= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.lessThanEq:\n andClauses.push(`${colName} <= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.isNull:\n andClauses.push(`${colName} IS NULL`);\n break;\n case queryListFilterOperators.isNotNull:\n andClauses.push(`${colName} IS NOT NULL`);\n break;\n\n // Or-variants\n case queryListFilterOperators.eqOr:\n // orClauses.push(`${colName} = ${formatValue(value, operator)}`);\n orClauses.push(`${formatWherePart(value, queryListFilterOperators.eqOr)}`);\n break;\n case queryListFilterOperators.containsOr:\n // orClauses.push(`${colName} ILIKE '%${value, operator}%'`);\n orClauses.push(`${formatWherePart(value, queryListFilterOperators.containsOr)}`);\n break;\n case queryListFilterOperators.anyOfOr:\n orClauses.push(`${colName} IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.excludeOfOr:\n orClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.moreThanEqOr:\n orClauses.push(`${colName} >= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.lessThanEqOr:\n orClauses.push(`${colName} <= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.isNullOr:\n orClauses.push(`${colName} IS NULL`);\n break;\n }\n\n colNames.push(colName)\n\n }\n\n const whereParts: string[] = [];\n if (andClauses.length) whereParts.push(`(${andClauses.join(\" AND \")})`);\n if (orClauses.length) whereParts.push(`(${orClauses.join(\" OR \")})`);\n\n // Extract aliasKeys before '.'\n const aliasKeys = Array.from(\n new Set(\n colNames\n .map(key => key.match(/\\b([a-zA-Z_][a-zA-Z0-9_]*)\\./)?.[1])\n .filter((v): v is string => Boolean(v)) // type guard keeps only valid strings\n )\n );\n\n return {\n where: whereParts.length ? `${whereParts.join(\" AND \")}` : \"\",\n colNames,\n aliasKeys\n }\n};\n\n/** Build ORDER BY clause */\nexport const buildSqlOrderBy = (sortField: QueryList[\"sortfield\"], sortOrder: QueryList[\"sortorder\"]) =>\n sortField ? `ORDER BY ${sortField} ${sortOrder.toUpperCase()}` : \"\";\n\n/** Build LIMIT/OFFSET clause */\nexport const buildSqlLimitOffset = (limit?: QueryList[\"limit\"], offset?: QueryList[\"offset\"]) => {\n const parts: string[] = [];\n\n const _limit = Number(limit ?? 10)\n const _offset = Number(offset ?? 0)\n\n if (_limit !== undefined) parts.push(`LIMIT ${_limit}`);\n if (_offset !== undefined) parts.push(`OFFSET ${_offset}`);\n\n return parts.join(\" \");\n};\n\n/** For Injection Fields */\nexport const buildInjectionFieldsSqlSelect = (alias: string, activeInjectionFields: any[] = []) => {\n return activeInjectionFields.reduce((acc, col) => {\n\n // check the field type is decimal\n let castValue = ``\n\n if (col?.fieldType === \"numeric\") {\n castValue = `::float`\n }\n\n if (col?.fieldType === \"integer\") {\n castValue = `::int`\n }\n\n acc[`${alias}.${col?.fieldName}${castValue}`] = `inf_${col?.fieldName}`;\n return acc;\n }, {} as Record<string, string>);\n}\n\n/**\n * Executes a dynamic SQL listing query along with a count query.\n * \n * This function builds SQL SELECT and COUNT statements using the provided\n * relation maps, filters, and query options, then executes them through\n * the given Prisma model's `raw()` method.\n *\n * Commonly used for paginated data listings that require both the\n * result set and total record count.\n * \n * Returns an object containing:\n * - `data`: The paginated result set.\n * - `total`: The total count of records that match the filters.\n */\nexport const getListWithCount = async ({\n model,\n tableName,\n mainAlias,\n countKey,\n sqlRelationMaps,\n accountId,\n filters,\n filterColumns,\n sqlSelect,\n sqlSelectAgg,\n sqlRelation,\n sqlRelationAgg,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n}: {\n model: any,\n tableName: string,\n mainAlias: string,\n countKey: string,\n sqlRelationMaps: any,\n accountId: number,\n filters: any[],\n filterColumns: any,\n sqlSelect: string[]\n sqlSelectAgg: string[],\n sqlRelation: string[]\n sqlRelationAgg: string[],\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string\n sqlLimitOffset: string\n}) => {\n\n const requestWhere = buildSqlWhere(filters, filterColumns)\n\n sqlWhere = [\n ...sqlWhere,\n ...(filters.length ? [requestWhere?.where] : []),\n ]\n\n // get the data (pagination)\n const sqlRaw = buildSqlRawSelect({\n tableName,\n mainAlias,\n accountId,\n sqlSelect: [...sqlSelect, ...sqlSelectAgg],\n sqlRelation: [...sqlRelation, ...sqlRelationAgg],\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n let data = await model.raw(sqlRaw)\n\n let aliasKeys = requestWhere?.aliasKeys\n\n let filteredArray: any = Object.entries(sqlRelationMaps)\n .filter(([key]) => aliasKeys.includes(key))\n .map(([_, value]) => value);\n\n // console.log('filteredArray', JSON.stringify(filteredArray), aliasKeys)\n\n // get the count\n const sqlRawCount = buildSqlRawSelectCount({\n tableName,\n mainAlias,\n accountId,\n sqlSelect: [`${mainAlias}.${countKey}`],\n sqlRelation: filteredArray,\n sqlWhere,\n sqlGroupBy: [`${mainAlias}.${countKey}`],\n sqlOrderby: ``\n })\n\n let count = await model.raw(sqlRawCount)\n\n return {\n data,\n total: Number(count[0].filtered_count)\n }\n\n}"]}
|
|
1
|
+
{"version":3,"file":"queryBuilder.js","sourceRoot":"","sources":["../../../src/lib/query_builder/queryBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { queryListFilterOperators } from '@/schema/common';\nimport { QueryList, QueryListFilter } from \"@/schema/common\";\nimport { throwError } from '@/utils';\n\ntype SqlDialect = \"postgres\" | \"mysql\";\ntype JoinType = \"left\" | \"inner\" | \"right\";\n\n/**\n * Create a typed map of model fields for safer access in raw queries.\n *\n * This utility takes a TypeScript model type `T` and returns an object\n * where each key is the field name and the value is the same string.\n * \n * The returned object can be used for dot-suggestion, reducing typos\n * when referencing columns in SQL queries.\n *\n * @example\n * import type { Customer } from \"@prisma/client\";\n * import { createFields } from \"@/utils/createFields\";\n * \n * const CustomerFields = createFields<Customer>();\n * console.log(CustomerFields.id); // \"id\"\n * console.log(CustomerFields.name); // \"name\"\n * \n * const query = `SELECT ${CustomerFields.id}, ${CustomerFields.name} FROM customers`;\n */\ntype FieldMap<T> = {\n [K in keyof T]: K;\n};\n\nexport function getFieldsByType<T>(): FieldMap<T> {\n return new Proxy({} as FieldMap<T>, {\n get: (_, prop) => prop,\n }) as FieldMap<T>;\n}\n\ntype FieldMeta = { name: string; type: string };\n\nexport const toFieldMap = (\n fields: FieldMeta[],\n prefix = \"uip\",\n infix = \"inf_\"\n): Record<string, string> => {\n return Object.fromEntries(\n fields.map(f => [`${prefix}.${f.name}`, `${infix}${f.name}`])\n );\n}\n\nexport const buildSqlRawSelect = ({\n tableName,\n mainAlias,\n accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId = false\n}: {\n tableName: string,\n mainAlias: string,\n accountId: number,\n sqlSelect: string[]\n sqlRelation: string[]\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string\n sqlLimitOffset: string\n skipFilterAccountId?: boolean\n}) => {\n\n if (skipFilterAccountId === false) {\n sqlWhere = [...sqlWhere, `${mainAlias}.accountid = ${accountId}`]\n }\n\n return `SELECT \n ${sqlSelect.join(\",\")}\n FROM \n ${tableName} as ${mainAlias}\n ${sqlRelation.join(\" \")}\n ${sqlWhere.length > 0 ? `WHERE ${sqlWhere.join(' and ')}` : ``}\n ${sqlGroupBy.length > 0 ? `GROUP BY ${sqlGroupBy.join(\",\")}` : \"\"}\n ${sqlOrderby} \n ${sqlLimitOffset}\n `\n}\n\n\n// export const buildSqlRawSelectCount = ({\n// tableName,\n// mainAlias,\n// accountId,\n// sqlSelect,\n// sqlRelation,\n// sqlWhere,\n// sqlGroupBy,\n// sqlOrderby,\n// skipFilterAccountId = false\n// }: {\n// tableName: string,\n// mainAlias: string,\n// accountId: number,\n// sqlSelect: string[]\n// sqlRelation: string[]\n// sqlWhere: string[]\n// sqlGroupBy: string[]\n// sqlOrderby: string,\n// skipFilterAccountId?: boolean\n// }) => {\n\n// const sql = buildSqlRawSelect({\n// tableName,\n// mainAlias,\n// accountId,\n// sqlSelect,\n// sqlRelation,\n// sqlWhere,\n// sqlGroupBy,\n// sqlOrderby,\n// sqlLimitOffset: \"\",\n// skipFilterAccountId\n// })\n\n// return `WITH filtered_docs AS (${sql}) SELECT COUNT(*) AS filtered_count FROM filtered_docs;`\n// }\n\nexport const buildSqlRawSelectCount = ({\n tableName,\n mainAlias,\n accountId,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n skipFilterAccountId = false\n}: {\n tableName: string,\n mainAlias: string,\n accountId: number,\n sqlSelect: string[] // ignored on purpose\n sqlRelation: string[]\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string // ignored on purpose\n skipFilterAccountId?: boolean\n}) => {\n\n // enforce account isolation\n if (!skipFilterAccountId) {\n sqlWhere = [\n ...sqlWhere,\n `${mainAlias}.accountid = ${accountId}`\n ]\n }\n\n const baseQuery = `\n FROM ${tableName} AS ${mainAlias}\n ${sqlRelation.join(\" \")}\n ${sqlWhere.length > 0 ? `WHERE ${sqlWhere.join(\" AND \")}` : \"\"}\n `\n\n // CASE 1: no grouping → FASTEST PATH\n if (!sqlGroupBy.length) {\n return `\n SELECT COUNT(*)\n ${baseQuery}\n `\n }\n\n // CASE 2: grouping → safe count of grouped results\n return `\n SELECT COUNT(*)\n FROM (\n SELECT 1\n ${baseQuery}\n GROUP BY ${sqlGroupBy.join(\",\")}\n ) t\n `\n}\n\n/**\n * Build a SQL join clause\n * @param joinType - \"left\" | \"inner\" | \"right\" (default: \"left\")\n * @param sourceAlias - alias of the source table, e.g., \"cus\"\n * @param targetTable - table to join, e.g., \"users\"\n * @param targetAlias - alias for the target table, e.g., \"usr\"\n * @param onConditions - array of ON conditions, e.g., [\"cus.user_id = usr.user_id\", \"usr.isdelete = false\"]\n */\nexport const buildSqlRelation = (\n joinType: JoinType,\n sourceAlias: string,\n targetTable: string,\n targetAlias: string,\n onConditions: string[]\n) => {\n return `\n ${joinType} join ${targetTable} as ${targetAlias}\n on ${onConditions.join(\" and \")}\n `;\n}\n/**\n * Build a SQL SELECT column list with aliases\n *\n * This function takes a table alias and a mapping of column names to\n * desired aliases, and returns a comma-separated string suitable for\n * inclusion in a SQL SELECT statement.\n *\n * @param abb - The alias of the table in the SQL query (e.g., \"cus\" for customers)\n * @param columns - An object mapping column names to their desired aliases\n * e.g., { id: \"customerId\", name: \"customerName\" }\n * @returns A string of columns with aliases, e.g.,\n * \"cus.id as customerId, cus.name as customerName\"\n *\n * @example\n * const cols = buildSqlSelect(\"cus\", { id: \"customerId\", name: \"customerName\" });\n * // cols => \"cus.id as customerId, cus.name as customerName\"\n */\nexport const buildSqlSelect = (abb: string, columns: Record<string, string>): string => {\n\n if (!columns || Object.keys(columns).length === 0) return \"\";\n\n return Object.entries(columns)\n .map(([col, alias]) => `${abb ? abb + \".\" : \"\"}${col} as ${alias}`)\n .join(\", \");\n}\n\nexport const buildSqlWhere = (\n filters: QueryListFilter[] | undefined,\n selectColumns: any,\n ctx: { dialect: SqlDialect } = {\n dialect: \"postgres\"\n }\n): {\n where: string,\n colNames: string[],\n aliasKeys: string[]\n} => {\n\n if (!filters || filters.length === 0) {\n return {\n where: ``,\n colNames: [],\n aliasKeys: []\n }\n }\n\n const andClauses: string[] = [];\n const orClauses: string[] = [];\n\n // const col = (field: string) => (tableAlias ? `${tableAlias}.${field}` : field);\n\n const col = (field: string) => {\n let filteredColumns = Object.fromEntries(\n Object.entries(selectColumns).filter(([key, alias]) => alias === field)\n )\n return filteredColumns ? Object.keys(filteredColumns)[0] : field\n }\n\n const colNames: string[] = []\n\n for (const filter of filters) {\n if (!filter) continue;\n\n const { field, operator, value } = filter;\n\n // const formatValue = (val: any, prefix?: string, suffix?: string) => \n // typeof val === \"string\" ? `'${prefix ?? \"\"}${val.replace(/'/g, \"''\")}${suffix ?? \"\"}'` : val;\n\n const formatValue = (\n val: any,\n operator: QueryListFilter[\"operator\"],\n prefix?: string,\n suffix?: string\n ) => {\n\n let returnValue = val\n let sqlValuePrefix = ``\n let sqlValueSuffix = ``\n\n if (operator === queryListFilterOperators.startsWith) {\n sqlValuePrefix = ``\n sqlValueSuffix = `%`\n }\n\n if (operator === queryListFilterOperators.endsWith) {\n sqlValuePrefix = `%`\n sqlValueSuffix = ``\n }\n\n if (\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n sqlValuePrefix = `%`\n sqlValueSuffix = `%`\n }\n\n // override\n if (prefix) sqlValuePrefix = prefix\n if (suffix) sqlValueSuffix = suffix\n\n if (typeof val === \"string\") {\n returnValue = `'${sqlValuePrefix ?? \"\"}${val.replace(/'/g, \"''\")}${sqlValueSuffix ?? \"\"}'`\n }\n\n // check the type of val must string & operator is using like\n if (\n operator === queryListFilterOperators.startsWith ||\n operator === queryListFilterOperators.endsWith ||\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n if (typeof val !== \"string\") {\n throwError(`Filters part:${field} using:${operator} like the val must be string`)\n }\n }\n\n return returnValue\n\n }\n\n const formatWherePart = (val: any, operator: QueryListFilter[\"operator\"]) => {\n\n let sqlOperator: string = operator\n\n // check with like operator\n if (\n operator === queryListFilterOperators.startsWith ||\n operator === queryListFilterOperators.endsWith ||\n operator === queryListFilterOperators.contains ||\n operator === queryListFilterOperators.containsOr\n ) {\n sqlOperator = ctx.dialect === \"postgres\" ? `ILIKE` : `LIKE` // only ILIKE supported in postgres\n }\n\n // not array in value\n if (Array.isArray(value) === false) {\n\n let sqlValue = formatValue(val, operator)\n return `${colName} ${sqlOperator} ${sqlValue}`\n\n }\n\n // for array in value\n let subOrQuery: string[] = []\n\n value.forEach((i: any) => {\n\n let sqlValue = `${formatValue(i, operator)}`\n\n subOrQuery.push(`${colName} ${sqlOperator} ${sqlValue}`)\n\n })\n\n return `(${subOrQuery.join(\" OR \")})`\n\n }\n\n const colName = `${col(field)}`\n\n switch (operator) {\n case queryListFilterOperators.eq:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.eq)}`);\n // andClauses.push(`${colName} = ${formatValue(value)}`);\n break;\n case queryListFilterOperators.notEq:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.notEq)}`);\n // andClauses.push(`${colName} != ${formatValue(value)}`);\n break;\n case queryListFilterOperators.startsWith:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.startsWith)}`);\n // andClauses.push(`${colName} ILIKE '${value}%'`);\n break;\n case queryListFilterOperators.endsWith:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.endsWith)}`);\n // andClauses.push(`${colName} ILIKE '%${value}'`);\n break;\n case queryListFilterOperators.contains:\n andClauses.push(`${formatWherePart(value, queryListFilterOperators.contains)}`);\n // andClauses.push(`${colName} ILIKE '%${value}%'`);\n break;\n case queryListFilterOperators.anyOf:\n andClauses.push(`${colName} IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.excludeOf:\n andClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.moreThanEq:\n andClauses.push(`${colName} >= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.lessThanEq:\n andClauses.push(`${colName} <= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.isNull:\n andClauses.push(`${colName} IS NULL`);\n break;\n case queryListFilterOperators.isNotNull:\n andClauses.push(`${colName} IS NOT NULL`);\n break;\n\n // Or-variants\n case queryListFilterOperators.eqOr:\n // orClauses.push(`${colName} = ${formatValue(value, operator)}`);\n orClauses.push(`${formatWherePart(value, queryListFilterOperators.eqOr)}`);\n break;\n case queryListFilterOperators.containsOr:\n // orClauses.push(`${colName} ILIKE '%${value, operator}%'`);\n orClauses.push(`${formatWherePart(value, queryListFilterOperators.containsOr)}`);\n break;\n case queryListFilterOperators.anyOfOr:\n orClauses.push(`${colName} IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.excludeOfOr:\n orClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(\", \")})`);\n break;\n case queryListFilterOperators.moreThanEqOr:\n orClauses.push(`${colName} >= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.lessThanEqOr:\n orClauses.push(`${colName} <= ${formatValue(value, operator)}`);\n break;\n case queryListFilterOperators.isNullOr:\n orClauses.push(`${colName} IS NULL`);\n break;\n }\n\n colNames.push(colName)\n\n }\n\n const whereParts: string[] = [];\n if (andClauses.length) whereParts.push(`(${andClauses.join(\" AND \")})`);\n if (orClauses.length) whereParts.push(`(${orClauses.join(\" OR \")})`);\n\n // Extract aliasKeys before '.'\n const aliasKeys = Array.from(\n new Set(\n colNames\n .map(key => key.match(/\\b([a-zA-Z_][a-zA-Z0-9_]*)\\./)?.[1])\n .filter((v): v is string => Boolean(v)) // type guard keeps only valid strings\n )\n );\n\n return {\n where: whereParts.length ? `${whereParts.join(\" AND \")}` : \"\",\n colNames,\n aliasKeys\n }\n};\n\n/** Build ORDER BY clause */\nexport const buildSqlOrderBy = (sortField: QueryList[\"sortfield\"], sortOrder: QueryList[\"sortorder\"]) =>\n sortField ? `ORDER BY ${sortField} ${sortOrder.toUpperCase()}` : \"\";\n\n/** Build LIMIT/OFFSET clause */\nexport const buildSqlLimitOffset = (limit?: QueryList[\"limit\"], offset?: QueryList[\"offset\"]) => {\n const parts: string[] = [];\n\n const _limit = Number(limit ?? 10)\n const _offset = Number(offset ?? 0)\n\n if (_limit !== undefined) parts.push(`LIMIT ${_limit}`);\n if (_offset !== undefined) parts.push(`OFFSET ${_offset}`);\n\n return parts.join(\" \");\n};\n\n/** For Injection Fields */\nexport const buildInjectionFieldsSqlSelect = (alias: string, activeInjectionFields: any[] = []) => {\n return activeInjectionFields.reduce((acc, col) => {\n\n // check the field type is decimal\n let castValue = ``\n\n if (col?.fieldType === \"numeric\") {\n castValue = `::float`\n }\n\n if (col?.fieldType === \"integer\") {\n castValue = `::int`\n }\n\n acc[`${alias}.${col?.fieldName}${castValue}`] = `inf_${col?.fieldName}`;\n return acc;\n }, {} as Record<string, string>);\n}\n\n/**\n * Executes a dynamic SQL listing query along with a count query.\n * \n * This function builds SQL SELECT and COUNT statements using the provided\n * relation maps, filters, and query options, then executes them through\n * the given Prisma model's `raw()` method.\n *\n * Commonly used for paginated data listings that require both the\n * result set and total record count.\n * \n * Returns an object containing:\n * - `data`: The paginated result set.\n * - `total`: The total count of records that match the filters.\n */\nexport const getListWithCount = async ({\n model,\n tableName,\n mainAlias,\n countKey,\n sqlRelationMaps,\n accountId,\n filters,\n filterColumns,\n sqlSelect,\n sqlSelectAgg,\n sqlRelation,\n sqlRelationAgg,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n}: {\n model: any,\n tableName: string,\n mainAlias: string,\n countKey: string,\n sqlRelationMaps: any,\n accountId: number,\n filters: any[],\n filterColumns: any,\n sqlSelect: string[]\n sqlSelectAgg: string[],\n sqlRelation: string[]\n sqlRelationAgg: string[],\n sqlWhere: string[]\n sqlGroupBy: string[]\n sqlOrderby: string\n sqlLimitOffset: string\n}) => {\n\n const requestWhere = buildSqlWhere(filters, filterColumns)\n\n sqlWhere = [\n ...sqlWhere,\n ...(filters.length ? [requestWhere?.where] : []),\n ]\n\n // get the data (pagination)\n const sqlRaw = buildSqlRawSelect({\n tableName,\n mainAlias,\n accountId,\n sqlSelect: [...sqlSelect, ...sqlSelectAgg],\n sqlRelation: [...sqlRelation, ...sqlRelationAgg],\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n let data = await model.raw(sqlRaw)\n\n let aliasKeys = requestWhere?.aliasKeys\n\n let filteredArray: any = Object.entries(sqlRelationMaps)\n .filter(([key]) => aliasKeys.includes(key))\n .map(([_, value]) => value);\n\n // console.log('filteredArray', JSON.stringify(filteredArray), aliasKeys)\n\n // get the count\n const sqlRawCount = buildSqlRawSelectCount({\n tableName,\n mainAlias,\n accountId,\n sqlSelect: [`${mainAlias}.${countKey}`],\n sqlRelation: filteredArray,\n sqlWhere,\n // sqlGroupBy: [`${mainAlias}.${countKey}`],\n sqlGroupBy: [],\n sqlOrderby: ``\n })\n\n let count = await model.raw(sqlRawCount)\n\n return {\n data,\n total: Number(count[0].filtered_count)\n }\n\n}"]}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// import {
|
|
3
|
+
// ModelUserFields,
|
|
4
|
+
// ModelSchedulerLogFields,
|
|
5
|
+
// ModelSchedulerRequestFields
|
|
6
|
+
// } from "../../models"
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.getDocumentProfileRelationMaps = void 0;
|
|
9
|
+
const queryBuilder_1 = require("./queryBuilder");
|
|
10
|
+
const getDocumentProfileRelationMaps = () => {
|
|
11
|
+
let relationKeys = {
|
|
12
|
+
creator: "creator",
|
|
13
|
+
updater: "updater"
|
|
14
|
+
};
|
|
15
|
+
let sqlRelationMaps = {
|
|
16
|
+
creator: (0, queryBuilder_1.buildSqlRelation)("left", "docpro", "users", "creator", ["docpro.createuserid = creator.user_id", "creator.isdelete = false", "creator.istrash = false"]),
|
|
17
|
+
updater: (0, queryBuilder_1.buildSqlRelation)("left", "docpro", "users", "updater", ["docpro.updateuserid = updater.user_id", "updater.isdelete = false", "updater.istrash = false"])
|
|
18
|
+
};
|
|
19
|
+
return {
|
|
20
|
+
sqlRelationMaps,
|
|
21
|
+
relationKeys
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
exports.getDocumentProfileRelationMaps = getDocumentProfileRelationMaps;
|
|
25
|
+
// export const buildSchedulerLogMainSqlSelect = () => {
|
|
26
|
+
// return {
|
|
27
|
+
// [`slog.${ModelSchedulerLogFields.scheduler_log_id}`]: "scheduler_log_id",
|
|
28
|
+
// [`slog.${ModelSchedulerLogFields.scheduler_task_id}`]: "scheduler_task_id",
|
|
29
|
+
// [`slog.${ModelSchedulerLogFields.field_module}`]: "field_module",
|
|
30
|
+
// [`slog.${ModelSchedulerLogFields.field_ref}`]: "field_ref",
|
|
31
|
+
// [`slog.${ModelSchedulerLogFields.flow_type}`]: "flow_type",
|
|
32
|
+
// [`slog.${ModelSchedulerLogFields.destination_type}`]: "destination_type",
|
|
33
|
+
// [`slog.${ModelSchedulerLogFields.destination_entity_id}`]: "destination_entity_id",
|
|
34
|
+
// [`slog.${ModelSchedulerLogFields.destination_entity_label}`]: "destination_entity_label",
|
|
35
|
+
// [`slog.${ModelSchedulerLogFields.destination_submit_payload}`]: "destination_submit_payload",
|
|
36
|
+
// [`slog.${ModelSchedulerLogFields.destination_submit_response}`]: "destination_submit_response",
|
|
37
|
+
// [`slog.${ModelSchedulerLogFields.source_type}`]: "source_type",
|
|
38
|
+
// [`slog.${ModelSchedulerLogFields.source_entity_id}`]: "source_entity_id",
|
|
39
|
+
// [`slog.${ModelSchedulerLogFields.source_entity_label}`]: "source_entity_label",
|
|
40
|
+
// [`slog.${ModelSchedulerLogFields.source_entity_data}`]: "source_entity_data",
|
|
41
|
+
// [`slog.${ModelSchedulerLogFields.log_action}`]: "log_action",
|
|
42
|
+
// [`slog.${ModelSchedulerLogFields.log_label}`]: "log_label",
|
|
43
|
+
// [`slog.${ModelSchedulerLogFields.log_message}`]: "log_message",
|
|
44
|
+
// [`slog.${ModelSchedulerLogFields.log_status}`]: "log_status",
|
|
45
|
+
// }
|
|
46
|
+
// }
|
|
47
|
+
// export const buildSchedulerRequestMainSqlSelect = () => {
|
|
48
|
+
// return {
|
|
49
|
+
// [`sreq.${ModelSchedulerRequestFields.scheduler_request_id}`]: "scheduler_request_id",
|
|
50
|
+
// [`sreq.${ModelSchedulerRequestFields.integration_id}`]: "integration_id",
|
|
51
|
+
// [`sreq.${ModelSchedulerRequestFields.field_module}`]: "field_module",
|
|
52
|
+
// [`sreq.${ModelSchedulerRequestFields.field_ref}`]: "field_ref",
|
|
53
|
+
// [`sreq.${ModelSchedulerRequestFields.source_entity_id}`]: "source_entity_id",
|
|
54
|
+
// [`sreq.${ModelSchedulerRequestFields.source_entity_label}`]: "source_entity_label",
|
|
55
|
+
// [`sreq.${ModelSchedulerRequestFields.source_entity_data}`]: "source_entity_data",
|
|
56
|
+
// [`sreq.${ModelSchedulerRequestFields.destination_entity_id}`]: "destination_entity_id",
|
|
57
|
+
// [`sreq.${ModelSchedulerRequestFields.destination_entity_label}`]: "destination_entity_label",
|
|
58
|
+
// [`sreq.${ModelSchedulerRequestFields.request_action}`]: "request_action",
|
|
59
|
+
// [`sreq.${ModelSchedulerRequestFields.attempt_datetime}`]: "attempt_datetime",
|
|
60
|
+
// [`sreq.${ModelSchedulerRequestFields.attempt_no}::float`]: "attempt_no",
|
|
61
|
+
// [`sreq.${ModelSchedulerRequestFields.attempt_result}`]: "attempt_result",
|
|
62
|
+
// [`sreq.${ModelSchedulerRequestFields.attempt_status}`]: "attempt_status",
|
|
63
|
+
// }
|
|
64
|
+
// }
|
|
65
|
+
// export const buildSchedulerLogDefaultSqlSelect = () => {
|
|
66
|
+
// return {
|
|
67
|
+
// [`slog.${ModelSchedulerLogFields.createdatetime}`]: "createdatetime",
|
|
68
|
+
// [`creator.${ModelUserFields.login_username}`]: "createusername",
|
|
69
|
+
// [`slog.${ModelSchedulerLogFields.updatedatetime}`]: "updatedatetime",
|
|
70
|
+
// [`updater.${ModelUserFields.login_username}`]: "updateusername",
|
|
71
|
+
// [`slog.${ModelSchedulerLogFields.isdelete}`]: "isdelete",
|
|
72
|
+
// [`slog.${ModelSchedulerLogFields.istrash}`]: "istrash",
|
|
73
|
+
// [`slog.${ModelSchedulerLogFields.accountid}`]: "accountid",
|
|
74
|
+
// }
|
|
75
|
+
// }
|
|
76
|
+
// export const buildSchedulerRequestDefaultSqlSelect = () => {
|
|
77
|
+
// return {
|
|
78
|
+
// [`sreq.${ModelSchedulerRequestFields.createdatetime}`]: "createdatetime",
|
|
79
|
+
// [`creator.${ModelUserFields.login_username}`]: "createusername",
|
|
80
|
+
// [`sreq.${ModelSchedulerRequestFields.updatedatetime}`]: "updatedatetime",
|
|
81
|
+
// [`updater.${ModelUserFields.login_username}`]: "updateusername",
|
|
82
|
+
// [`sreq.${ModelSchedulerRequestFields.isdelete}`]: "isdelete",
|
|
83
|
+
// [`sreq.${ModelSchedulerRequestFields.istrash}`]: "istrash",
|
|
84
|
+
// [`sreq.${ModelSchedulerRequestFields.accountid}`]: "accountid",
|
|
85
|
+
// }
|
|
86
|
+
// }
|
|
87
|
+
//# sourceMappingURL=queryDocumentProfile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryDocumentProfile.js","sourceRoot":"","sources":["../../../src/lib/query_builder/queryDocumentProfile.ts"],"names":[],"mappings":";AAAA,WAAW;AACX,uBAAuB;AACvB,+BAA+B;AAC/B,kCAAkC;AAClC,oBAAoB;;;AAEpB,iDAAkD;AAE3C,MAAM,8BAA8B,GAAG,GAAG,EAAE;IAE/C,IAAI,YAAY,GAAG;QACf,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,SAAS;KACrB,CAAC;IAEF,IAAI,eAAe,GAA2E;QAC1F,OAAO,EAAE,IAAA,+BAAgB,EAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,uCAAuC,EAAE,0BAA0B,EAAE,yBAAyB,CAAC,CAAC;QACjK,OAAO,EAAE,IAAA,+BAAgB,EAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,uCAAuC,EAAE,0BAA0B,EAAE,yBAAyB,CAAC,CAAC;KACpK,CAAC;IAEF,OAAO;QACH,eAAe;QACf,YAAY;KACf,CAAA;AAEL,CAAC,CAAA;AAjBY,QAAA,8BAA8B,kCAiB1C;AAED,wDAAwD;AACxD,eAAe;AACf,oFAAoF;AACpF,sFAAsF;AACtF,4EAA4E;AAC5E,sEAAsE;AACtE,sEAAsE;AACtE,oFAAoF;AACpF,8FAA8F;AAC9F,oGAAoG;AACpG,wGAAwG;AACxG,0GAA0G;AAC1G,0EAA0E;AAC1E,oFAAoF;AACpF,0FAA0F;AAC1F,wFAAwF;AACxF,wEAAwE;AACxE,sEAAsE;AACtE,0EAA0E;AAC1E,wEAAwE;AACxE,QAAQ;AACR,IAAI;AAEJ,4DAA4D;AAC5D,eAAe;AACf,gGAAgG;AAChG,oFAAoF;AACpF,gFAAgF;AAChF,0EAA0E;AAC1E,wFAAwF;AACxF,8FAA8F;AAC9F,4FAA4F;AAC5F,kGAAkG;AAClG,wGAAwG;AACxG,oFAAoF;AACpF,wFAAwF;AACxF,mFAAmF;AACnF,oFAAoF;AACpF,oFAAoF;AACpF,QAAQ;AACR,IAAI;AAEJ,2DAA2D;AAC3D,eAAe;AACf,gFAAgF;AAChF,2EAA2E;AAC3E,gFAAgF;AAChF,2EAA2E;AAC3E,oEAAoE;AACpE,kEAAkE;AAClE,sEAAsE;AACtE,QAAQ;AACR,IAAI;AAEJ,+DAA+D;AAC/D,eAAe;AACf,oFAAoF;AACpF,2EAA2E;AAC3E,oFAAoF;AACpF,2EAA2E;AAC3E,wEAAwE;AACxE,sEAAsE;AACtE,0EAA0E;AAC1E,QAAQ;AACR,IAAI","sourcesContent":["// import {\n// ModelUserFields,\n// ModelSchedulerLogFields,\n// ModelSchedulerRequestFields\n// } from \"@/models\"\n\nimport { buildSqlRelation } from \"./queryBuilder\";\n\nexport const getDocumentProfileRelationMaps = () => {\n\n let relationKeys = {\n creator: \"creator\",\n updater: \"updater\"\n };\n\n let sqlRelationMaps: Record<keyof typeof relationKeys, ReturnType<typeof buildSqlRelation>> = {\n creator: buildSqlRelation(\"left\", \"docpro\", \"users\", \"creator\", [\"docpro.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n updater: buildSqlRelation(\"left\", \"docpro\", \"users\", \"updater\", [\"docpro.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n };\n\n return {\n sqlRelationMaps,\n relationKeys\n }\n\n}\n\n// export const buildSchedulerLogMainSqlSelect = () => {\n// return {\n// [`slog.${ModelSchedulerLogFields.scheduler_log_id}`]: \"scheduler_log_id\",\n// [`slog.${ModelSchedulerLogFields.scheduler_task_id}`]: \"scheduler_task_id\",\n// [`slog.${ModelSchedulerLogFields.field_module}`]: \"field_module\",\n// [`slog.${ModelSchedulerLogFields.field_ref}`]: \"field_ref\",\n// [`slog.${ModelSchedulerLogFields.flow_type}`]: \"flow_type\",\n// [`slog.${ModelSchedulerLogFields.destination_type}`]: \"destination_type\",\n// [`slog.${ModelSchedulerLogFields.destination_entity_id}`]: \"destination_entity_id\",\n// [`slog.${ModelSchedulerLogFields.destination_entity_label}`]: \"destination_entity_label\",\n// [`slog.${ModelSchedulerLogFields.destination_submit_payload}`]: \"destination_submit_payload\",\n// [`slog.${ModelSchedulerLogFields.destination_submit_response}`]: \"destination_submit_response\",\n// [`slog.${ModelSchedulerLogFields.source_type}`]: \"source_type\",\n// [`slog.${ModelSchedulerLogFields.source_entity_id}`]: \"source_entity_id\",\n// [`slog.${ModelSchedulerLogFields.source_entity_label}`]: \"source_entity_label\",\n// [`slog.${ModelSchedulerLogFields.source_entity_data}`]: \"source_entity_data\",\n// [`slog.${ModelSchedulerLogFields.log_action}`]: \"log_action\",\n// [`slog.${ModelSchedulerLogFields.log_label}`]: \"log_label\",\n// [`slog.${ModelSchedulerLogFields.log_message}`]: \"log_message\",\n// [`slog.${ModelSchedulerLogFields.log_status}`]: \"log_status\",\n// }\n// }\n\n// export const buildSchedulerRequestMainSqlSelect = () => {\n// return {\n// [`sreq.${ModelSchedulerRequestFields.scheduler_request_id}`]: \"scheduler_request_id\",\n// [`sreq.${ModelSchedulerRequestFields.integration_id}`]: \"integration_id\",\n// [`sreq.${ModelSchedulerRequestFields.field_module}`]: \"field_module\",\n// [`sreq.${ModelSchedulerRequestFields.field_ref}`]: \"field_ref\",\n// [`sreq.${ModelSchedulerRequestFields.source_entity_id}`]: \"source_entity_id\",\n// [`sreq.${ModelSchedulerRequestFields.source_entity_label}`]: \"source_entity_label\",\n// [`sreq.${ModelSchedulerRequestFields.source_entity_data}`]: \"source_entity_data\",\n// [`sreq.${ModelSchedulerRequestFields.destination_entity_id}`]: \"destination_entity_id\",\n// [`sreq.${ModelSchedulerRequestFields.destination_entity_label}`]: \"destination_entity_label\",\n// [`sreq.${ModelSchedulerRequestFields.request_action}`]: \"request_action\",\n// [`sreq.${ModelSchedulerRequestFields.attempt_datetime}`]: \"attempt_datetime\",\n// [`sreq.${ModelSchedulerRequestFields.attempt_no}::float`]: \"attempt_no\",\n// [`sreq.${ModelSchedulerRequestFields.attempt_result}`]: \"attempt_result\",\n// [`sreq.${ModelSchedulerRequestFields.attempt_status}`]: \"attempt_status\",\n// }\n// }\n\n// export const buildSchedulerLogDefaultSqlSelect = () => {\n// return {\n// [`slog.${ModelSchedulerLogFields.createdatetime}`]: \"createdatetime\",\n// [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n// [`slog.${ModelSchedulerLogFields.updatedatetime}`]: \"updatedatetime\",\n// [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n// [`slog.${ModelSchedulerLogFields.isdelete}`]: \"isdelete\",\n// [`slog.${ModelSchedulerLogFields.istrash}`]: \"istrash\",\n// [`slog.${ModelSchedulerLogFields.accountid}`]: \"accountid\",\n// }\n// }\n\n// export const buildSchedulerRequestDefaultSqlSelect = () => {\n// return {\n// [`sreq.${ModelSchedulerRequestFields.createdatetime}`]: \"createdatetime\",\n// [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n// [`sreq.${ModelSchedulerRequestFields.updatedatetime}`]: \"updatedatetime\",\n// [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n// [`sreq.${ModelSchedulerRequestFields.isdelete}`]: \"isdelete\",\n// [`sreq.${ModelSchedulerRequestFields.istrash}`]: \"istrash\",\n// [`sreq.${ModelSchedulerRequestFields.accountid}`]: \"accountid\",\n// }\n// }"]}
|