storemw-core-api 1.0.104 → 1.0.106
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/query_builder/queryBuilder.js +62 -34
- package/dist/lib/query_builder/queryBuilder.js.map +1 -1
- package/dist/services/account/AccountService.d.ts +16 -5
- package/dist/services/account/AccountService.js +21 -12
- package/dist/services/account/AccountService.js.map +1 -1
- package/dist/services/region/RegionService.d.ts +17 -6
- package/dist/services/region/RegionService.js +17 -7
- package/dist/services/region/RegionService.js.map +1 -1
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.js +5 -3
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/serviceFactoryUtils.d.ts +17 -0
- package/dist/utils/serviceFactoryUtils.js +66 -0
- package/dist/utils/serviceFactoryUtils.js.map +1 -0
- package/package.json +1 -1
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getListWithCount = exports.buildInjectionFieldsSqlSelect = exports.buildSqlLimitOffset = exports.buildSqlOrderBy = exports.buildSqlWhere = exports.buildSqlSelect = exports.buildSqlRelation = exports.buildSqlRawSelectCount = exports.buildSqlRawSelect = exports.toFieldMap = void 0;
|
|
4
4
|
exports.getFieldsByType = getFieldsByType;
|
|
5
5
|
const common_1 = require("../../schema/common");
|
|
6
|
+
const utils_1 = require("../../utils");
|
|
6
7
|
function getFieldsByType() {
|
|
7
8
|
return new Proxy({}, {
|
|
8
9
|
get: (_, prop) => prop,
|
|
@@ -104,36 +105,61 @@ const buildSqlWhere = (filters, selectColumns) => {
|
|
|
104
105
|
if (!filter)
|
|
105
106
|
continue;
|
|
106
107
|
const { field, operator, value } = filter;
|
|
107
|
-
const formatValue = (val, prefix, suffix
|
|
108
|
-
|
|
108
|
+
// const formatValue = (val: any, prefix?: string, suffix?: string) =>
|
|
109
|
+
// typeof val === "string" ? `'${prefix ?? ""}${val.replace(/'/g, "''")}${suffix ?? ""}'` : val;
|
|
110
|
+
const formatValue = (val, operator, prefix, suffix) => {
|
|
111
|
+
let returnValue = val;
|
|
112
|
+
let sqlValuePrefix = ``;
|
|
113
|
+
let sqlValueSuffix = ``;
|
|
114
|
+
if (operator === common_1.queryListFilterOperators.startsWith) {
|
|
115
|
+
sqlValuePrefix = `%`;
|
|
116
|
+
sqlValueSuffix = ``;
|
|
117
|
+
}
|
|
118
|
+
if (operator === common_1.queryListFilterOperators.endsWith) {
|
|
119
|
+
sqlValuePrefix = ``;
|
|
120
|
+
sqlValueSuffix = `%`;
|
|
121
|
+
}
|
|
122
|
+
if (operator === common_1.queryListFilterOperators.contains) {
|
|
123
|
+
sqlValuePrefix = `%`;
|
|
124
|
+
sqlValueSuffix = `%`;
|
|
125
|
+
}
|
|
126
|
+
// override
|
|
127
|
+
if (prefix)
|
|
128
|
+
sqlValuePrefix = prefix;
|
|
129
|
+
if (suffix)
|
|
130
|
+
sqlValueSuffix = suffix;
|
|
131
|
+
if (typeof val === "string") {
|
|
132
|
+
returnValue = `'${sqlValuePrefix ?? ""}${val.replace(/'/g, "''")}${sqlValueSuffix ?? ""}'`;
|
|
133
|
+
}
|
|
134
|
+
// check the type of val must string & operator is using like
|
|
135
|
+
if (operator === common_1.queryListFilterOperators.startsWith ||
|
|
136
|
+
operator === common_1.queryListFilterOperators.endsWith ||
|
|
137
|
+
operator === common_1.queryListFilterOperators.contains ||
|
|
138
|
+
operator === common_1.queryListFilterOperators.containsOr) {
|
|
139
|
+
if (typeof val !== "string") {
|
|
140
|
+
(0, utils_1.throwError)(`Filters part:${field} using:${operator} like the val must be string`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return returnValue;
|
|
144
|
+
};
|
|
145
|
+
const formatWherePart = (val, operator) => {
|
|
109
146
|
let sqlOperator = operator;
|
|
110
147
|
// check with like operator
|
|
111
148
|
if (operator === common_1.queryListFilterOperators.startsWith ||
|
|
112
149
|
operator === common_1.queryListFilterOperators.endsWith ||
|
|
113
|
-
operator === common_1.queryListFilterOperators.contains
|
|
150
|
+
operator === common_1.queryListFilterOperators.contains ||
|
|
151
|
+
operator === common_1.queryListFilterOperators.containsOr) {
|
|
114
152
|
sqlOperator = `ILIKE`;
|
|
115
153
|
}
|
|
154
|
+
// not array in value
|
|
116
155
|
if (Array.isArray(value) === false) {
|
|
117
|
-
let sqlValue = formatValue(val);
|
|
156
|
+
let sqlValue = formatValue(val, operator);
|
|
118
157
|
return `${colName} ${sqlOperator} ${sqlValue}`;
|
|
119
158
|
}
|
|
159
|
+
// for array in value
|
|
120
160
|
let subOrQuery = [];
|
|
121
161
|
value.forEach((i) => {
|
|
122
|
-
let
|
|
123
|
-
let sqlValueSuffix = ``;
|
|
124
|
-
if (operator === common_1.queryListFilterOperators.startsWith) {
|
|
125
|
-
sqlValuePrefix = `%`;
|
|
126
|
-
sqlValueSuffix = ``;
|
|
127
|
-
}
|
|
128
|
-
if (operator === common_1.queryListFilterOperators.endsWith) {
|
|
129
|
-
sqlValuePrefix = ``;
|
|
130
|
-
sqlValueSuffix = `%`;
|
|
131
|
-
}
|
|
132
|
-
if (operator === common_1.queryListFilterOperators.contains) {
|
|
133
|
-
sqlValuePrefix = `%`;
|
|
134
|
-
sqlValueSuffix = `%`;
|
|
135
|
-
}
|
|
136
|
-
let sqlValue = `${formatValue(i, sqlValuePrefix, sqlValueSuffix)}`;
|
|
162
|
+
let sqlValue = `${formatValue(i, operator)}`;
|
|
137
163
|
subOrQuery.push(`${colName} ${sqlOperator} ${sqlValue}`);
|
|
138
164
|
});
|
|
139
165
|
return `(${subOrQuery.join(" OR ")})`;
|
|
@@ -141,36 +167,36 @@ const buildSqlWhere = (filters, selectColumns) => {
|
|
|
141
167
|
const colName = `${col(field)}`;
|
|
142
168
|
switch (operator) {
|
|
143
169
|
case common_1.queryListFilterOperators.eq:
|
|
144
|
-
andClauses.push(`${
|
|
170
|
+
andClauses.push(`${formatWherePart(value, common_1.queryListFilterOperators.eq)}`);
|
|
145
171
|
// andClauses.push(`${colName} = ${formatValue(value)}`);
|
|
146
172
|
break;
|
|
147
173
|
case common_1.queryListFilterOperators.notEq:
|
|
148
|
-
andClauses.push(`${
|
|
174
|
+
andClauses.push(`${formatWherePart(value, common_1.queryListFilterOperators.notEq)}`);
|
|
149
175
|
// andClauses.push(`${colName} != ${formatValue(value)}`);
|
|
150
176
|
break;
|
|
151
177
|
case common_1.queryListFilterOperators.startsWith:
|
|
152
|
-
andClauses.push(`${
|
|
178
|
+
andClauses.push(`${formatWherePart(value, common_1.queryListFilterOperators.startsWith)}`);
|
|
153
179
|
// andClauses.push(`${colName} ILIKE '${value}%'`);
|
|
154
180
|
break;
|
|
155
181
|
case common_1.queryListFilterOperators.endsWith:
|
|
156
|
-
andClauses.push(`${
|
|
182
|
+
andClauses.push(`${formatWherePart(value, common_1.queryListFilterOperators.endsWith)}`);
|
|
157
183
|
// andClauses.push(`${colName} ILIKE '%${value}'`);
|
|
158
184
|
break;
|
|
159
185
|
case common_1.queryListFilterOperators.contains:
|
|
160
|
-
andClauses.push(`${
|
|
186
|
+
andClauses.push(`${formatWherePart(value, common_1.queryListFilterOperators.contains)}`);
|
|
161
187
|
// andClauses.push(`${colName} ILIKE '%${value}%'`);
|
|
162
188
|
break;
|
|
163
189
|
case common_1.queryListFilterOperators.anyOf:
|
|
164
|
-
andClauses.push(`${colName} IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i)).join(", ")})`);
|
|
190
|
+
andClauses.push(`${colName} IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(", ")})`);
|
|
165
191
|
break;
|
|
166
192
|
case common_1.queryListFilterOperators.excludeOf:
|
|
167
|
-
andClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i)).join(", ")})`);
|
|
193
|
+
andClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(", ")})`);
|
|
168
194
|
break;
|
|
169
195
|
case common_1.queryListFilterOperators.moreThanEq:
|
|
170
|
-
andClauses.push(`${colName} >= ${formatValue(value)}`);
|
|
196
|
+
andClauses.push(`${colName} >= ${formatValue(value, operator)}`);
|
|
171
197
|
break;
|
|
172
198
|
case common_1.queryListFilterOperators.lessThanEq:
|
|
173
|
-
andClauses.push(`${colName} <= ${formatValue(value)}`);
|
|
199
|
+
andClauses.push(`${colName} <= ${formatValue(value, operator)}`);
|
|
174
200
|
break;
|
|
175
201
|
case common_1.queryListFilterOperators.isNull:
|
|
176
202
|
andClauses.push(`${colName} IS NULL`);
|
|
@@ -180,22 +206,24 @@ const buildSqlWhere = (filters, selectColumns) => {
|
|
|
180
206
|
break;
|
|
181
207
|
// Or-variants
|
|
182
208
|
case common_1.queryListFilterOperators.eqOr:
|
|
183
|
-
orClauses.push(`${colName} = ${formatValue(value)}`);
|
|
209
|
+
// orClauses.push(`${colName} = ${formatValue(value, operator)}`);
|
|
210
|
+
orClauses.push(`${formatWherePart(value, common_1.queryListFilterOperators.eqOr)}`);
|
|
184
211
|
break;
|
|
185
212
|
case common_1.queryListFilterOperators.containsOr:
|
|
186
|
-
orClauses.push(`${colName} ILIKE '%${value}%'`);
|
|
213
|
+
// orClauses.push(`${colName} ILIKE '%${value, operator}%'`);
|
|
214
|
+
orClauses.push(`${formatWherePart(value, common_1.queryListFilterOperators.containsOr)}`);
|
|
187
215
|
break;
|
|
188
216
|
case common_1.queryListFilterOperators.anyOfOr:
|
|
189
|
-
orClauses.push(`${colName} IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i)).join(", ")})`);
|
|
217
|
+
orClauses.push(`${colName} IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(", ")})`);
|
|
190
218
|
break;
|
|
191
219
|
case common_1.queryListFilterOperators.excludeOfOr:
|
|
192
|
-
orClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i)).join(", ")})`);
|
|
220
|
+
orClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i, operator)).join(", ")})`);
|
|
193
221
|
break;
|
|
194
222
|
case common_1.queryListFilterOperators.moreThanEqOr:
|
|
195
|
-
orClauses.push(`${colName} >= ${formatValue(value)}`);
|
|
223
|
+
orClauses.push(`${colName} >= ${formatValue(value, operator)}`);
|
|
196
224
|
break;
|
|
197
225
|
case common_1.queryListFilterOperators.lessThanEqOr:
|
|
198
|
-
orClauses.push(`${colName} <= ${formatValue(value)}`);
|
|
226
|
+
orClauses.push(`${colName} <= ${formatValue(value, operator)}`);
|
|
199
227
|
break;
|
|
200
228
|
case common_1.queryListFilterOperators.isNullOr:
|
|
201
229
|
orClauses.push(`${colName} IS NULL`);
|
|
@@ -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\";\n\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 where \n ${sqlWhere.join(' and ')}\n ${sqlGroupBy.length ? `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}: {\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}) => {\n\n const sql = buildSqlRawSelect({\n tableName,\n mainAlias,\n accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset: \"\"\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): {\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 formatValueWithArray = (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 ) {\n sqlOperator = `ILIKE`\n }\n\n if (Array.isArray(value) === false) {\n let sqlValue = formatValue(val)\n return `${colName} ${sqlOperator} ${sqlValue}`\n }\n\n let subOrQuery: string[] = []\n\n value.forEach((i: any) => {\n\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 (operator === queryListFilterOperators.contains) {\n sqlValuePrefix = `%`\n sqlValueSuffix = `%`\n }\n\n let sqlValue = `${formatValue(i, sqlValuePrefix, sqlValueSuffix)}`\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(`${formatValueWithArray(value, queryListFilterOperators.eq)}`);\n // andClauses.push(`${colName} = ${formatValue(value)}`);\n break;\n case queryListFilterOperators.notEq:\n andClauses.push(`${formatValueWithArray(value, queryListFilterOperators.notEq)}`);\n // andClauses.push(`${colName} != ${formatValue(value)}`);\n break;\n case queryListFilterOperators.startsWith:\n andClauses.push(`${formatValueWithArray(value, queryListFilterOperators.startsWith)}`);\n // andClauses.push(`${colName} ILIKE '${value}%'`);\n break;\n case queryListFilterOperators.endsWith:\n andClauses.push(`${formatValueWithArray(value, queryListFilterOperators.endsWith)}`);\n // andClauses.push(`${colName} ILIKE '%${value}'`);\n break;\n case queryListFilterOperators.contains:\n andClauses.push(`${formatValueWithArray(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)).join(\", \")})`);\n break;\n case queryListFilterOperators.excludeOf:\n andClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i)).join(\", \")})`);\n break;\n case queryListFilterOperators.moreThanEq:\n andClauses.push(`${colName} >= ${formatValue(value)}`);\n break;\n case queryListFilterOperators.lessThanEq:\n andClauses.push(`${colName} <= ${formatValue(value)}`);\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)}`);\n break;\n case queryListFilterOperators.containsOr:\n orClauses.push(`${colName} ILIKE '%${value}%'`);\n break;\n case queryListFilterOperators.anyOfOr:\n orClauses.push(`${colName} IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i)).join(\", \")})`);\n break;\n case queryListFilterOperators.excludeOfOr:\n orClauses.push(`${colName} NOT IN (${(Array.isArray(value) ? value : [value]).map((i) => formatValue(i)).join(\", \")})`);\n break;\n case queryListFilterOperators.moreThanEqOr:\n orClauses.push(`${colName} >= ${formatValue(value)}`);\n break;\n case queryListFilterOperators.lessThanEqOr:\n orClauses.push(`${colName} <= ${formatValue(value)}`);\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 if (limit !== undefined) parts.push(`LIMIT ${limit}`);\n if (offset !== undefined) parts.push(`OFFSET ${offset}`);\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 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 where \n ${sqlWhere.join(' and ')}\n ${sqlGroupBy.length ? `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}: {\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}) => {\n\n const sql = buildSqlRawSelect({\n tableName,\n mainAlias,\n accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset: \"\"\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): {\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 (operator === queryListFilterOperators.contains) {\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 = `ILIKE`\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 if (limit !== undefined) parts.push(`LIMIT ${limit}`);\n if (offset !== undefined) parts.push(`OFFSET ${offset}`);\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}"]}
|
|
@@ -28,12 +28,23 @@ export type AccountUpdateProps = {
|
|
|
28
28
|
data: Omit<Account, "accountId" | "ownerUserId">;
|
|
29
29
|
};
|
|
30
30
|
export declare const AccountService: (props: AccountServiceProps) => {
|
|
31
|
-
getAccount: (
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
getAccount: (args_0: AccountGetProps) => Promise<any>;
|
|
32
|
+
listAccounts: (args_0: {
|
|
33
|
+
offset: number;
|
|
34
|
+
limit: number;
|
|
35
|
+
sortorder: "" | "desc" | "ASC" | "DESC" | "asc";
|
|
36
|
+
sortfield: string;
|
|
37
|
+
filters: {
|
|
38
|
+
field: string;
|
|
39
|
+
operator: "=" | "_%" | "%_" | "%" | "%||" | "where_in" | "or_where_in" | "where_not_in" | "or_where_not_in" | ">=" | ">=||" | "<=" | "<=||" | "!=" | "=||" | "null" | "null!=" | "null||";
|
|
40
|
+
value?: any;
|
|
41
|
+
}[];
|
|
42
|
+
datatypes: string[];
|
|
43
|
+
}) => Promise<{
|
|
36
44
|
data: any[];
|
|
37
45
|
total: number;
|
|
38
46
|
}>;
|
|
47
|
+
createAccount: (args_0: AccountCreateProps) => Promise<any>;
|
|
48
|
+
updateAccount: (args_0: AccountUpdateProps) => Promise<any>;
|
|
49
|
+
removeAccounts: (args_0: AccountRemoveProps) => Promise<any[]>;
|
|
39
50
|
};
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.AccountService = void 0;
|
|
4
4
|
const utils_1 = require("../../utils");
|
|
5
5
|
const models_1 = require("../../models");
|
|
6
|
+
const utils_2 = require("../../utils");
|
|
6
7
|
const lib_1 = require("../../lib");
|
|
7
8
|
const services_1 = require("../../services");
|
|
8
9
|
const getCreatePayload = (data) => {
|
|
@@ -312,19 +313,27 @@ const AccountService = (props) => {
|
|
|
312
313
|
// const getDataTypes = () => {
|
|
313
314
|
// return Object.values(accountDataTypes);
|
|
314
315
|
// }
|
|
315
|
-
return {
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
316
|
+
// return {
|
|
317
|
+
// // getAccount,
|
|
318
|
+
// // createAccount,
|
|
319
|
+
// // updateAccount,
|
|
320
|
+
// // removeAccounts,
|
|
321
|
+
// // listAccounts
|
|
322
|
+
// // validateAccountCodeIsUsed: registerService(validateAccountCodeIsUsed, rest, "validate account code is used"),
|
|
323
|
+
// getAccount: registerService(["operator"], "AccountService", getAccount, rest, "get account"),
|
|
324
|
+
// createAccount: registerService(["operator"], "AccountService", createAccount, rest, "create account"),
|
|
325
|
+
// updateAccount: registerService(["operator"], "AccountService", updateAccount, rest, "update account"),
|
|
326
|
+
// removeAccounts: registerService(["operator"], "AccountService", removeAccounts, rest, "remove accounts"),
|
|
327
|
+
// listAccounts: registerService(["operator"], "AccountService", listAccounts, rest, "list accounts"),
|
|
328
|
+
// }
|
|
329
|
+
const methodConfigs = {
|
|
330
|
+
getAccount: { fn: getAccount, allowUserTypes: ["operator", "administrator"], actionName: "get account" },
|
|
331
|
+
listAccounts: { fn: listAccounts, allowUserTypes: ["operator", "administrator"], actionName: "list accounts" },
|
|
332
|
+
createAccount: { fn: createAccount, allowUserTypes: ["operator"], actionName: "create account" },
|
|
333
|
+
updateAccount: { fn: updateAccount, allowUserTypes: ["operator"], actionName: "update account" },
|
|
334
|
+
removeAccounts: { fn: removeAccounts, allowUserTypes: ["operator"], actionName: "remove accounts" },
|
|
327
335
|
};
|
|
336
|
+
return (0, utils_2.registerService)("AccountService", rest, methodConfigs);
|
|
328
337
|
};
|
|
329
338
|
exports.AccountService = AccountService;
|
|
330
339
|
//# sourceMappingURL=AccountService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountService.js","sourceRoot":"","sources":["../../../src/services/account/AccountService.ts"],"names":[],"mappings":"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","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport {\n ModelUserFields,\n ModelAccountFields,\n AccountModel,\n ModelUserBranchFields,\n ModelBusinessFields,\n} from \"@/models\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps, protectServiceOnlyOperator } from \"@/utils\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nimport {\n BusinessService,\n BusinessCreateProps,\n UserService,\n UserCreateProps,\n AccessKeyService\n} from \"@/services\";\n\nexport type AccountServiceProps = DefaultServiceProps & {};\n\nexport type AccountGetProps = QueryGet & {\n id: number,\n // datatypes: AccountDataType[]\n};\n\nexport type AccountListProps = QueryList & {\n // datatypes: AccountDataType[]\n};\n\nexport type AccountRemoveProps = {\n accountIds: BigInt[]\n};\n\nexport type Account = {\n accountId: number,\n name: string,\n accountCode: string,\n businessId: number,\n ownerUserId: number,\n status: boolean\n}\n\nexport type AccountCreateProps = {\n data: Omit<Account, \"accountId\" | \"businessId\" | \"ownerUserId\"> & {\n administrator: Omit<UserCreateProps[\"data\"][\"user\"], \"status\">,\n business: Omit<BusinessCreateProps[\"data\"], \"status\">\n }\n}\n\nexport type AccountUpdateProps = {\n accountId: number,\n data: Omit<Account, \"accountId\" | \"ownerUserId\">\n}\n\nconst getCreatePayload = (data: AccountCreateProps[\"data\"]) => {\n\n return {\n [`${ModelAccountFields.name}`]: data.name,\n [`${ModelAccountFields.status}`]: Boolean(data.status),\n [`${ModelAccountFields.account_code}`]: data.accountCode\n }\n\n}\n\nconst getCreateUpdatePayload = (businessId: number, ownerUserId: number) => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: data.accountId,\n [`${ModelAccountFields.business_id}`]: businessId,\n [`${ModelAccountFields.owner_user_id}`]: ownerUserId,\n }\n\n}\n\nconst getUpdatePayload = (data: AccountUpdateProps[\"data\"]) => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: accoundId,\n [`${ModelAccountFields.business_id}`]: data.businessId,\n [`${ModelAccountFields.name}`]: data.name,\n [`${ModelAccountFields.account_code}`]: data.accountCode,\n [`${ModelAccountFields.status}`]: Boolean(data.status)\n }\n\n}\n\nlet mainSqlSelect = {\n [`acc.${ModelAccountFields.account_id}`]: \"account_id\",\n [`acc.${ModelAccountFields.business_id}`]: \"business_id\",\n [`acc.${ModelAccountFields.name}`]: \"name\",\n [`acc.${ModelAccountFields.account_code}`]: \"account_code\",\n [`acc.${ModelAccountFields.status}`]: \"account_status\",\n}\n\nlet businessSqlSelect = {\n [`bus.${ModelBusinessFields.address_1}`]: \"address_1\",\n [`bus.${ModelBusinessFields.address_2}`]: \"address_2\",\n [`bus.${ModelBusinessFields.company_contact}`]: \"company_contact\",\n [`bus.${ModelBusinessFields.company_name}`]: \"company_name\",\n [`bus.${ModelBusinessFields.email}`]: \"email\",\n [`bus.${ModelBusinessFields.area_id}`]: \"area_id\",\n [`bus.${ModelBusinessFields.state_id}`]: \"state_id\",\n [`bus.${ModelBusinessFields.country_id}`]: \"country_id\",\n [`bus.${ModelBusinessFields.postcode}`]: \"postcode\",\n [`bus.${ModelBusinessFields.registration_number}`]: \"registration_number\",\n [`bus.${ModelBusinessFields.status}`]: \"business_status\",\n [`bus.${ModelBusinessFields.website}`]: \"website\",\n}\n\nlet ownerSqlSelectItem = {\n [`usrowner.${ModelUserFields.user_id}`]: \"user_id\",\n [`usrowner.${ModelUserFields.login_username}`]: \"login_username\",\n [`usrowner.${ModelUserFields.user_type}`]: \"user_type\",\n [`usrowner.${ModelUserFields.firstname}`]: \"firstname\",\n [`usrowner.${ModelUserFields.lastname}`]: \"lastname\",\n [`usrowner.${ModelUserFields.contact}`]: \"contact\",\n [`usrowner.${ModelUserFields.email}`]: \"email\",\n [`usrowner.${ModelUserFields.address}`]: \"address\",\n [`usrowner.${ModelUserFields.status}`]: \"status\",\n}\n\nlet ownerSqlSelect = {\n [`COALESCE(\n JSONB_BUILD_OBJECT(\n ${Object.entries(ownerSqlSelectItem).map(([key, alias]) => `'${alias}', ${key}`).join(\", \")}\n ),\n '{}'::jsonb\n )`]: \"owner\"\n}\n\nlet defaultSqlSelect = {\n [`acc.${ModelAccountFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`acc.${ModelAccountFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`acc.${ModelAccountFields.isdelete}`]: \"isdelete\",\n [`acc.${ModelAccountFields.istrash}`]: \"istrash\",\n [`acc.${ModelAccountFields.accountid}`]: \"accountid\",\n}\n\nexport const AccountService = (props: AccountServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const accountModel = AccountModel({ ...rest })\n const accessKeyService = AccessKeyService({ ...rest, accessKeyUserType: \"administrator\" })\n\n const checkAccoutCodeIsUsed = async (\n accountCode: Account[\"accountCode\"],\n selfAccountId?: Account[\"accountId\"]\n ) => {\n\n const { data } = await listAccounts({\n limit: 1,\n offset: 0,\n sortfield: `${ModelAccountFields.account_id}`,\n sortorder: \"ASC\",\n filters: [{\n field: `${ModelAccountFields.account_code}`,\n operator: \"=\",\n value: accountCode\n }],\n datatypes: []\n })\n\n if (data.length <= 0) return false\n\n if (selfAccountId) {\n\n if (Number(data[0].account_id) === Number(selfAccountId)) {\n return false\n } else {\n return true\n }\n\n } else {\n\n return true\n }\n\n }\n\n const validateAccountCodeIsUsed = async (accountCode: string) => {\n\n const accountCodeIsUsed = await checkAccoutCodeIsUsed(accountCode)\n\n if (accountCodeIsUsed === true) {\n throwError(`Account code has been used: ${accountCode}`)\n }\n\n }\n\n const createAccount = async ({ data }: AccountCreateProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n // check account code cannot duplicated\n await validateAccountCodeIsUsed(data.accountCode)\n\n // const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode)\n\n // if (accountCodeIsUsed === true) throwError(`Account code has been used: ${data.accountCode}`)\n\n // have to check the administrator allowed to create\n // if failed throw error\n\n // create account\n const _data = getCreatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid create account payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await accountModel.create({ data: _data })\n\n const newAccountId = response?.account_id ?? 0\n\n const businessService = BusinessService({ ...rest, accountId: Number(newAccountId) })\n const userService = UserService({ ...rest, accountId: Number(newAccountId), userType: \"administrator\" })\n\n let accountBusinessId = 0\n let accountUserId = 0\n let accountId = 0\n\n // create user(administrator)\n if (data?.administrator) {\n\n let userData = data?.administrator ?? {}\n\n let userPayload: UserCreateProps = {\n userType: \"administrator\",\n data: {\n user: {\n address: userData.address,\n contact: userData.contact,\n email: userData.email,\n firstname: userData.firstname,\n lastname: userData.lastname,\n loginPassword: userData.loginPassword,\n loginUsername: userData.loginUsername,\n status: true // always true for first time\n },\n administrator: {\n isOwner: true // first create must be owner\n },\n props: {\n locationIds: []\n }\n }\n }\n\n const responseOwner = await userService.createUser(userPayload)\n\n accountUserId = Number(responseOwner?.user_id) ?? 0\n accountId = Number(responseOwner?.accountid) ?? 0\n\n }\n\n // create default administrator access key\n await accessKeyService.createAccessKey({\n data: {\n userId: accountUserId,\n isDefault: true,\n overrideAccountId: accountId\n }\n })\n\n // create business\n if (data?.business) {\n\n let businessData = data?.business ?? {}\n\n let businessPayload: BusinessCreateProps = {\n data: {\n address1: businessData.address1,\n address2: businessData.address2,\n areaId: businessData.areaId,\n companyContact: businessData.companyContact,\n companyName: businessData.companyName,\n countryId: businessData.countryId,\n email: businessData.email,\n postcode: businessData.postcode,\n registrationNumber: businessData.registrationNumber,\n stateId: businessData.stateId,\n website: businessData.website,\n status: true // always true for first time\n }\n }\n\n const responseBusiness = await businessService.createBusiness(businessPayload)\n\n accountBusinessId = Number(responseBusiness?.business_id) ?? 0\n\n }\n\n // update account for additional info\n const createUpdatedata = getCreateUpdatePayload(accountBusinessId, accountUserId)\n\n if (!createUpdatedata) {\n throw new Error(`Invalid create update account payload: ${JSON.stringify(_data)}`);\n }\n\n await accountModel.update({ id: Number(newAccountId), data: createUpdatedata })\n\n return await getAccount({ id: Number(newAccountId), datatypes: [] })\n }\n\n const updateAccount = async ({ accountId, data }: AccountUpdateProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n // check account code cannot duplicated\n await validateAccountCodeIsUsed(data.accountCode)\n\n // const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode, accountId)\n\n // if (accountCodeIsUsed === true) throwError(`Account code has been used: ${data.accountCode}`)\n\n const _data = getUpdatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid update account payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await accountModel.update({ where: { [`${ModelAccountFields.account_id}`]: accountId }, data: _data })\n\n return await getAccount({ id: accountId, datatypes: [] })\n }\n\n const getAccount = async ({ id, datatypes = [] }: AccountGetProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let { data } = await listAccounts({\n limit: 1,\n offset: 0,\n filters: [{ field: \"account_id\", operator: \"=\", value: id }],\n sortfield: \"account_id\",\n sortorder: \"ASC\",\n datatypes\n })\n\n return data[0] ?? null;\n\n };\n\n const listAccounts = async ({\n limit,\n offset,\n filters,\n sortfield,\n sortorder,\n datatypes = []\n }: AccountListProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let data = []\n\n let sqlSelect = [\n `COUNT(acc.*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, businessSqlSelect),\n buildSqlSelect(``, ownerSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n let sqlRelation = [\n buildSqlRelation(\"left\", \"acc\", \"businesses\", \"bus\", [\"acc.business_id = bus.business_id\", \"bus.isdelete = false\", \"bus.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"usrowner\", [\"acc.owner_user_id = usrowner.user_id\", \"usrowner.isdelete = false\", \"usrowner.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"creator\", [\"acc.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"updater\", [\"acc.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n let sqlGroupBy: string[] = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(businessSqlSelect),\n ...Object.keys(ownerSqlSelectItem),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = { ...mainSqlSelect, ...businessSqlSelect, ...ownerSqlSelectItem, ...defaultSqlSelect }\n\n let sqlWhere = [\n `acc.isdelete = false`,\n `acc.istrash = false`,\n ...(filters.length ? [buildSqlWhere(filters, filterColumns)?.where] : []),\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n const sqlRaw = buildSqlRawSelect({\n tableName: \"accounts\",\n mainAlias: \"acc\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId: Boolean(rest.isOperator === true)\n })\n\n data = await accountModel.raw(sqlRaw)\n\n const response = {\n data: data.map(({ filtered_count, ...rest }) => rest),\n total: data.length ? Number(data[0].filtered_count) : 0\n }\n\n return response\n\n };\n\n const removeAccounts = async ({ accountIds }: AccountRemoveProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n if (!accountIds.length) throwError('accountIds is required');\n\n let accountResponse = await accountModel.remove({ where: { [`${ModelAccountFields.account_id}`]: { in: accountIds } } });\n\n let response: any[] = []\n\n await Promise.all(\n accountResponse.map(async (item) => {\n const accountId = item?.account_id ?? 0;\n const ownerUserId = item?.owner_user_id ?? 0;\n const businessId = item?.business_id ?? 0;\n\n const businessService = BusinessService({ ...rest, accountId: Number(accountId) })\n const userService = UserService({ ...rest, accountId: Number(accountId), userType: \"administrator\" })\n\n let responseBusiness: any[] = []\n let responseUser: any[] = []\n\n // remove business\n if (businessId) {\n responseBusiness = await businessService.removeBusinesses({ businessIds: [BigInt(businessId)] });\n }\n\n // remove user administrator\n if (ownerUserId) {\n responseUser = await userService.removeUsers({ ids: [BigInt(ownerUserId)] });\n }\n\n response.push({\n ...item,\n business: responseBusiness.length > 0 ? responseBusiness[0] : {},\n user: responseUser.length > 0 ? responseUser[0] : {}\n })\n\n })\n );\n\n return response\n\n };\n\n // const getDataTypes = () => {\n // return Object.values(accountDataTypes);\n // }\n\n return {\n getAccount,\n createAccount,\n updateAccount,\n removeAccounts,\n listAccounts\n // validateAccountCodeIsUsed: protectServiceOnlyOperator(validateAccountCodeIsUsed, rest, \"validate account code is used\"),\n // getAccount: protectServiceOnlyOperator(getAccount, rest, \"get account\"),\n // createAccount: protectServiceOnlyOperator(createAccount, rest, \"create account\"),\n // updateAccount: protectServiceOnlyOperator(updateAccount, rest, \"update account\"),\n // removeAccounts: protectServiceOnlyOperator(removeAccounts, rest, \"remove accounts\"),\n // listAccounts: protectServiceOnlyOperator(listAccounts, rest, \"list accounts\"),\n }\n\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"AccountService.js","sourceRoot":"","sources":["../../../src/services/account/AccountService.ts"],"names":[],"mappings":"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","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport {\n ModelUserFields,\n ModelAccountFields,\n AccountModel,\n ModelUserBranchFields,\n ModelBusinessFields,\n} from \"@/models\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps, registerService } from \"@/utils\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy } from \"@/lib\";\n\nimport {\n BusinessService,\n BusinessCreateProps,\n UserService,\n UserCreateProps,\n AccessKeyService\n} from \"@/services\";\n\nexport type AccountServiceProps = DefaultServiceProps & {};\n\nexport type AccountGetProps = QueryGet & {\n id: number,\n // datatypes: AccountDataType[]\n};\n\nexport type AccountListProps = QueryList & {\n // datatypes: AccountDataType[]\n};\n\nexport type AccountRemoveProps = {\n accountIds: BigInt[]\n};\n\nexport type Account = {\n accountId: number,\n name: string,\n accountCode: string,\n businessId: number,\n ownerUserId: number,\n status: boolean\n}\n\nexport type AccountCreateProps = {\n data: Omit<Account, \"accountId\" | \"businessId\" | \"ownerUserId\"> & {\n administrator: Omit<UserCreateProps[\"data\"][\"user\"], \"status\">,\n business: Omit<BusinessCreateProps[\"data\"], \"status\">\n }\n}\n\nexport type AccountUpdateProps = {\n accountId: number,\n data: Omit<Account, \"accountId\" | \"ownerUserId\">\n}\n\nconst getCreatePayload = (data: AccountCreateProps[\"data\"]) => {\n\n return {\n [`${ModelAccountFields.name}`]: data.name,\n [`${ModelAccountFields.status}`]: Boolean(data.status),\n [`${ModelAccountFields.account_code}`]: data.accountCode\n }\n\n}\n\nconst getCreateUpdatePayload = (businessId: number, ownerUserId: number) => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: data.accountId,\n [`${ModelAccountFields.business_id}`]: businessId,\n [`${ModelAccountFields.owner_user_id}`]: ownerUserId,\n }\n\n}\n\nconst getUpdatePayload = (data: AccountUpdateProps[\"data\"]) => {\n\n return {\n // [`${ModelAccountFields.account_id}`]: accoundId,\n [`${ModelAccountFields.business_id}`]: data.businessId,\n [`${ModelAccountFields.name}`]: data.name,\n [`${ModelAccountFields.account_code}`]: data.accountCode,\n [`${ModelAccountFields.status}`]: Boolean(data.status)\n }\n\n}\n\nlet mainSqlSelect = {\n [`acc.${ModelAccountFields.account_id}`]: \"account_id\",\n [`acc.${ModelAccountFields.business_id}`]: \"business_id\",\n [`acc.${ModelAccountFields.name}`]: \"name\",\n [`acc.${ModelAccountFields.account_code}`]: \"account_code\",\n [`acc.${ModelAccountFields.status}`]: \"account_status\",\n}\n\nlet businessSqlSelect = {\n [`bus.${ModelBusinessFields.address_1}`]: \"address_1\",\n [`bus.${ModelBusinessFields.address_2}`]: \"address_2\",\n [`bus.${ModelBusinessFields.company_contact}`]: \"company_contact\",\n [`bus.${ModelBusinessFields.company_name}`]: \"company_name\",\n [`bus.${ModelBusinessFields.email}`]: \"email\",\n [`bus.${ModelBusinessFields.area_id}`]: \"area_id\",\n [`bus.${ModelBusinessFields.state_id}`]: \"state_id\",\n [`bus.${ModelBusinessFields.country_id}`]: \"country_id\",\n [`bus.${ModelBusinessFields.postcode}`]: \"postcode\",\n [`bus.${ModelBusinessFields.registration_number}`]: \"registration_number\",\n [`bus.${ModelBusinessFields.status}`]: \"business_status\",\n [`bus.${ModelBusinessFields.website}`]: \"website\",\n}\n\nlet ownerSqlSelectItem = {\n [`usrowner.${ModelUserFields.user_id}`]: \"user_id\",\n [`usrowner.${ModelUserFields.login_username}`]: \"login_username\",\n [`usrowner.${ModelUserFields.user_type}`]: \"user_type\",\n [`usrowner.${ModelUserFields.firstname}`]: \"firstname\",\n [`usrowner.${ModelUserFields.lastname}`]: \"lastname\",\n [`usrowner.${ModelUserFields.contact}`]: \"contact\",\n [`usrowner.${ModelUserFields.email}`]: \"email\",\n [`usrowner.${ModelUserFields.address}`]: \"address\",\n [`usrowner.${ModelUserFields.status}`]: \"status\",\n}\n\nlet ownerSqlSelect = {\n [`COALESCE(\n JSONB_BUILD_OBJECT(\n ${Object.entries(ownerSqlSelectItem).map(([key, alias]) => `'${alias}', ${key}`).join(\", \")}\n ),\n '{}'::jsonb\n )`]: \"owner\"\n}\n\nlet defaultSqlSelect = {\n [`acc.${ModelAccountFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`acc.${ModelAccountFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`acc.${ModelAccountFields.isdelete}`]: \"isdelete\",\n [`acc.${ModelAccountFields.istrash}`]: \"istrash\",\n [`acc.${ModelAccountFields.accountid}`]: \"accountid\",\n}\n\nexport const AccountService = (props: AccountServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const accountModel = AccountModel({ ...rest })\n const accessKeyService = AccessKeyService({ ...rest, accessKeyUserType: \"administrator\" })\n\n const checkAccoutCodeIsUsed = async (\n accountCode: Account[\"accountCode\"],\n selfAccountId?: Account[\"accountId\"]\n ) => {\n\n const { data } = await listAccounts({\n limit: 1,\n offset: 0,\n sortfield: `${ModelAccountFields.account_id}`,\n sortorder: \"ASC\",\n filters: [{\n field: `${ModelAccountFields.account_code}`,\n operator: \"=\",\n value: accountCode\n }],\n datatypes: []\n })\n\n if (data.length <= 0) return false\n\n if (selfAccountId) {\n\n if (Number(data[0].account_id) === Number(selfAccountId)) {\n return false\n } else {\n return true\n }\n\n } else {\n\n return true\n }\n\n }\n\n const validateAccountCodeIsUsed = async (accountCode: string) => {\n\n const accountCodeIsUsed = await checkAccoutCodeIsUsed(accountCode)\n\n if (accountCodeIsUsed === true) {\n throwError(`Account code has been used: ${accountCode}`)\n }\n\n }\n\n const createAccount = async ({ data }: AccountCreateProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n // check account code cannot duplicated\n await validateAccountCodeIsUsed(data.accountCode)\n\n // const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode)\n\n // if (accountCodeIsUsed === true) throwError(`Account code has been used: ${data.accountCode}`)\n\n // have to check the administrator allowed to create\n // if failed throw error\n\n // create account\n const _data = getCreatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid create account payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await accountModel.create({ data: _data })\n\n const newAccountId = response?.account_id ?? 0\n\n const businessService = BusinessService({ ...rest, accountId: Number(newAccountId) })\n const userService = UserService({ ...rest, accountId: Number(newAccountId), userType: \"administrator\" })\n\n let accountBusinessId = 0\n let accountUserId = 0\n let accountId = 0\n\n // create user(administrator)\n if (data?.administrator) {\n\n let userData = data?.administrator ?? {}\n\n let userPayload: UserCreateProps = {\n userType: \"administrator\",\n data: {\n user: {\n address: userData.address,\n contact: userData.contact,\n email: userData.email,\n firstname: userData.firstname,\n lastname: userData.lastname,\n loginPassword: userData.loginPassword,\n loginUsername: userData.loginUsername,\n status: true // always true for first time\n },\n administrator: {\n isOwner: true // first create must be owner\n },\n props: {\n locationIds: []\n }\n }\n }\n\n const responseOwner = await userService.createUser(userPayload)\n\n accountUserId = Number(responseOwner?.user_id) ?? 0\n accountId = Number(responseOwner?.accountid) ?? 0\n\n }\n\n // create default administrator access key\n await accessKeyService.createAccessKey({\n data: {\n userId: accountUserId,\n isDefault: true,\n overrideAccountId: accountId\n }\n })\n\n // create business\n if (data?.business) {\n\n let businessData = data?.business ?? {}\n\n let businessPayload: BusinessCreateProps = {\n data: {\n address1: businessData.address1,\n address2: businessData.address2,\n areaId: businessData.areaId,\n companyContact: businessData.companyContact,\n companyName: businessData.companyName,\n countryId: businessData.countryId,\n email: businessData.email,\n postcode: businessData.postcode,\n registrationNumber: businessData.registrationNumber,\n stateId: businessData.stateId,\n website: businessData.website,\n status: true // always true for first time\n }\n }\n\n const responseBusiness = await businessService.createBusiness(businessPayload)\n\n accountBusinessId = Number(responseBusiness?.business_id) ?? 0\n\n }\n\n // update account for additional info\n const createUpdatedata = getCreateUpdatePayload(accountBusinessId, accountUserId)\n\n if (!createUpdatedata) {\n throw new Error(`Invalid create update account payload: ${JSON.stringify(_data)}`);\n }\n\n await accountModel.update({ id: Number(newAccountId), data: createUpdatedata })\n\n return await getAccount({ id: Number(newAccountId), datatypes: [] })\n }\n\n const updateAccount = async ({ accountId, data }: AccountUpdateProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n // check account code cannot duplicated\n await validateAccountCodeIsUsed(data.accountCode)\n\n // const accountCodeIsUsed = await checkAccoutCodeIsUsed(data.accountCode, accountId)\n\n // if (accountCodeIsUsed === true) throwError(`Account code has been used: ${data.accountCode}`)\n\n const _data = getUpdatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid update account payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await accountModel.update({ where: { [`${ModelAccountFields.account_id}`]: accountId }, data: _data })\n\n return await getAccount({ id: accountId, datatypes: [] })\n }\n\n const getAccount = async ({ id, datatypes = [] }: AccountGetProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let { data } = await listAccounts({\n limit: 1,\n offset: 0,\n filters: [{ field: \"account_id\", operator: \"=\", value: id }],\n sortfield: \"account_id\",\n sortorder: \"ASC\",\n datatypes\n })\n\n return data[0] ?? null;\n\n };\n\n const listAccounts = async ({\n limit,\n offset,\n filters,\n sortfield,\n sortorder,\n datatypes = []\n }: AccountListProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n let data = []\n\n let sqlSelect = [\n `COUNT(acc.*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, businessSqlSelect),\n buildSqlSelect(``, ownerSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n let sqlRelation = [\n buildSqlRelation(\"left\", \"acc\", \"businesses\", \"bus\", [\"acc.business_id = bus.business_id\", \"bus.isdelete = false\", \"bus.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"usrowner\", [\"acc.owner_user_id = usrowner.user_id\", \"usrowner.isdelete = false\", \"usrowner.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"creator\", [\"acc.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"acc\", \"users\", \"updater\", [\"acc.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n let sqlGroupBy: string[] = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(businessSqlSelect),\n ...Object.keys(ownerSqlSelectItem),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = { ...mainSqlSelect, ...businessSqlSelect, ...ownerSqlSelectItem, ...defaultSqlSelect }\n\n let sqlWhere = [\n `acc.isdelete = false`,\n `acc.istrash = false`,\n ...(filters.length ? [buildSqlWhere(filters, filterColumns)?.where] : []),\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n const sqlRaw = buildSqlRawSelect({\n tableName: \"accounts\",\n mainAlias: \"acc\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId: Boolean(rest.isOperator === true)\n })\n\n data = await accountModel.raw(sqlRaw)\n\n const response = {\n data: data.map(({ filtered_count, ...rest }) => rest),\n total: data.length ? Number(data[0].filtered_count) : 0\n }\n\n return response\n\n };\n\n const removeAccounts = async ({ accountIds }: AccountRemoveProps) => {\n\n // only operator token/access key allowed to access\n // if (rest.isOperator !== true) throwError(`Only operator token/access key allowed to perform`)\n\n if (!accountIds.length) throwError('accountIds is required');\n\n let accountResponse = await accountModel.remove({ where: { [`${ModelAccountFields.account_id}`]: { in: accountIds } } });\n\n let response: any[] = []\n\n await Promise.all(\n accountResponse.map(async (item) => {\n const accountId = item?.account_id ?? 0;\n const ownerUserId = item?.owner_user_id ?? 0;\n const businessId = item?.business_id ?? 0;\n\n const businessService = BusinessService({ ...rest, accountId: Number(accountId) })\n const userService = UserService({ ...rest, accountId: Number(accountId), userType: \"administrator\" })\n\n let responseBusiness: any[] = []\n let responseUser: any[] = []\n\n // remove business\n if (businessId) {\n responseBusiness = await businessService.removeBusinesses({ businessIds: [BigInt(businessId)] });\n }\n\n // remove user administrator\n if (ownerUserId) {\n responseUser = await userService.removeUsers({ ids: [BigInt(ownerUserId)] });\n }\n\n response.push({\n ...item,\n business: responseBusiness.length > 0 ? responseBusiness[0] : {},\n user: responseUser.length > 0 ? responseUser[0] : {}\n })\n\n })\n );\n\n return response\n\n };\n\n // const getDataTypes = () => {\n // return Object.values(accountDataTypes);\n // }\n\n // return {\n // // getAccount,\n // // createAccount,\n // // updateAccount,\n // // removeAccounts,\n // // listAccounts\n // // validateAccountCodeIsUsed: registerService(validateAccountCodeIsUsed, rest, \"validate account code is used\"),\n // getAccount: registerService([\"operator\"], \"AccountService\", getAccount, rest, \"get account\"),\n // createAccount: registerService([\"operator\"], \"AccountService\", createAccount, rest, \"create account\"),\n // updateAccount: registerService([\"operator\"], \"AccountService\", updateAccount, rest, \"update account\"),\n // removeAccounts: registerService([\"operator\"], \"AccountService\", removeAccounts, rest, \"remove accounts\"),\n // listAccounts: registerService([\"operator\"], \"AccountService\", listAccounts, rest, \"list accounts\"),\n // }\n\n const methodConfigs = {\n getAccount: { fn: getAccount, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"get account\" },\n listAccounts: { fn: listAccounts, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"list accounts\" },\n createAccount: { fn: createAccount, allowUserTypes: [\"operator\"] as const, actionName: \"create account\" },\n updateAccount: { fn: updateAccount, allowUserTypes: [\"operator\"] as const, actionName: \"update account\" },\n removeAccounts: { fn: removeAccounts, allowUserTypes: [\"operator\"] as const, actionName: \"remove accounts\" },\n };\n\n return registerService(\"AccountService\", rest, methodConfigs);\n\n}\n\n"]}
|
|
@@ -43,13 +43,24 @@ export type RegionUpdateProps = {
|
|
|
43
43
|
});
|
|
44
44
|
};
|
|
45
45
|
export declare const RegionService: (props: RegionServiceProps) => {
|
|
46
|
-
getRegion: (
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
getRegion: (args_0: RegionGetProps) => Promise<any>;
|
|
47
|
+
listRegions: (args_0: {
|
|
48
|
+
offset: number;
|
|
49
|
+
limit: number;
|
|
50
|
+
sortorder: "" | "desc" | "ASC" | "DESC" | "asc";
|
|
51
|
+
sortfield: string;
|
|
52
|
+
filters: {
|
|
53
|
+
field: string;
|
|
54
|
+
operator: "=" | "_%" | "%_" | "%" | "%||" | "where_in" | "or_where_in" | "where_not_in" | "or_where_not_in" | ">=" | ">=||" | "<=" | "<=||" | "!=" | "=||" | "null" | "null!=" | "null||";
|
|
55
|
+
value?: any;
|
|
56
|
+
}[];
|
|
57
|
+
datatypes: string[];
|
|
58
|
+
}) => Promise<{
|
|
50
59
|
data: any[];
|
|
51
60
|
total: number;
|
|
52
61
|
}>;
|
|
53
|
-
|
|
54
|
-
|
|
62
|
+
createRegion: (args_0: RegionCreateProps) => Promise<any>;
|
|
63
|
+
updateRegion: (args_0: RegionUpdateProps) => Promise<any>;
|
|
64
|
+
removeRegions: (args_0: RegionRemoveProps) => Promise<any[]>;
|
|
65
|
+
getRegionDataTypes: () => Promise<any[]>;
|
|
55
66
|
};
|
|
@@ -5,6 +5,7 @@ const utils_1 = require("../../utils");
|
|
|
5
5
|
const CountryService_1 = require("./CountryService");
|
|
6
6
|
const StateService_1 = require("./StateService");
|
|
7
7
|
const AreaService_1 = require("./AreaService");
|
|
8
|
+
const utils_2 = require("../../utils");
|
|
8
9
|
exports.regionTypes = {
|
|
9
10
|
country: "country",
|
|
10
11
|
state: "state",
|
|
@@ -139,14 +140,23 @@ const RegionService = (props) => {
|
|
|
139
140
|
// }
|
|
140
141
|
return data;
|
|
141
142
|
};
|
|
142
|
-
return {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
143
|
+
// return {
|
|
144
|
+
// getRegion,
|
|
145
|
+
// createRegion,
|
|
146
|
+
// updateRegion,
|
|
147
|
+
// listRegions,
|
|
148
|
+
// removeRegions,
|
|
149
|
+
// getRegionDataTypes
|
|
150
|
+
// }
|
|
151
|
+
const methodConfigs = {
|
|
152
|
+
getRegion: { fn: getRegion, allowUserTypes: ["operator", "administrator"], actionName: "get region" },
|
|
153
|
+
listRegions: { fn: listRegions, allowUserTypes: ["operator", "administrator"], actionName: "list accounts" },
|
|
154
|
+
createRegion: { fn: createRegion, allowUserTypes: ["operator"], actionName: "create region" },
|
|
155
|
+
updateRegion: { fn: updateRegion, allowUserTypes: ["operator"], actionName: "update region" },
|
|
156
|
+
removeRegions: { fn: removeRegions, allowUserTypes: ["operator"], actionName: "remove regions" },
|
|
157
|
+
getRegionDataTypes: { fn: async () => getRegionDataTypes(), allowUserTypes: ["operator", "administrator"], actionName: "get region datatypes" },
|
|
149
158
|
};
|
|
159
|
+
return (0, utils_2.registerService)("RegionService", rest, methodConfigs);
|
|
150
160
|
};
|
|
151
161
|
exports.RegionService = RegionService;
|
|
152
162
|
//# sourceMappingURL=RegionService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RegionService.js","sourceRoot":"","sources":["../../../src/services/region/RegionService.ts"],"names":[],"mappings":"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","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport { CountryService, CountryCreateProps, CountryListProps, CountryGetProps, CountryUpdateProps } from \"./CountryService\";\nimport { StateListProps, StateCreateProps, StateService, StateUpdateProps, StateGetProps } from \"./StateService\";\nimport { AreaCreateProps, AreaGetProps, AreaListProps, AreaService, AreaUpdateProps } from \"./AreaService\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps } from \"@/utils\";\n\nexport const regionTypes = {\n country: \"country\",\n state: \"state\",\n area: \"area\"\n} as const\n\nexport type RegionType = typeof regionTypes[keyof typeof regionTypes]\n\nexport type RegionServiceProps = DefaultServiceProps & {\n regionType: RegionType,\n};\n\nexport type RegionGetProps = QueryGet & {\n id: number,\n};\n\nexport type RegionListProps = QueryList & {\n // id: number,\n};\n\nexport type RegionRemoveProps = {\n ids: number[]\n};\n\nexport type RegionCreateProps = {\n regionType?: RegionType,\n data:\n // country\n (\n {\n country: CountryCreateProps[\"data\"]['country']\n }\n ) |\n // state with areas\n (\n {\n state: StateCreateProps[\"data\"]['state'],\n areas: AreaCreateProps[\"data\"][\"area\"][]\n }\n ) |\n // area\n (\n {\n area: AreaCreateProps[\"data\"]['area']\n }\n )\n}\n\nexport type RegionUpdateProps = {\n id: number,\n regionType?: RegionType,\n data:\n // country\n (\n {\n country: CountryUpdateProps[\"data\"]['country']\n }\n ) |\n // state with areas\n (\n {\n state: StateUpdateProps[\"data\"]['state'],\n areas: AreaUpdateProps[\"data\"][\"area\"][]\n }\n ) |\n // area\n (\n {\n area: AreaUpdateProps[\"data\"]['area']\n }\n )\n}\n\nexport const RegionService = (props: RegionServiceProps) => {\n\n const {\n regionType = \"country\",\n // prisma,\n // accountId = 0,\n // actionUserId = 0,\n ...rest\n } = props\n\n const countryService = CountryService({ ...rest })\n const stateService = StateService({ ...rest })\n const areaService = AreaService({ ...rest })\n\n const createRegion = async ({ data, regionType: overrideRegionType }: RegionCreateProps) => {\n\n const _regionType = overrideRegionType || regionType\n\n const _data = data\n\n let response: any = {}\n\n if (_regionType === \"country\" && \"country\" in _data) {\n response = await countryService.createCountry({ data: _data as CountryCreateProps[\"data\"] })\n }\n\n if (_regionType === \"state\" && \"state\" in _data) {\n response = await stateService.createState({ data: _data as StateCreateProps[\"data\"] })\n\n let response2: any[] = []\n\n for (const i of _data.areas) {\n response2.push(await areaService.createArea({ data: { area: i } as AreaCreateProps[\"data\"] }))\n }\n\n response.areas = response2\n\n console.log('response2', response2)\n\n }\n\n if (_regionType === \"area\" && \"area\" in _data) {\n response = await areaService.createArea({ data: _data as AreaCreateProps[\"data\"] })\n }\n\n return response\n }\n\n const updateRegion = async ({ id, data, regionType: overrideRegionType }: RegionUpdateProps) => {\n\n const _regionType = overrideRegionType || regionType\n\n const _data = data\n\n // if (!_data) {\n // throw new Error(`Invalid create payload: ${JSON.stringify(_data)}`);\n // }\n\n let response: any = {}\n\n if (_regionType === \"country\" && \"country\" in _data) {\n response = await countryService.updateCountry({ id, data: _data as CountryUpdateProps[\"data\"] })\n }\n\n if (_regionType === \"state\" && \"state\" in _data) {\n response = await stateService.updateState({ id, data: _data as StateUpdateProps[\"data\"] })\n\n let response2: any[] = []\n\n for (const i of _data.areas) {\n try {\n\n // check have the areaId if have update if no create\n if (i?.areaId) { // update\n response2.push(await areaService.updateArea({ id: i.areaId, data: { area: i } as AreaUpdateProps[\"data\"] }))\n } else { // create\n response2.push(await areaService.createArea({ data: { area: i } as AreaUpdateProps[\"data\"] }))\n }\n\n } catch (error: any) {\n response2.push({\n area_id: i?.areaId,\n errorMessage: error?.message\n })\n }\n\n }\n\n response.areas = response2\n\n // console.log('response2', response2)\n\n }\n\n if (_regionType === \"area\" && \"area\" in _data) {\n response = await areaService.updateArea({ id, data: _data as AreaUpdateProps[\"data\"] })\n }\n\n return response\n }\n\n const getRegion = async ({ id, datatypes = [] }: RegionGetProps) => {\n\n let data: any = {}\n\n if (regionType === \"country\") {\n data = await countryService.getCountry({ id, datatypes: datatypes as CountryGetProps[\"datatypes\"] })\n }\n\n if (regionType === \"state\") {\n data = await stateService.getState({ id, datatypes: datatypes as StateGetProps[\"datatypes\"] })\n }\n\n if (regionType === \"area\") {\n data = await areaService.getArea({ id, datatypes: datatypes as AreaGetProps[\"datatypes\"] })\n }\n\n if (!data) {\n throw new Error(`Invalid id: ${id}`);\n }\n\n return data\n };\n\n const listRegions = async ({ limit, offset, filters, sortfield, sortorder, datatypes }: RegionListProps) => {\n\n let data: any[] = [];\n let total = 0;\n\n if (regionType === \"country\") {\n ({ data, total } = await countryService.listCountries(\n { limit, offset, filters, sortfield, sortorder, datatypes: datatypes as CountryListProps[\"datatypes\"] }\n ))\n }\n\n if (regionType === \"state\") {\n ({ data, total } = await stateService.listStates(\n { limit, offset, filters, sortfield, sortorder, datatypes: datatypes as StateListProps[\"datatypes\"] }\n ))\n }\n\n if (regionType === \"area\") {\n ({ data, total } = await areaService.listAreas(\n { limit, offset, filters, sortfield, sortorder, datatypes: datatypes as AreaListProps[\"datatypes\"] }\n ))\n }\n\n return {\n data,\n total\n }\n };\n\n const removeRegions = async ({ ids }: RegionRemoveProps) => {\n\n if (!ids.length) throwError('id is required');\n\n let response: any[] = []\n\n if (regionType === \"country\") {\n response = await countryService.removeCountries({ ids })\n }\n\n if (regionType === \"state\") {\n response = await stateService.removeStates({ ids })\n }\n\n if (regionType === \"area\") {\n response = await areaService.removeAreas({ ids })\n }\n\n\n return response\n };\n\n const getRegionDataTypes = () => {\n\n let data: any[] = [];\n\n if (regionType === \"country\") {\n data = countryService.getDataTypes()\n }\n\n if (regionType === \"state\") {\n data = stateService.getDataTypes()\n }\n\n // if (regionType === \"area\") {\n // data = customerService.getDataTypes()\n // }\n\n return data\n };\n\n return {\n getRegion,\n createRegion,\n updateRegion,\n listRegions,\n removeRegions,\n getRegionDataTypes\n }\n\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"RegionService.js","sourceRoot":"","sources":["../../../src/services/region/RegionService.ts"],"names":[],"mappings":"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","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport { CountryService, CountryCreateProps, CountryListProps, CountryGetProps, CountryUpdateProps } from \"./CountryService\";\nimport { StateListProps, StateCreateProps, StateService, StateUpdateProps, StateGetProps } from \"./StateService\";\nimport { AreaCreateProps, AreaGetProps, AreaListProps, AreaService, AreaUpdateProps } from \"./AreaService\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps, registerService } from \"@/utils\";\n\nexport const regionTypes = {\n country: \"country\",\n state: \"state\",\n area: \"area\"\n} as const\n\nexport type RegionType = typeof regionTypes[keyof typeof regionTypes]\n\nexport type RegionServiceProps = DefaultServiceProps & {\n regionType: RegionType,\n};\n\nexport type RegionGetProps = QueryGet & {\n id: number,\n};\n\nexport type RegionListProps = QueryList & {\n // id: number,\n};\n\nexport type RegionRemoveProps = {\n ids: number[]\n};\n\nexport type RegionCreateProps = {\n regionType?: RegionType,\n data:\n // country\n (\n {\n country: CountryCreateProps[\"data\"]['country']\n }\n ) |\n // state with areas\n (\n {\n state: StateCreateProps[\"data\"]['state'],\n areas: AreaCreateProps[\"data\"][\"area\"][]\n }\n ) |\n // area\n (\n {\n area: AreaCreateProps[\"data\"]['area']\n }\n )\n}\n\nexport type RegionUpdateProps = {\n id: number,\n regionType?: RegionType,\n data:\n // country\n (\n {\n country: CountryUpdateProps[\"data\"]['country']\n }\n ) |\n // state with areas\n (\n {\n state: StateUpdateProps[\"data\"]['state'],\n areas: AreaUpdateProps[\"data\"][\"area\"][]\n }\n ) |\n // area\n (\n {\n area: AreaUpdateProps[\"data\"]['area']\n }\n )\n}\n\nexport const RegionService = (props: RegionServiceProps) => {\n\n const {\n regionType = \"country\",\n // prisma,\n // accountId = 0,\n // actionUserId = 0,\n ...rest\n } = props\n\n const countryService = CountryService({ ...rest })\n const stateService = StateService({ ...rest })\n const areaService = AreaService({ ...rest })\n\n const createRegion = async ({ data, regionType: overrideRegionType }: RegionCreateProps) => {\n\n const _regionType = overrideRegionType || regionType\n\n const _data = data\n\n let response: any = {}\n\n if (_regionType === \"country\" && \"country\" in _data) {\n response = await countryService.createCountry({ data: _data as CountryCreateProps[\"data\"] })\n }\n\n if (_regionType === \"state\" && \"state\" in _data) {\n response = await stateService.createState({ data: _data as StateCreateProps[\"data\"] })\n\n let response2: any[] = []\n\n for (const i of _data.areas) {\n response2.push(await areaService.createArea({ data: { area: i } as AreaCreateProps[\"data\"] }))\n }\n\n response.areas = response2\n\n console.log('response2', response2)\n\n }\n\n if (_regionType === \"area\" && \"area\" in _data) {\n response = await areaService.createArea({ data: _data as AreaCreateProps[\"data\"] })\n }\n\n return response\n }\n\n const updateRegion = async ({ id, data, regionType: overrideRegionType }: RegionUpdateProps) => {\n\n const _regionType = overrideRegionType || regionType\n\n const _data = data\n\n // if (!_data) {\n // throw new Error(`Invalid create payload: ${JSON.stringify(_data)}`);\n // }\n\n let response: any = {}\n\n if (_regionType === \"country\" && \"country\" in _data) {\n response = await countryService.updateCountry({ id, data: _data as CountryUpdateProps[\"data\"] })\n }\n\n if (_regionType === \"state\" && \"state\" in _data) {\n response = await stateService.updateState({ id, data: _data as StateUpdateProps[\"data\"] })\n\n let response2: any[] = []\n\n for (const i of _data.areas) {\n try {\n\n // check have the areaId if have update if no create\n if (i?.areaId) { // update\n response2.push(await areaService.updateArea({ id: i.areaId, data: { area: i } as AreaUpdateProps[\"data\"] }))\n } else { // create\n response2.push(await areaService.createArea({ data: { area: i } as AreaUpdateProps[\"data\"] }))\n }\n\n } catch (error: any) {\n response2.push({\n area_id: i?.areaId,\n errorMessage: error?.message\n })\n }\n\n }\n\n response.areas = response2\n\n // console.log('response2', response2)\n\n }\n\n if (_regionType === \"area\" && \"area\" in _data) {\n response = await areaService.updateArea({ id, data: _data as AreaUpdateProps[\"data\"] })\n }\n\n return response\n }\n\n const getRegion = async ({ id, datatypes = [] }: RegionGetProps) => {\n\n let data: any = {}\n\n if (regionType === \"country\") {\n data = await countryService.getCountry({ id, datatypes: datatypes as CountryGetProps[\"datatypes\"] })\n }\n\n if (regionType === \"state\") {\n data = await stateService.getState({ id, datatypes: datatypes as StateGetProps[\"datatypes\"] })\n }\n\n if (regionType === \"area\") {\n data = await areaService.getArea({ id, datatypes: datatypes as AreaGetProps[\"datatypes\"] })\n }\n\n if (!data) {\n throw new Error(`Invalid id: ${id}`);\n }\n\n return data\n };\n\n const listRegions = async ({ limit, offset, filters, sortfield, sortorder, datatypes }: RegionListProps) => {\n\n let data: any[] = [];\n let total = 0;\n\n if (regionType === \"country\") {\n ({ data, total } = await countryService.listCountries(\n { limit, offset, filters, sortfield, sortorder, datatypes: datatypes as CountryListProps[\"datatypes\"] }\n ))\n }\n\n if (regionType === \"state\") {\n ({ data, total } = await stateService.listStates(\n { limit, offset, filters, sortfield, sortorder, datatypes: datatypes as StateListProps[\"datatypes\"] }\n ))\n }\n\n if (regionType === \"area\") {\n ({ data, total } = await areaService.listAreas(\n { limit, offset, filters, sortfield, sortorder, datatypes: datatypes as AreaListProps[\"datatypes\"] }\n ))\n }\n\n return {\n data,\n total\n }\n };\n\n const removeRegions = async ({ ids }: RegionRemoveProps) => {\n\n if (!ids.length) throwError('id is required');\n\n let response: any[] = []\n\n if (regionType === \"country\") {\n response = await countryService.removeCountries({ ids })\n }\n\n if (regionType === \"state\") {\n response = await stateService.removeStates({ ids })\n }\n\n if (regionType === \"area\") {\n response = await areaService.removeAreas({ ids })\n }\n\n\n return response\n };\n\n const getRegionDataTypes = () => {\n\n let data: any[] = [];\n\n if (regionType === \"country\") {\n data = countryService.getDataTypes()\n }\n\n if (regionType === \"state\") {\n data = stateService.getDataTypes()\n }\n\n // if (regionType === \"area\") {\n // data = customerService.getDataTypes()\n // }\n\n return data\n };\n\n // return {\n // getRegion,\n // createRegion,\n // updateRegion,\n // listRegions,\n // removeRegions,\n // getRegionDataTypes\n // }\n\n const methodConfigs = {\n getRegion: { fn: getRegion, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"get region\" },\n listRegions: { fn: listRegions, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"list accounts\" },\n createRegion: { fn: createRegion, allowUserTypes: [\"operator\"] as const, actionName: \"create region\" },\n updateRegion: { fn: updateRegion, allowUserTypes: [\"operator\"] as const, actionName: \"update region\" },\n removeRegions: { fn: removeRegions, allowUserTypes: [\"operator\"] as const, actionName: \"remove regions\" },\n getRegionDataTypes: { fn: async () => getRegionDataTypes(), allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"get region datatypes\" },\n };\n\n return registerService(\"RegionService\", rest, methodConfigs);\n\n\n}\n\n"]}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -15,4 +15,5 @@ export { generateAccessKeyId, generateAccessKeySecret, hashAccessKeySecret, encr
|
|
|
15
15
|
export { hashPassword, verifyPassword } from "./passwordUtils";
|
|
16
16
|
export { generateFileThumbnailBuffer } from "./fileThumbnail";
|
|
17
17
|
export { validateFormatEmailAddress, validateFormatMobileNumber } from "./validateFormatUtils";
|
|
18
|
-
export {
|
|
18
|
+
export { registerService, registerServiceNames, registerServiceAllowUserTypes } from "./serviceFactoryUtils";
|
|
19
|
+
export type { RegisterServiceName, RegisterServiceAllowUserType } from "./serviceFactoryUtils";
|
package/dist/utils/index.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.registerServiceAllowUserTypes = exports.registerServiceNames = exports.registerService = exports.validateFormatMobileNumber = exports.validateFormatEmailAddress = exports.generateFileThumbnailBuffer = exports.verifyPassword = exports.hashPassword = exports.decryptAccessKeySecret = exports.encryptAccessKeySecret = exports.hashAccessKeySecret = exports.generateAccessKeySecret = exports.generateAccessKeyId = exports.verifyAuthToken = exports.generateAuthToken = exports.groupPayloadInjectionFields = exports.buildFullFieldName = exports.replaceDefaultServicePropsFromAccessKey = exports.getDefaultServiceProps = exports.buildCommonStatusSchema = exports.getFormattedZodErrorsIntoString = exports.getFormattedZodErrors = exports.logError = exports.throwError = exports.logger = exports.normalizePublicScopeFromBody = exports.createPublicScopeSchema = exports.validateModelFieldsWithData = exports.convertPayloadByTableSchema = exports.validateMultipleSchemas = exports.validateWithSchema = exports.formatDisplayDateTime = exports.getCurrentDateTimeISO = exports.getCurrentDateTime = exports.dayjs = exports.sendSuccess = exports.sendError = exports.HTTP_STATUS = exports.sharp = exports._ = exports.getCoreConfiguration = void 0;
|
|
7
7
|
var coreConfigUtils_1 = require("./coreConfigUtils");
|
|
8
8
|
Object.defineProperty(exports, "getCoreConfiguration", { enumerable: true, get: function () { return coreConfigUtils_1.getCoreConfiguration; } });
|
|
9
9
|
var lodash_1 = require("lodash");
|
|
@@ -62,6 +62,8 @@ Object.defineProperty(exports, "generateFileThumbnailBuffer", { enumerable: true
|
|
|
62
62
|
var validateFormatUtils_1 = require("./validateFormatUtils");
|
|
63
63
|
Object.defineProperty(exports, "validateFormatEmailAddress", { enumerable: true, get: function () { return validateFormatUtils_1.validateFormatEmailAddress; } });
|
|
64
64
|
Object.defineProperty(exports, "validateFormatMobileNumber", { enumerable: true, get: function () { return validateFormatUtils_1.validateFormatMobileNumber; } });
|
|
65
|
-
var
|
|
66
|
-
Object.defineProperty(exports, "
|
|
65
|
+
var serviceFactoryUtils_1 = require("./serviceFactoryUtils");
|
|
66
|
+
Object.defineProperty(exports, "registerService", { enumerable: true, get: function () { return serviceFactoryUtils_1.registerService; } });
|
|
67
|
+
Object.defineProperty(exports, "registerServiceNames", { enumerable: true, get: function () { return serviceFactoryUtils_1.registerServiceNames; } });
|
|
68
|
+
Object.defineProperty(exports, "registerServiceAllowUserTypes", { enumerable: true, get: function () { return serviceFactoryUtils_1.registerServiceAllowUserTypes; } });
|
|
67
69
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;AAAA,qDAAyD;AAAhD,uHAAA,oBAAoB,OAAA;AAC7B,iCAAsC;AAA7B,4GAAA,OAAO,OAAK;AACrB,+BAAyC;AAAhC,+GAAA,OAAO,OAAS;AACzB,iDAAsE;AAA7D,4GAAA,WAAW,OAAA;AAAE,0GAAA,SAAS,OAAA;AAAE,4GAAA,WAAW,OAAA;AAC5C,yCAAsG;AAA7F,kGAAA,KAAK,OAAA;AAAE,+GAAA,kBAAkB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAChF,6CAA6L;AAApL,iHAAA,kBAAkB,OAAA;AAAE,sHAAA,uBAAuB,OAAA;AAAE,0HAAA,2BAA2B,OAAA;AAAE,0HAAA,2BAA2B,OAAA;AAAE,sHAAA,uBAAuB,OAAA;AAAE,2HAAA,4BAA4B,OAAA;AACrK,uCAA+C;AAAtC,mHAAA,OAAO,OAAU;AAC1B,mDAAwD;AAA/C,4GAAA,UAAU,OAAA;AAAE,0GAAA,QAAQ,OAAA;AAC7B,2CAA2C;AAC3C,wFAAwF;AACxF,mEAAmE;AACnE,mDAAmD;AACnD,uCAA4G;AAAnG,iHAAA,qBAAqB,OAAA;AAAE,2HAAA,+BAA+B,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAExF,+CAAgG;AAAvF,sHAAA,sBAAsB,OAAA;AAAE,uIAAA,uCAAuC,OAAA;AACxE,6DAAuF;AAA9E,yHAAA,kBAAkB,OAAA;AAAE,kIAAA,2BAA2B,OAAA;AACxD,yCAAgE;AAAvD,8GAAA,iBAAiB,OAAA;AAAE,4GAAA,eAAe,OAAA;AAC3C,mDAAoJ;AAA3I,qHAAA,mBAAmB,OAAA;AAAE,yHAAA,uBAAuB,OAAA;AAAE,qHAAA,mBAAmB,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AAC1H,iDAA8D;AAArD,6GAAA,YAAY,OAAA;AAAE,+GAAA,cAAc,OAAA;AACrC,iDAA6D;AAApD,4HAAA,2BAA2B,OAAA;AACpC,6DAA8F;AAArF,iIAAA,0BAA0B,OAAA;AAAE,iIAAA,0BAA0B,OAAA;AAC/D
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;AAAA,qDAAyD;AAAhD,uHAAA,oBAAoB,OAAA;AAC7B,iCAAsC;AAA7B,4GAAA,OAAO,OAAK;AACrB,+BAAyC;AAAhC,+GAAA,OAAO,OAAS;AACzB,iDAAsE;AAA7D,4GAAA,WAAW,OAAA;AAAE,0GAAA,SAAS,OAAA;AAAE,4GAAA,WAAW,OAAA;AAC5C,yCAAsG;AAA7F,kGAAA,KAAK,OAAA;AAAE,+GAAA,kBAAkB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAChF,6CAA6L;AAApL,iHAAA,kBAAkB,OAAA;AAAE,sHAAA,uBAAuB,OAAA;AAAE,0HAAA,2BAA2B,OAAA;AAAE,0HAAA,2BAA2B,OAAA;AAAE,sHAAA,uBAAuB,OAAA;AAAE,2HAAA,4BAA4B,OAAA;AACrK,uCAA+C;AAAtC,mHAAA,OAAO,OAAU;AAC1B,mDAAwD;AAA/C,4GAAA,UAAU,OAAA;AAAE,0GAAA,QAAQ,OAAA;AAC7B,2CAA2C;AAC3C,wFAAwF;AACxF,mEAAmE;AACnE,mDAAmD;AACnD,uCAA4G;AAAnG,iHAAA,qBAAqB,OAAA;AAAE,2HAAA,+BAA+B,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAExF,+CAAgG;AAAvF,sHAAA,sBAAsB,OAAA;AAAE,uIAAA,uCAAuC,OAAA;AACxE,6DAAuF;AAA9E,yHAAA,kBAAkB,OAAA;AAAE,kIAAA,2BAA2B,OAAA;AACxD,yCAAgE;AAAvD,8GAAA,iBAAiB,OAAA;AAAE,4GAAA,eAAe,OAAA;AAC3C,mDAAoJ;AAA3I,qHAAA,mBAAmB,OAAA;AAAE,yHAAA,uBAAuB,OAAA;AAAE,qHAAA,mBAAmB,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AAC1H,iDAA8D;AAArD,6GAAA,YAAY,OAAA;AAAE,+GAAA,cAAc,OAAA;AACrC,iDAA6D;AAApD,4HAAA,2BAA2B,OAAA;AACpC,6DAA8F;AAArF,iIAAA,0BAA0B,OAAA;AAAE,iIAAA,0BAA0B,OAAA;AAC/D,6DAA4G;AAAnG,sHAAA,eAAe,OAAA;AAAE,2HAAA,oBAAoB,OAAA;AAAE,oIAAA,6BAA6B,OAAA","sourcesContent":["export { getCoreConfiguration } from \"./coreConfigUtils\";\nexport { default as _ } from \"lodash\";\nexport { default as sharp } from \"sharp\";\nexport { HTTP_STATUS, sendError, sendSuccess } from \"./responseUtils\";\nexport { dayjs, getCurrentDateTime, getCurrentDateTimeISO, formatDisplayDateTime } from \"./dateUtils\";\nexport { validateWithSchema, validateMultipleSchemas, convertPayloadByTableSchema, validateModelFieldsWithData, createPublicScopeSchema, normalizePublicScopeFromBody } from \"./schemaUtils\";\nexport { default as logger } from \"./logUtils\";\nexport { throwError, logError } from \"./exceptionUtils\";\n// export { getSwmAuth } from \"./smwUtils\";\n// export { getRequestHeaderLocCode, checkRequestContentIsEmpty } from \"./requestUtils\";\n// export { storeJwtInMemory, getJwtFromMemory } from \"./jwtUtils\";\n// export { resizeImageBuffer } from \"./shapeUtils\"\nexport { getFormattedZodErrors, getFormattedZodErrorsIntoString, buildCommonStatusSchema } from \"./zodUtils\"\nexport type { DefaultServiceProps } from \"./serviceUtils\"\nexport { getDefaultServiceProps, replaceDefaultServicePropsFromAccessKey } from \"./serviceUtils\"\nexport { buildFullFieldName, groupPayloadInjectionFields } from \"./injectionFieldUtils\"\nexport { generateAuthToken, verifyAuthToken } from \"./authUtils\"\nexport { generateAccessKeyId, generateAccessKeySecret, hashAccessKeySecret, encryptAccessKeySecret, decryptAccessKeySecret } from \"./accessKeyUtils\"\nexport { hashPassword, verifyPassword } from \"./passwordUtils\"\nexport { generateFileThumbnailBuffer } from \"./fileThumbnail\"\nexport { validateFormatEmailAddress, validateFormatMobileNumber } from \"./validateFormatUtils\"\nexport { registerService, registerServiceNames, registerServiceAllowUserTypes } from \"./serviceFactoryUtils\"\nexport type { RegisterServiceName, RegisterServiceAllowUserType } from \"./serviceFactoryUtils\""]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DefaultServiceProps } from "./serviceUtils";
|
|
2
|
+
export declare const registerServiceAllowUserTypes: {
|
|
3
|
+
readonly any: "any";
|
|
4
|
+
readonly operator: "operator";
|
|
5
|
+
readonly administrator: "administrator";
|
|
6
|
+
};
|
|
7
|
+
export type RegisterServiceAllowUserType = typeof registerServiceAllowUserTypes[keyof typeof registerServiceAllowUserTypes];
|
|
8
|
+
export declare const registerServiceNames: {
|
|
9
|
+
readonly AccountService: "AccountService";
|
|
10
|
+
readonly RegionService: "RegionService";
|
|
11
|
+
};
|
|
12
|
+
export type RegisterServiceName = typeof registerServiceNames[keyof typeof registerServiceNames];
|
|
13
|
+
export declare const registerService: <T extends Record<string, {
|
|
14
|
+
fn: (...args: any[]) => Promise<any>;
|
|
15
|
+
allowUserTypes: readonly RegisterServiceAllowUserType[];
|
|
16
|
+
actionName?: string;
|
|
17
|
+
}>>(serviceName: RegisterServiceName, auth: DefaultServiceProps, methodConfigs: T) => { [K in keyof T]: (...args: Parameters<T[K]["fn"]>) => ReturnType<T[K]["fn"]>; };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerService = exports.registerServiceNames = exports.registerServiceAllowUserTypes = void 0;
|
|
4
|
+
const exceptionUtils_1 = require("./exceptionUtils");
|
|
5
|
+
// import { AccessKeyUserType } from "../services";
|
|
6
|
+
exports.registerServiceAllowUserTypes = {
|
|
7
|
+
any: "any", // public
|
|
8
|
+
operator: "operator",
|
|
9
|
+
administrator: "administrator",
|
|
10
|
+
};
|
|
11
|
+
exports.registerServiceNames = {
|
|
12
|
+
AccountService: "AccountService",
|
|
13
|
+
RegionService: "RegionService",
|
|
14
|
+
};
|
|
15
|
+
// type FnWithSingleArg<Args extends object, Ret> = (args: Args) => Promise<Ret>;
|
|
16
|
+
// export type RegisterServiceConfig<
|
|
17
|
+
// Fn extends (...args: any[]) => Promise<any> = (...args: any[]) => Promise<any>
|
|
18
|
+
// > = {
|
|
19
|
+
// // fn: Fn;
|
|
20
|
+
// fn: FnWithSingleArg<any, any>;
|
|
21
|
+
// allowUserTypes?: readonly RegisterServiceAllowUserType[];
|
|
22
|
+
// actionName?: string;
|
|
23
|
+
// };
|
|
24
|
+
// export type RegisterServiceConfigs = Record<string, RegisterServiceConfig>;
|
|
25
|
+
const registerService = (serviceName, auth, methodConfigs) => {
|
|
26
|
+
const wrapped = {};
|
|
27
|
+
for (const key in methodConfigs) {
|
|
28
|
+
const { fn, allowUserTypes, actionName } = methodConfigs[key];
|
|
29
|
+
if (allowUserTypes.includes("any") === false) {
|
|
30
|
+
// wrap with access control
|
|
31
|
+
wrapped[key] = ((...args) => {
|
|
32
|
+
// if (!allowUserTypes.includes(auth.accessKeyUserType as RegisterServiceAllowUserType)) {
|
|
33
|
+
// throw new Error(
|
|
34
|
+
// `[${serviceName}] ${auth.accessKeyUserType} not allowed to ${actionName ?? key}`
|
|
35
|
+
// );
|
|
36
|
+
// }
|
|
37
|
+
const callerUserType = auth.isOperator === true ? "operator" : "administrator";
|
|
38
|
+
if (allowUserTypes.includes(callerUserType) === false) {
|
|
39
|
+
(0, exceptionUtils_1.throwError)(`Access denied: ${serviceName}:${key}, Required: ${allowUserTypes.join(', ')}, Provided: ${callerUserType}`);
|
|
40
|
+
}
|
|
41
|
+
return fn(...args);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// public method
|
|
46
|
+
wrapped[key] = fn;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return wrapped;
|
|
50
|
+
};
|
|
51
|
+
exports.registerService = registerService;
|
|
52
|
+
// export const protectServiceOnlyOperator = <T extends (...args: any[]) => Promise<any>>(
|
|
53
|
+
// fn: T,
|
|
54
|
+
// auth: DefaultServiceProps,
|
|
55
|
+
// actionName?: string
|
|
56
|
+
// ) => {
|
|
57
|
+
// return async (...args: Parameters<T>): Promise<ReturnType<T>> => {
|
|
58
|
+
// if (!auth.isOperator) {
|
|
59
|
+
// throw new Error(
|
|
60
|
+
// `Only operator token/access key allowed to ${actionName ?? "perform this action"}`
|
|
61
|
+
// );
|
|
62
|
+
// }
|
|
63
|
+
// return fn(...args);
|
|
64
|
+
// };
|
|
65
|
+
// };
|
|
66
|
+
//# sourceMappingURL=serviceFactoryUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceFactoryUtils.js","sourceRoot":"","sources":["../../src/utils/serviceFactoryUtils.ts"],"names":[],"mappings":";;;AAAA,qDAA8C;AAG9C,kDAAkD;AAErC,QAAA,6BAA6B,GAAG;IACzC,GAAG,EAAE,KAAK,EAAE,UAAU;IACtB,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,eAAe;CACxB,CAAA;AAIG,QAAA,oBAAoB,GAAG;IAChC,cAAc,EAAE,gBAAgB;IAChC,aAAa,EAAE,eAAe;CACxB,CAAA;AAIV,iFAAiF;AAEjF,qCAAqC;AACrC,qFAAqF;AACrF,QAAQ;AACR,iBAAiB;AACjB,qCAAqC;AACrC,gEAAgE;AAChE,2BAA2B;AAC3B,KAAK;AAEL,8EAA8E;AAEvE,MAAM,eAAe,GAAG,CAU3B,WAAgC,EAChC,IAAyB,EACzB,aAAgB,EAGd,EAAE;IACJ,MAAM,OAAO,GAAG,EAEf,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAC9B,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAE9D,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;YAC3C,2BAA2B;YAC3B,OAAO,CAAC,GAAc,CAAC,GAAG,CAAC,CAAC,GAAG,IAA2B,EAAE,EAAE;gBAC1D,0FAA0F;gBAC1F,uBAAuB;gBACvB,2FAA2F;gBAC3F,SAAS;gBACT,IAAI;gBAEJ,MAAM,cAAc,GAAiC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAA;gBAE5G,IAAI,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,KAAK,EAAE,CAAC;oBACpD,IAAA,2BAAU,EAAC,kBAAkB,WAAW,IAAI,GAAG,eAAe,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,cAAc,EAAE,CAAC,CAAA;gBAC3H,CAAC;gBAED,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YACvB,CAAC,CAAkF,CAAC;QACxF,CAAC;aAAM,CAAC;YACJ,gBAAgB;YAChB,OAAO,CAAC,GAAc,CAAC,GAAG,EAAmF,CAAC;QAClH,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AA/CW,QAAA,eAAe,mBA+C1B;AAEF,0FAA0F;AAC1F,aAAa;AACb,iCAAiC;AACjC,0BAA0B;AAC1B,SAAS;AACT,yEAAyE;AACzE,kCAAkC;AAClC,+BAA+B;AAC/B,qGAAqG;AACrG,iBAAiB;AACjB,YAAY;AACZ,8BAA8B;AAC9B,SAAS;AACT,KAAK","sourcesContent":["import { throwError } from \"./exceptionUtils\";\nimport { DefaultServiceProps } from \"./serviceUtils\";\n\n// import { AccessKeyUserType } from \"@/services\";\n\nexport const registerServiceAllowUserTypes = {\n any: \"any\", // public \n operator: \"operator\",\n administrator: \"administrator\",\n} as const\n\nexport type RegisterServiceAllowUserType = typeof registerServiceAllowUserTypes[keyof typeof registerServiceAllowUserTypes];\n\nexport const registerServiceNames = {\n AccountService: \"AccountService\",\n RegionService: \"RegionService\",\n} as const\n\nexport type RegisterServiceName = typeof registerServiceNames[keyof typeof registerServiceNames];\n\n// type FnWithSingleArg<Args extends object, Ret> = (args: Args) => Promise<Ret>;\n\n// export type RegisterServiceConfig<\n// Fn extends (...args: any[]) => Promise<any> = (...args: any[]) => Promise<any>\n// > = {\n// // fn: Fn;\n// fn: FnWithSingleArg<any, any>;\n// allowUserTypes?: readonly RegisterServiceAllowUserType[];\n// actionName?: string;\n// };\n\n// export type RegisterServiceConfigs = Record<string, RegisterServiceConfig>;\n\nexport const registerService = <\n T extends Record<\n string,\n {\n fn: (...args: any[]) => Promise<any>;\n allowUserTypes: readonly RegisterServiceAllowUserType[];\n actionName?: string;\n }\n >\n>(\n serviceName: RegisterServiceName,\n auth: DefaultServiceProps,\n methodConfigs: T\n): {\n [K in keyof T]: (...args: Parameters<T[K][\"fn\"]>) => ReturnType<T[K][\"fn\"]>;\n } => {\n const wrapped = {} as {\n [K in keyof T]: (...args: Parameters<T[K][\"fn\"]>) => ReturnType<T[K][\"fn\"]>;\n };\n\n for (const key in methodConfigs) {\n const { fn, allowUserTypes, actionName } = methodConfigs[key];\n\n if (allowUserTypes.includes(\"any\") === false) {\n // wrap with access control\n wrapped[key as keyof T] = ((...args: Parameters<typeof fn>) => {\n // if (!allowUserTypes.includes(auth.accessKeyUserType as RegisterServiceAllowUserType)) {\n // throw new Error(\n // `[${serviceName}] ${auth.accessKeyUserType} not allowed to ${actionName ?? key}`\n // );\n // }\n\n const callerUserType: RegisterServiceAllowUserType = auth.isOperator === true ? \"operator\" : \"administrator\"\n\n if (allowUserTypes.includes(callerUserType) === false) {\n throwError(`Access denied: ${serviceName}:${key}, Required: ${allowUserTypes.join(', ')}, Provided: ${callerUserType}`)\n }\n\n return fn(...args);\n }) as (...args: Parameters<T[typeof key][\"fn\"]>) => ReturnType<T[typeof key][\"fn\"]>;\n } else {\n // public method\n wrapped[key as keyof T] = fn as (...args: Parameters<T[typeof key][\"fn\"]>) => ReturnType<T[typeof key][\"fn\"]>;\n }\n }\n\n return wrapped;\n};\n\n// export const protectServiceOnlyOperator = <T extends (...args: any[]) => Promise<any>>(\n// fn: T,\n// auth: DefaultServiceProps,\n// actionName?: string\n// ) => {\n// return async (...args: Parameters<T>): Promise<ReturnType<T>> => {\n// if (!auth.isOperator) {\n// throw new Error(\n// `Only operator token/access key allowed to ${actionName ?? \"perform this action\"}`\n// );\n// }\n// return fn(...args);\n// };\n// };"]}
|