diff --git a/dist/package-shared/functions/api/query/get.d.ts b/dist/package-shared/functions/api/query/get.d.ts index dd1168e..c065b20 100644 --- a/dist/package-shared/functions/api/query/get.d.ts +++ b/dist/package-shared/functions/api/query/get.d.ts @@ -1,10 +1,11 @@ import { DbContextsArray } from "../../backend/db/runQuery"; -import { ServerQueryParam } from "../../../types"; -type Param = { - query: string | { - query: ServerQueryParam; - table: string; - }; +import { ApiGetQueryObject } from "../../../types"; +type Param = { + query: string | ApiGetQueryObject; queryValues?: (string | number)[]; dbFullName: string; tableName?: string; @@ -15,5 +16,9 @@ type Param = { /** * # Get Function FOr API */ -export default function apiGet({ query, dbFullName, queryValues, tableName, dbSchema, debug, dbContext, }: Param): Promise; +export default function apiGet({ query, dbFullName, queryValues, tableName, dbSchema, debug, dbContext, }: Param): Promise; export {}; diff --git a/dist/package-shared/functions/dsql/sql/sql-generator.d.ts b/dist/package-shared/functions/dsql/sql/sql-generator.d.ts index df66788..5bc2791 100644 --- a/dist/package-shared/functions/dsql/sql/sql-generator.d.ts +++ b/dist/package-shared/functions/dsql/sql/sql-generator.d.ts @@ -1,6 +1,10 @@ import { ServerQueryParam } from "../../../types"; -type Param = { - genObject?: ServerQueryParam; +type Param = { + genObject?: ServerQueryParam; tableName: string; dbFullName?: string; }; @@ -12,5 +16,9 @@ type Return = { * # SQL Query Generator * @description Generates an SQL Query for node module `mysql` or `serverless-mysql` */ -export default function sqlGenerator({ tableName, genObject, dbFullName, }: Param): Return; +export default function sqlGenerator({ tableName, genObject, dbFullName }: Param): Return; export {}; diff --git a/dist/package-shared/functions/dsql/sql/sql-generator.js b/dist/package-shared/functions/dsql/sql/sql-generator.js index 9336b58..527d191 100644 --- a/dist/package-shared/functions/dsql/sql/sql-generator.js +++ b/dist/package-shared/functions/dsql/sql/sql-generator.js @@ -5,7 +5,7 @@ exports.default = sqlGenerator; * # SQL Query Generator * @description Generates an SQL Query for node module `mysql` or `serverless-mysql` */ -function sqlGenerator({ tableName, genObject, dbFullName, }) { +function sqlGenerator({ tableName, genObject, dbFullName }) { if (!genObject) return undefined; const finalQuery = genObject.query ? genObject.query : undefined; @@ -201,8 +201,8 @@ function sqlGenerator({ tableName, genObject, dbFullName, }) { } if (genObject.order) queryString += ` ORDER BY ${genObject.join - ? `${finalDbName}${tableName}.${genObject.order.field}` - : genObject.order.field} ${genObject.order.strategy}`; + ? `${finalDbName}${tableName}.${String(genObject.order.field)}` + : String(genObject.order.field)} ${genObject.order.strategy}`; if (genObject.limit) queryString += ` LIMIT ${genObject.limit}`; if (genObject.offset) diff --git a/dist/package-shared/types/index.d.ts b/dist/package-shared/types/index.d.ts index 460960f..b76f60d 100644 --- a/dist/package-shared/types/index.d.ts +++ b/dist/package-shared/types/index.d.ts @@ -945,15 +945,16 @@ export type ServerQueryParam; limit?: number; + page?: number; offset?: number; order?: { - field: string; + field: keyof T; strategy: "ASC" | "DESC"; }; searchOperator?: (typeof ServerQueryOperators)[number]; searchEquality?: (typeof ServerQueryEqualities)[number]; addUserId?: { - fieldName: string; + fieldName: keyof T; }; join?: ServerQueryParamsJoin[]; [key: string]: any; @@ -1320,7 +1321,7 @@ export type DsqlCrudQueryObject = ServerQueryParam & { +}> = ServerQueryParam & { query?: ServerQueryQueryObject; }; export type DsqlCrudParam = { + query: string | ApiGetQueryObject; values?: (string | number)[]; }; -export default function apiGetGrabQueryAndValues({ query, values }: Param): { +export default function apiGetGrabQueryAndValues({ query, values }: Param): { query: string; values: (string | number)[] | undefined; valuesString: string | undefined; diff --git a/package-shared/functions/api/query/get.ts b/package-shared/functions/api/query/get.ts index 7626b11..8f2afc9 100644 --- a/package-shared/functions/api/query/get.ts +++ b/package-shared/functions/api/query/get.ts @@ -4,19 +4,15 @@ import _ from "lodash"; import serverError from "../../backend/serverError"; import runQuery, { DbContextsArray } from "../../backend/db/runQuery"; import { + ApiGetQueryObject, DSQL_TableSchemaType, GetReturn, ServerQueryParam, } from "../../../types"; import apiGetGrabQueryAndValues from "../../../utils/grab-query-and-values"; -type Param = { - query: - | string - | { - query: ServerQueryParam; - table: string; - }; +type Param = { + query: string | ApiGetQueryObject; queryValues?: (string | number)[]; dbFullName: string; tableName?: string; @@ -28,7 +24,9 @@ type Param = { /** * # Get Function FOr API */ -export default async function apiGet({ +export default async function apiGet< + T extends { [key: string]: any } = { [key: string]: any } +>({ query, dbFullName, queryValues, @@ -36,7 +34,7 @@ export default async function apiGet({ dbSchema, debug, dbContext, -}: Param): Promise { +}: Param): Promise { const queryAndValues = apiGetGrabQueryAndValues({ query, values: queryValues, diff --git a/package-shared/functions/dsql/sql/sql-generator.ts b/package-shared/functions/dsql/sql/sql-generator.ts index 7875e4b..09c8832 100644 --- a/package-shared/functions/dsql/sql/sql-generator.ts +++ b/package-shared/functions/dsql/sql/sql-generator.ts @@ -4,8 +4,8 @@ import { ServerQueryQueryObject, } from "../../../types"; -type Param = { - genObject?: ServerQueryParam; +type Param = { + genObject?: ServerQueryParam; tableName: string; dbFullName?: string; }; @@ -21,11 +21,9 @@ type Return = * # SQL Query Generator * @description Generates an SQL Query for node module `mysql` or `serverless-mysql` */ -export default function sqlGenerator({ - tableName, - genObject, - dbFullName, -}: Param): Return { +export default function sqlGenerator< + T extends { [key: string]: any } = { [key: string]: any } +>({ tableName, genObject, dbFullName }: Param): Return { if (!genObject) return undefined; const finalQuery = genObject.query ? genObject.query : undefined; @@ -276,8 +274,8 @@ export default function sqlGenerator({ if (genObject.order) queryString += ` ORDER BY ${ genObject.join - ? `${finalDbName}${tableName}.${genObject.order.field}` - : genObject.order.field + ? `${finalDbName}${tableName}.${String(genObject.order.field)}` + : String(genObject.order.field) } ${genObject.order.strategy}`; if (genObject.limit) queryString += ` LIMIT ${genObject.limit}`; diff --git a/package-shared/types/index.ts b/package-shared/types/index.ts index bcb7576..4196703 100644 --- a/package-shared/types/index.ts +++ b/package-shared/types/index.ts @@ -1098,15 +1098,16 @@ export type ServerQueryParam< selectFields?: string[]; query?: ServerQueryQueryObject; limit?: number; + page?: number; offset?: number; order?: { - field: string; + field: keyof T; strategy: "ASC" | "DESC"; }; searchOperator?: (typeof ServerQueryOperators)[number]; searchEquality?: (typeof ServerQueryEqualities)[number]; addUserId?: { - fieldName: string; + fieldName: keyof T; }; join?: ServerQueryParamsJoin[]; [key: string]: any; @@ -1500,7 +1501,7 @@ export const DsqlCrudActions = ["insert", "update", "delete", "get"] as const; export type DsqlCrudQueryObject< T extends { [key: string]: any } = { [key: string]: any } -> = ServerQueryParam & { +> = ServerQueryParam & { query?: ServerQueryQueryObject; }; diff --git a/package-shared/utils/data-fetching/method-crud.ts b/package-shared/utils/data-fetching/method-crud.ts index 7792b00..e7c4ce3 100644 --- a/package-shared/utils/data-fetching/method-crud.ts +++ b/package-shared/utils/data-fetching/method-crud.ts @@ -1,5 +1,11 @@ -import { DsqlMethodCrudParam, ServerQueryParam } from "../../types"; +import { + DsqlCrudQueryObject, + DsqlMethodCrudParam, + ServerQueryParam, +} from "../../types"; +import deserializeQuery from "../deserialize-query"; import EJSON from "../ejson"; +import numberfy from "../numberfy"; import dsqlCrud from "./crud"; export type APIDataCrudQuery = ServerQueryParam & { @@ -35,7 +41,9 @@ export default async function dsqlMethodCrud< try { let finalBody = body; - let finalQuery = query; + let finalQuery = deserializeQuery(query as any) as + | DsqlCrudQueryObject + | undefined; let LIMIT = 10; let PAGE = 1; @@ -55,8 +63,8 @@ export default async function dsqlMethodCrud< } }); - LIMIT = finalQuery.limit || 10; - PAGE = finalQuery.page || 1; + if (finalQuery.limit) LIMIT = numberfy(finalQuery.limit); + if (finalQuery.page) PAGE = numberfy(finalQuery.page); OFFSET = (PAGE - 1) * LIMIT; } diff --git a/package-shared/utils/grab-query-and-values.ts b/package-shared/utils/grab-query-and-values.ts index 1a439d8..0767036 100644 --- a/package-shared/utils/grab-query-and-values.ts +++ b/package-shared/utils/grab-query-and-values.ts @@ -1,11 +1,13 @@ import sqlGenerator from "../functions/dsql/sql/sql-generator"; import { ApiGetQueryObject } from "../types"; -type Param = { - query: string | ApiGetQueryObject; +type Param = { + query: string | ApiGetQueryObject; values?: (string | number)[]; }; -export default function apiGetGrabQueryAndValues({ query, values }: Param) { +export default function apiGetGrabQueryAndValues< + T extends { [key: string]: any } = { [key: string]: any } +>({ query, values }: Param) { const queryGenObject = typeof query == "string" ? undefined diff --git a/package.json b/package.json index 36e6d8c..588912c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@moduletrace/datasquirel", - "version": "3.9.2", + "version": "3.9.3", "description": "Cloud-based SQL data management tool", "main": "dist/index.js", "bin": {