@ruiapp/rapid-core 0.1.63 → 0.1.66

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.
Files changed (166) hide show
  1. package/dist/helpers/entityHelpers.d.ts +3 -1
  2. package/dist/{dataAccess → helpers}/metaHelper.d.ts +3 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.js +879 -154
  5. package/dist/plugins/setting/SettingPlugin.d.ts +21 -0
  6. package/dist/plugins/setting/SettingPluginTypes.d.ts +33 -0
  7. package/dist/plugins/setting/SettingService.d.ts +22 -0
  8. package/dist/plugins/setting/actionHandlers/getSystemSettingValues.d.ts +7 -0
  9. package/dist/plugins/setting/actionHandlers/getUserSettingValues.d.ts +7 -0
  10. package/dist/plugins/setting/actionHandlers/index.d.ts +4 -0
  11. package/dist/plugins/setting/models/SystemSettingGroupSetting.d.ts +3 -0
  12. package/dist/plugins/setting/models/SystemSettingItem.d.ts +3 -0
  13. package/dist/plugins/setting/models/SystemSettingItemSetting.d.ts +3 -0
  14. package/dist/plugins/setting/models/UserSettingGroupSetting.d.ts +3 -0
  15. package/dist/plugins/setting/models/UserSettingItem.d.ts +3 -0
  16. package/dist/plugins/setting/models/UserSettingItemSetting.d.ts +3 -0
  17. package/dist/plugins/setting/models/index.d.ts +2 -0
  18. package/dist/plugins/setting/routes/getSystemSettingValues.d.ts +12 -0
  19. package/dist/plugins/setting/routes/getUserSettingValues.d.ts +12 -0
  20. package/dist/plugins/setting/routes/index.d.ts +12 -0
  21. package/dist/types.d.ts +4 -0
  22. package/package.json +1 -1
  23. package/rollup.config.js +16 -16
  24. package/src/bootstrapApplicationConfig.ts +552 -545
  25. package/src/core/actionHandler.ts +22 -22
  26. package/src/core/eventManager.ts +20 -20
  27. package/src/core/facility.ts +7 -7
  28. package/src/core/http/formDataParser.ts +89 -89
  29. package/src/core/http-types.ts +4 -4
  30. package/src/core/pluginManager.ts +175 -175
  31. package/src/core/providers/runtimeProvider.ts +5 -5
  32. package/src/core/request.ts +86 -86
  33. package/src/core/response.ts +76 -76
  34. package/src/core/routeContext.ts +43 -43
  35. package/src/core/routesBuilder.ts +88 -88
  36. package/src/core/server.ts +16 -1
  37. package/src/dataAccess/dataAccessTypes.ts +109 -109
  38. package/src/dataAccess/dataAccessor.ts +137 -137
  39. package/src/dataAccess/entityManager.ts +1298 -1292
  40. package/src/dataAccess/entityMapper.ts +4 -5
  41. package/src/dataAccess/propertyMapper.ts +27 -27
  42. package/src/deno-std/assert/assert.ts +9 -9
  43. package/src/deno-std/assert/assertion_error.ts +7 -7
  44. package/src/deno-std/datetime/to_imf.ts +32 -32
  45. package/src/deno-std/encoding/base64.ts +141 -141
  46. package/src/deno-std/http/cookie.ts +8 -1
  47. package/src/facilities/log/LogFacility.ts +35 -35
  48. package/src/helpers/entityHelpers.ts +76 -21
  49. package/src/{dataAccess → helpers}/filterHelper.ts +3 -1
  50. package/src/helpers/inputHelper.ts +11 -11
  51. package/src/{dataAccess → helpers}/metaHelper.ts +15 -6
  52. package/src/helpers/runCollectionEntityActionHandler.ts +6 -1
  53. package/src/index.ts +44 -41
  54. package/src/plugins/auth/AuthPlugin.ts +7 -1
  55. package/src/plugins/auth/actionHandlers/changePassword.ts +54 -54
  56. package/src/plugins/auth/actionHandlers/createSession.ts +63 -63
  57. package/src/plugins/auth/actionHandlers/deleteSession.ts +18 -18
  58. package/src/plugins/auth/actionHandlers/getMyProfile.ts +35 -35
  59. package/src/plugins/auth/actionHandlers/index.ts +8 -8
  60. package/src/plugins/auth/actionHandlers/resetPassword.ts +38 -38
  61. package/src/plugins/auth/models/AccessToken.ts +56 -56
  62. package/src/plugins/auth/models/index.ts +3 -3
  63. package/src/plugins/auth/routes/changePassword.ts +15 -15
  64. package/src/plugins/auth/routes/getMyProfile.ts +15 -15
  65. package/src/plugins/auth/routes/index.ts +7 -7
  66. package/src/plugins/auth/routes/resetPassword.ts +15 -15
  67. package/src/plugins/auth/routes/signin.ts +15 -15
  68. package/src/plugins/auth/routes/signout.ts +15 -15
  69. package/src/plugins/cronJob/CronJobPlugin.ts +7 -1
  70. package/src/plugins/cronJob/CronJobPluginTypes.ts +49 -49
  71. package/src/plugins/cronJob/actionHandlers/index.ts +4 -4
  72. package/src/plugins/cronJob/actionHandlers/runCronJob.ts +29 -29
  73. package/src/plugins/cronJob/routes/index.ts +3 -3
  74. package/src/plugins/cronJob/routes/runCronJob.ts +15 -15
  75. package/src/plugins/dataManage/DataManagePlugin.ts +7 -1
  76. package/src/plugins/dataManage/actionHandlers/addEntityRelations.ts +20 -20
  77. package/src/plugins/dataManage/actionHandlers/countCollectionEntities.ts +15 -15
  78. package/src/plugins/dataManage/actionHandlers/createCollectionEntitiesBatch.ts +42 -42
  79. package/src/plugins/dataManage/actionHandlers/createCollectionEntity.ts +24 -24
  80. package/src/plugins/dataManage/actionHandlers/deleteCollectionEntityById.ts +7 -4
  81. package/src/plugins/dataManage/actionHandlers/findCollectionEntities.ts +26 -26
  82. package/src/plugins/dataManage/actionHandlers/findCollectionEntityById.ts +21 -21
  83. package/src/plugins/dataManage/actionHandlers/queryDatabase.ts +22 -22
  84. package/src/plugins/dataManage/actionHandlers/removeEntityRelations.ts +20 -20
  85. package/src/plugins/dataManage/actionHandlers/updateCollectionEntityById.ts +35 -35
  86. package/src/plugins/entityAccessControl/EntityAccessControlPlugin.ts +146 -146
  87. package/src/plugins/fileManage/FileManagePlugin.ts +7 -1
  88. package/src/plugins/fileManage/actionHandlers/downloadDocument.ts +36 -36
  89. package/src/plugins/fileManage/actionHandlers/downloadFile.ts +28 -28
  90. package/src/plugins/fileManage/actionHandlers/uploadFile.ts +33 -33
  91. package/src/plugins/fileManage/routes/downloadDocument.ts +15 -15
  92. package/src/plugins/fileManage/routes/downloadFile.ts +15 -15
  93. package/src/plugins/fileManage/routes/index.ts +5 -5
  94. package/src/plugins/fileManage/routes/uploadFile.ts +15 -15
  95. package/src/plugins/metaManage/MetaManagePlugin.ts +37 -9
  96. package/src/plugins/metaManage/actionHandlers/getMetaModelDetail.ts +10 -10
  97. package/src/plugins/metaManage/actionHandlers/listMetaModels.ts +9 -9
  98. package/src/plugins/metaManage/actionHandlers/listMetaRoutes.ts +9 -9
  99. package/src/plugins/routeManage/RouteManagePlugin.ts +7 -1
  100. package/src/plugins/routeManage/actionHandlers/httpProxy.ts +13 -13
  101. package/src/plugins/sequence/SequencePlugin.ts +8 -2
  102. package/src/plugins/sequence/SequencePluginTypes.ts +9 -1
  103. package/src/plugins/sequence/SequenceService.ts +81 -81
  104. package/src/plugins/sequence/actionHandlers/generateSn.ts +32 -32
  105. package/src/plugins/sequence/actionHandlers/index.ts +4 -4
  106. package/src/plugins/sequence/models/SequenceAutoIncrementRecord.ts +49 -49
  107. package/src/plugins/sequence/models/SequenceRule.ts +42 -42
  108. package/src/plugins/sequence/models/index.ts +4 -4
  109. package/src/plugins/sequence/routes/generateSn.ts +15 -15
  110. package/src/plugins/sequence/routes/index.ts +3 -3
  111. package/src/plugins/sequence/segment-utility.ts +11 -11
  112. package/src/plugins/sequence/segments/autoIncrement.ts +6 -1
  113. package/src/plugins/sequence/segments/dayOfMonth.ts +6 -1
  114. package/src/plugins/sequence/segments/index.ts +9 -9
  115. package/src/plugins/sequence/segments/literal.ts +6 -1
  116. package/src/plugins/sequence/segments/month.ts +6 -1
  117. package/src/plugins/sequence/segments/parameter.ts +6 -1
  118. package/src/plugins/sequence/segments/year.ts +6 -1
  119. package/src/plugins/serverOperation/ServerOperationPlugin.ts +91 -91
  120. package/src/plugins/serverOperation/ServerOperationPluginTypes.ts +15 -15
  121. package/src/plugins/serverOperation/actionHandlers/index.ts +4 -4
  122. package/src/plugins/serverOperation/actionHandlers/runServerOperation.ts +15 -15
  123. package/src/plugins/setting/SettingPlugin.ts +68 -0
  124. package/src/plugins/setting/SettingPluginTypes.ts +37 -0
  125. package/src/plugins/setting/SettingService.ts +206 -0
  126. package/src/plugins/setting/actionHandlers/getSystemSettingValues.ts +30 -0
  127. package/src/plugins/setting/actionHandlers/getUserSettingValues.ts +38 -0
  128. package/src/plugins/setting/actionHandlers/index.ts +5 -0
  129. package/src/plugins/setting/models/SystemSettingGroupSetting.ts +56 -0
  130. package/src/plugins/setting/models/SystemSettingItem.ts +42 -0
  131. package/src/plugins/setting/models/SystemSettingItemSetting.ts +72 -0
  132. package/src/plugins/setting/models/UserSettingGroupSetting.ts +56 -0
  133. package/src/plugins/setting/models/UserSettingItem.ts +49 -0
  134. package/src/plugins/setting/models/UserSettingItemSetting.ts +72 -0
  135. package/src/plugins/setting/models/index.ts +8 -0
  136. package/src/plugins/setting/routes/getSystemSettingValues.ts +15 -0
  137. package/src/plugins/setting/routes/getUserSettingValues.ts +15 -0
  138. package/src/plugins/setting/routes/index.ts +4 -0
  139. package/src/plugins/stateMachine/StateMachinePlugin.ts +8 -2
  140. package/src/plugins/stateMachine/StateMachinePluginTypes.ts +9 -1
  141. package/src/plugins/stateMachine/actionHandlers/index.ts +4 -4
  142. package/src/plugins/stateMachine/actionHandlers/sendStateMachineEvent.ts +51 -51
  143. package/src/plugins/stateMachine/models/StateMachine.ts +42 -42
  144. package/src/plugins/stateMachine/models/index.ts +3 -3
  145. package/src/plugins/stateMachine/routes/index.ts +3 -3
  146. package/src/plugins/stateMachine/routes/sendStateMachineEvent.ts +15 -15
  147. package/src/plugins/stateMachine/stateMachineHelper.ts +36 -36
  148. package/src/plugins/webhooks/WebhooksPlugin.ts +13 -2
  149. package/src/plugins/webhooks/pluginConfig.ts +74 -74
  150. package/src/polyfill.ts +5 -5
  151. package/src/proxy/mod.ts +38 -38
  152. package/src/proxy/types.ts +21 -21
  153. package/src/queryBuilder/index.ts +1 -1
  154. package/src/queryBuilder/queryBuilder.ts +473 -473
  155. package/src/server.ts +23 -3
  156. package/src/types.ts +593 -589
  157. package/src/utilities/accessControlUtility.ts +33 -33
  158. package/src/utilities/errorUtility.ts +4 -6
  159. package/src/utilities/fsUtility.ts +61 -61
  160. package/src/utilities/httpUtility.ts +19 -19
  161. package/src/utilities/jwtUtility.ts +26 -26
  162. package/src/utilities/typeUtility.ts +11 -11
  163. package/tsconfig.json +19 -19
  164. package/dist/utilities/rapidUtility.d.ts +0 -2
  165. package/src/utilities/rapidUtility.ts +0 -5
  166. /package/dist/{dataAccess → helpers}/filterHelper.d.ts +0 -0
@@ -2,15 +2,30 @@
2
2
  * Meta manager plugin
3
3
  */
4
4
 
5
- import { IQueryBuilder, QuoteTableOptions, RpdApplicationConfig, RpdDataModel, RpdDataModelProperty, RpdDataPropertyTypes, RpdEntityCreateEventPayload, RpdEntityDeleteEventPayload, RpdEntityUpdateEventPayload } from "~/types";
6
- import { IRpdServer, RapidPlugin, RpdConfigurationItemOptions, RpdServerPluginConfigurableTargetOptions, RpdServerPluginExtendingAbilities } from "~/core/server";
5
+ import {
6
+ IQueryBuilder,
7
+ QuoteTableOptions,
8
+ RpdApplicationConfig,
9
+ RpdDataModel,
10
+ RpdDataModelProperty,
11
+ RpdDataPropertyTypes,
12
+ RpdEntityCreateEventPayload,
13
+ RpdEntityDeleteEventPayload,
14
+ RpdEntityUpdateEventPayload,
15
+ } from "~/types";
16
+ import {
17
+ IRpdServer,
18
+ RapidPlugin,
19
+ RpdConfigurationItemOptions,
20
+ RpdServerPluginConfigurableTargetOptions,
21
+ RpdServerPluginExtendingAbilities,
22
+ } from "~/core/server";
7
23
 
8
24
  import * as listMetaModels from "./actionHandlers/listMetaModels";
9
25
  import * as listMetaRoutes from "./actionHandlers/listMetaRoutes";
10
26
  import * as getMetaModelDetail from "./actionHandlers/getMetaModelDetail";
11
- import { isRelationProperty } from "~/utilities/rapidUtility";
12
27
  import { find } from "lodash";
13
- import { getEntityPropertiesIncludingBase } from "~/dataAccess/metaHelper";
28
+ import { getEntityPropertiesIncludingBase, isRelationProperty } from "~/helpers/metaHelper";
14
29
 
15
30
  class MetaManager implements RapidPlugin {
16
31
  get code(): string {
@@ -90,7 +105,10 @@ async function handleEntityUpdateEvent(server: IRpdServer, sender: RapidPlugin,
90
105
  const modelChanges: Partial<RpdDataModel> = payload.changes;
91
106
  if (modelChanges.tableName) {
92
107
  const modelBefore: RpdDataModel = payload.before;
93
- await server.queryDatabaseObject(`ALTER TABLE ${queryBuilder.quoteTable(modelBefore)} RENAME TO ${queryBuilder.quoteTable(modelChanges as QuoteTableOptions)}`, []);
108
+ await server.queryDatabaseObject(
109
+ `ALTER TABLE ${queryBuilder.quoteTable(modelBefore)} RENAME TO ${queryBuilder.quoteTable(modelChanges as QuoteTableOptions)}`,
110
+ [],
111
+ );
94
112
  }
95
113
  }
96
114
  }
@@ -220,7 +238,10 @@ async function syncDatabaseSchema(server: IRpdServer, applicationConfig: RpdAppl
220
238
  }
221
239
  } else if (property.relation === "many") {
222
240
  if (property.linkTableName) {
223
- const tableInDb = find(tablesInDb, { table_schema: property.linkSchema || server.databaseConfig.dbDefaultSchema, table_name: property.linkTableName });
241
+ const tableInDb = find(tablesInDb, {
242
+ table_schema: property.linkSchema || server.databaseConfig.dbDefaultSchema,
243
+ table_name: property.linkTableName,
244
+ });
224
245
  if (!tableInDb) {
225
246
  columnDDL = generateLinkTableDDL(queryBuilder, {
226
247
  linkSchema: property.linkSchema,
@@ -289,13 +310,17 @@ async function syncDatabaseSchema(server: IRpdServer, applicationConfig: RpdAppl
289
310
  } else {
290
311
  const expectedColumnType = pgPropertyTypeColumnMap[property.type];
291
312
  if (columnInDb.udt_name !== expectedColumnType) {
292
- const sqlAlterColumnType = `alter table ${queryBuilder.quoteTable(model)} alter column ${queryBuilder.quoteObject(columnName)} type ${expectedColumnType}`;
313
+ const sqlAlterColumnType = `alter table ${queryBuilder.quoteTable(model)} alter column ${queryBuilder.quoteObject(
314
+ columnName,
315
+ )} type ${expectedColumnType}`;
293
316
  await server.tryQueryDatabaseObject(sqlAlterColumnType);
294
317
  }
295
318
 
296
319
  if (property.defaultValue) {
297
320
  if (!columnInDb.column_default) {
298
- const sqlSetColumnDefault = `alter table ${queryBuilder.quoteTable(model)} alter column ${queryBuilder.quoteObject(columnName)} set default ${property.defaultValue}`;
321
+ const sqlSetColumnDefault = `alter table ${queryBuilder.quoteTable(model)} alter column ${queryBuilder.quoteObject(columnName)} set default ${
322
+ property.defaultValue
323
+ }`;
299
324
  await server.tryQueryDatabaseObject(sqlSetColumnDefault);
300
325
  }
301
326
  } else {
@@ -335,7 +360,10 @@ async function syncDatabaseSchema(server: IRpdServer, applicationConfig: RpdAppl
335
360
  constraint_name: expectedContraintName,
336
361
  });
337
362
  if (!constraintInDb) {
338
- await server.queryDatabaseObject(`ALTER TABLE ${queryBuilder.quoteTable(model)} ADD CONSTRAINT ${queryBuilder.quoteObject(expectedContraintName)} PRIMARY KEY (id);`, []);
363
+ await server.queryDatabaseObject(
364
+ `ALTER TABLE ${queryBuilder.quoteTable(model)} ADD CONSTRAINT ${queryBuilder.quoteObject(expectedContraintName)} PRIMARY KEY (id);`,
365
+ [],
366
+ );
339
367
  }
340
368
  }
341
369
  }
@@ -1,10 +1,10 @@
1
- import { ActionHandlerContext } from "~/core/actionHandler";
2
- import { RapidPlugin } from "~/core/server";
3
-
4
- export const code = "getMetaModelDetail";
5
-
6
- export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: any) {
7
- const { server, input } = ctx;
8
- const model = server.getModel(input);
9
- ctx.output = model;
10
- }
1
+ import { ActionHandlerContext } from "~/core/actionHandler";
2
+ import { RapidPlugin } from "~/core/server";
3
+
4
+ export const code = "getMetaModelDetail";
5
+
6
+ export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: any) {
7
+ const { server, input } = ctx;
8
+ const model = server.getModel(input);
9
+ ctx.output = model;
10
+ }
@@ -1,9 +1,9 @@
1
- import { ActionHandlerContext } from "~/core/actionHandler";
2
- import { RapidPlugin } from "~/core/server";
3
-
4
- export const code = "listMetaModels";
5
-
6
- export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: any) {
7
- const { applicationConfig } = ctx;
8
- ctx.output = { list: applicationConfig.models };
9
- }
1
+ import { ActionHandlerContext } from "~/core/actionHandler";
2
+ import { RapidPlugin } from "~/core/server";
3
+
4
+ export const code = "listMetaModels";
5
+
6
+ export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: any) {
7
+ const { applicationConfig } = ctx;
8
+ ctx.output = { list: applicationConfig.models };
9
+ }
@@ -1,9 +1,9 @@
1
- import { ActionHandlerContext } from "~/core/actionHandler";
2
- import { RapidPlugin } from "~/core/server";
3
-
4
- export const code = "listMetaRoutes";
5
-
6
- export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: any) {
7
- const { applicationConfig } = ctx;
8
- ctx.output = { list: applicationConfig.routes };
9
- }
1
+ import { ActionHandlerContext } from "~/core/actionHandler";
2
+ import { RapidPlugin } from "~/core/server";
3
+
4
+ export const code = "listMetaRoutes";
5
+
6
+ export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: any) {
7
+ const { applicationConfig } = ctx;
8
+ ctx.output = { list: applicationConfig.routes };
9
+ }
@@ -3,7 +3,13 @@
3
3
  */
4
4
 
5
5
  import { RpdApplicationConfig } from "~/types";
6
- import { RpdServerPluginExtendingAbilities, RpdServerPluginConfigurableTargetOptions, RpdConfigurationItemOptions, IRpdServer, RapidPlugin } from "~/core/server";
6
+ import {
7
+ RpdServerPluginExtendingAbilities,
8
+ RpdServerPluginConfigurableTargetOptions,
9
+ RpdConfigurationItemOptions,
10
+ IRpdServer,
11
+ RapidPlugin,
12
+ } from "~/core/server";
7
13
  import * as httpProxy from "./actionHandlers/httpProxy";
8
14
 
9
15
  class RouteManager implements RapidPlugin {
@@ -1,13 +1,13 @@
1
- import { RunProxyHandlerOptions } from "~/types";
2
- import { doProxy } from "~/proxy/mod";
3
- import { ActionHandlerContext } from "~/core/actionHandler";
4
- import { RapidPlugin } from "~/core/server";
5
-
6
- export const code = "httpProxy";
7
-
8
- export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: RunProxyHandlerOptions) {
9
- const { logger } = ctx;
10
- logger.debug(`Running ${code} handler...`);
11
-
12
- await doProxy(ctx.routerContext, options);
13
- }
1
+ import { RunProxyHandlerOptions } from "~/types";
2
+ import { doProxy } from "~/proxy/mod";
3
+ import { ActionHandlerContext } from "~/core/actionHandler";
4
+ import { RapidPlugin } from "~/core/server";
5
+
6
+ export const code = "httpProxy";
7
+
8
+ export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: RunProxyHandlerOptions) {
9
+ const { logger } = ctx;
10
+ logger.debug(`Running ${code} handler...`);
11
+
12
+ await doProxy(ctx.routerContext, options);
13
+ }
@@ -3,7 +3,13 @@
3
3
  */
4
4
 
5
5
  import { CreateEntityOptions, RpdApplicationConfig, RpdDataModel, RpdDataModelProperty } from "~/types";
6
- import { IRpdServer, RapidPlugin, RpdConfigurationItemOptions, RpdServerPluginConfigurableTargetOptions, RpdServerPluginExtendingAbilities } from "~/core/server";
6
+ import {
7
+ IRpdServer,
8
+ RapidPlugin,
9
+ RpdConfigurationItemOptions,
10
+ RpdServerPluginConfigurableTargetOptions,
11
+ RpdServerPluginExtendingAbilities,
12
+ } from "~/core/server";
7
13
 
8
14
  import pluginActionHandlers from "./actionHandlers";
9
15
  import pluginModels from "./models";
@@ -12,7 +18,7 @@ import { PropertySequenceConfig } from "./SequencePluginTypes";
12
18
  import { isEqual } from "lodash";
13
19
  import SequenceService from "./SequenceService";
14
20
  import { isNullOrUndefined } from "~/utilities/typeUtility";
15
- import { getEntityPropertiesIncludingBase } from "~/dataAccess/metaHelper";
21
+ import { getEntityPropertiesIncludingBase } from "~/helpers/metaHelper";
16
22
 
17
23
  class SequencePlugin implements RapidPlugin {
18
24
  #sequenceService!: SequenceService;
@@ -7,7 +7,15 @@ export type SequenceRuleConfig = {
7
7
  segments: SequenceSegmentConfig[];
8
8
  };
9
9
 
10
- export type SequenceSegmentConfig = SequenceLiteralSegmentConfig | SequenceYearSegmentConfig | SequenceMonthSegmentConfig | SequenceDayOfMonthSegmentConfig | SequenceDayOfWeekSegmentConfig | SequenceDayOfYearSegmentConfig | SequenceParameterSegmentConfig | SequenceAutoIncrementSegmentConfig;
10
+ export type SequenceSegmentConfig =
11
+ | SequenceLiteralSegmentConfig
12
+ | SequenceYearSegmentConfig
13
+ | SequenceMonthSegmentConfig
14
+ | SequenceDayOfMonthSegmentConfig
15
+ | SequenceDayOfWeekSegmentConfig
16
+ | SequenceDayOfYearSegmentConfig
17
+ | SequenceParameterSegmentConfig
18
+ | SequenceAutoIncrementSegmentConfig;
11
19
 
12
20
  export type SequenceLiteralSegmentConfig = {
13
21
  type: "literal";
@@ -1,81 +1,81 @@
1
- import { IRpdServer } from "~/core/server";
2
- import segmentResolvers from "./segments";
3
- import { find } from "lodash";
4
- import { SequenceRuleConfig, SequenceSegmentConfig } from "./SequencePluginTypes";
5
-
6
- export interface GenerateSequenceNumbersInput {
7
- ruleCode: string;
8
- parameters: Record<string, string>;
9
- amount: number;
10
- }
11
-
12
- export interface GenerateSequenceNumbersOutput {
13
- sequences: string[];
14
- }
15
-
16
- export interface SegmentResolver {
17
- segmentType: string;
18
- resolveSegmentValue(server: IRpdServer, ruleCode: string, config: SequenceSegmentConfig, input: GenerateSequenceNumbersInput): Promise<string>;
19
- }
20
-
21
- export default class SequenceService {
22
- #server: IRpdServer;
23
-
24
- constructor(server: IRpdServer) {
25
- this.#server = server;
26
- }
27
-
28
- async generateSn(server: IRpdServer, input: GenerateSequenceNumbersInput): Promise<string[]> {
29
- const sequenceNumbers = [];
30
- const { ruleCode, parameters } = input;
31
- let { amount } = input;
32
-
33
- if (!amount) {
34
- amount = 1;
35
- }
36
-
37
- const sequenceRuleDataAccessor = server.getDataAccessor({
38
- singularCode: "sequence_rule",
39
- });
40
-
41
- const sequenceRule = await sequenceRuleDataAccessor.findOne({
42
- filters: [
43
- {
44
- operator: "eq",
45
- field: {
46
- name: "code",
47
- },
48
- value: ruleCode,
49
- },
50
- ],
51
- });
52
-
53
- if (!sequenceRule) {
54
- throw new Error(`Failed to generate sequence number. Sequence with code '${sequenceRule.code}' not found.`);
55
- }
56
-
57
- const sequenceConfig: SequenceRuleConfig = sequenceRule.config;
58
- if (!sequenceConfig || !sequenceConfig.segments) {
59
- throw new Error("Failed to generate sequence number. Sequence not configured.");
60
- }
61
-
62
- for (let i = 0; i < amount; i++) {
63
- let sequenceNumber: string = "";
64
-
65
- for (const segmentConfig of sequenceConfig.segments) {
66
- const segmentResolver: SegmentResolver = find(segmentResolvers, (item) => item.segmentType === segmentConfig.type);
67
- if (!segmentResolver) {
68
- // TODO: deal with unkown segment type
69
- continue;
70
- }
71
-
72
- const segment = await segmentResolver.resolveSegmentValue(server, ruleCode, segmentConfig, input);
73
- sequenceNumber += segment;
74
- }
75
-
76
- sequenceNumbers.push(sequenceNumber);
77
- }
78
-
79
- return sequenceNumbers;
80
- }
81
- }
1
+ import { IRpdServer } from "~/core/server";
2
+ import segmentResolvers from "./segments";
3
+ import { find } from "lodash";
4
+ import { SequenceRuleConfig, SequenceSegmentConfig } from "./SequencePluginTypes";
5
+
6
+ export interface GenerateSequenceNumbersInput {
7
+ ruleCode: string;
8
+ parameters: Record<string, string>;
9
+ amount: number;
10
+ }
11
+
12
+ export interface GenerateSequenceNumbersOutput {
13
+ sequences: string[];
14
+ }
15
+
16
+ export interface SegmentResolver {
17
+ segmentType: string;
18
+ resolveSegmentValue(server: IRpdServer, ruleCode: string, config: SequenceSegmentConfig, input: GenerateSequenceNumbersInput): Promise<string>;
19
+ }
20
+
21
+ export default class SequenceService {
22
+ #server: IRpdServer;
23
+
24
+ constructor(server: IRpdServer) {
25
+ this.#server = server;
26
+ }
27
+
28
+ async generateSn(server: IRpdServer, input: GenerateSequenceNumbersInput): Promise<string[]> {
29
+ const sequenceNumbers = [];
30
+ const { ruleCode, parameters } = input;
31
+ let { amount } = input;
32
+
33
+ if (!amount) {
34
+ amount = 1;
35
+ }
36
+
37
+ const sequenceRuleDataAccessor = server.getDataAccessor({
38
+ singularCode: "sequence_rule",
39
+ });
40
+
41
+ const sequenceRule = await sequenceRuleDataAccessor.findOne({
42
+ filters: [
43
+ {
44
+ operator: "eq",
45
+ field: {
46
+ name: "code",
47
+ },
48
+ value: ruleCode,
49
+ },
50
+ ],
51
+ });
52
+
53
+ if (!sequenceRule) {
54
+ throw new Error(`Failed to generate sequence number. Sequence with code '${sequenceRule.code}' not found.`);
55
+ }
56
+
57
+ const sequenceConfig: SequenceRuleConfig = sequenceRule.config;
58
+ if (!sequenceConfig || !sequenceConfig.segments) {
59
+ throw new Error("Failed to generate sequence number. Sequence not configured.");
60
+ }
61
+
62
+ for (let i = 0; i < amount; i++) {
63
+ let sequenceNumber: string = "";
64
+
65
+ for (const segmentConfig of sequenceConfig.segments) {
66
+ const segmentResolver: SegmentResolver = find(segmentResolvers, (item) => item.segmentType === segmentConfig.type);
67
+ if (!segmentResolver) {
68
+ // TODO: deal with unkown segment type
69
+ continue;
70
+ }
71
+
72
+ const segment = await segmentResolver.resolveSegmentValue(server, ruleCode, segmentConfig, input);
73
+ sequenceNumber += segment;
74
+ }
75
+
76
+ sequenceNumbers.push(sequenceNumber);
77
+ }
78
+
79
+ return sequenceNumbers;
80
+ }
81
+ }
@@ -1,32 +1,32 @@
1
- import { ActionHandlerContext } from "~/core/actionHandler";
2
- import { RapidPlugin } from "~/core/server";
3
- import SequenceService, { GenerateSequenceNumbersInput, GenerateSequenceNumbersOutput } from "../SequenceService";
4
-
5
- export interface GenerateSequenceNumbersOptions {
6
- ruleCode: string;
7
- }
8
-
9
- export const code = "generateSn";
10
-
11
- export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: GenerateSequenceNumbersOptions) {
12
- const { server, routerContext } = ctx;
13
- const { response } = routerContext;
14
-
15
- const input: GenerateSequenceNumbersInput = ctx.input;
16
-
17
- if (options?.ruleCode) {
18
- input.ruleCode = options.ruleCode;
19
- }
20
-
21
- if (!input.ruleCode) {
22
- throw new Error(`Rule code is required when generating sequence numbers.`);
23
- }
24
-
25
- const sequenceService = server.getService<SequenceService>("sequenceService");
26
-
27
- const sequences = await sequenceService.generateSn(server, input);
28
-
29
- ctx.output = {
30
- sequences,
31
- } satisfies GenerateSequenceNumbersOutput;
32
- }
1
+ import { ActionHandlerContext } from "~/core/actionHandler";
2
+ import { RapidPlugin } from "~/core/server";
3
+ import SequenceService, { GenerateSequenceNumbersInput, GenerateSequenceNumbersOutput } from "../SequenceService";
4
+
5
+ export interface GenerateSequenceNumbersOptions {
6
+ ruleCode: string;
7
+ }
8
+
9
+ export const code = "generateSn";
10
+
11
+ export async function handler(plugin: RapidPlugin, ctx: ActionHandlerContext, options: GenerateSequenceNumbersOptions) {
12
+ const { server, routerContext } = ctx;
13
+ const { response } = routerContext;
14
+
15
+ const input: GenerateSequenceNumbersInput = ctx.input;
16
+
17
+ if (options?.ruleCode) {
18
+ input.ruleCode = options.ruleCode;
19
+ }
20
+
21
+ if (!input.ruleCode) {
22
+ throw new Error(`Rule code is required when generating sequence numbers.`);
23
+ }
24
+
25
+ const sequenceService = server.getService<SequenceService>("sequenceService");
26
+
27
+ const sequences = await sequenceService.generateSn(server, input);
28
+
29
+ ctx.output = {
30
+ sequences,
31
+ } satisfies GenerateSequenceNumbersOutput;
32
+ }
@@ -1,4 +1,4 @@
1
- import { IPluginActionHandler } from "~/core/actionHandler";
2
- import * as generateSn from "./generateSn";
3
-
4
- export default [generateSn] satisfies IPluginActionHandler[];
1
+ import { IPluginActionHandler } from "~/core/actionHandler";
2
+ import * as generateSn from "./generateSn";
3
+
4
+ export default [generateSn] satisfies IPluginActionHandler[];
@@ -1,49 +1,49 @@
1
- import { RpdDataModel } from "~/types";
2
-
3
- export default {
4
- maintainedBy: "sequencePlugin",
5
- namespace: "svc",
6
- name: "sequence_auto_increment_record",
7
- singularCode: "sequence_auto_increment_record",
8
- pluralCode: "sequence_auto_increment_records",
9
- schema: "public",
10
- tableName: "sequence_auto_increment_records",
11
- properties: [
12
- {
13
- name: "id",
14
- code: "id",
15
- columnName: "id",
16
- type: "integer",
17
- required: true,
18
- autoIncrement: true,
19
- },
20
- {
21
- name: "ruleCode",
22
- code: "ruleCode",
23
- columnName: "rule_code",
24
- type: "text",
25
- required: true,
26
- },
27
- {
28
- name: "scope",
29
- code: "scope",
30
- columnName: "scope",
31
- type: "text",
32
- required: false,
33
- },
34
- {
35
- name: "currentValue",
36
- code: "currentValue",
37
- columnName: "current_value",
38
- type: "integer",
39
- required: true,
40
- },
41
- {
42
- name: "updatedAt",
43
- code: "updatedAt",
44
- columnName: "updated_at",
45
- type: "datetime",
46
- required: true,
47
- },
48
- ],
49
- } as RpdDataModel;
1
+ import { RpdDataModel } from "~/types";
2
+
3
+ export default {
4
+ maintainedBy: "sequencePlugin",
5
+ namespace: "svc",
6
+ name: "sequence_auto_increment_record",
7
+ singularCode: "sequence_auto_increment_record",
8
+ pluralCode: "sequence_auto_increment_records",
9
+ schema: "public",
10
+ tableName: "sequence_auto_increment_records",
11
+ properties: [
12
+ {
13
+ name: "id",
14
+ code: "id",
15
+ columnName: "id",
16
+ type: "integer",
17
+ required: true,
18
+ autoIncrement: true,
19
+ },
20
+ {
21
+ name: "ruleCode",
22
+ code: "ruleCode",
23
+ columnName: "rule_code",
24
+ type: "text",
25
+ required: true,
26
+ },
27
+ {
28
+ name: "scope",
29
+ code: "scope",
30
+ columnName: "scope",
31
+ type: "text",
32
+ required: false,
33
+ },
34
+ {
35
+ name: "currentValue",
36
+ code: "currentValue",
37
+ columnName: "current_value",
38
+ type: "integer",
39
+ required: true,
40
+ },
41
+ {
42
+ name: "updatedAt",
43
+ code: "updatedAt",
44
+ columnName: "updated_at",
45
+ type: "datetime",
46
+ required: true,
47
+ },
48
+ ],
49
+ } as RpdDataModel;
@@ -1,42 +1,42 @@
1
- import { RpdDataModel } from "~/types";
2
-
3
- export default {
4
- maintainedBy: "sequencePlugin",
5
- namespace: "svc",
6
- name: "sequence_rule",
7
- singularCode: "sequence_rule",
8
- pluralCode: "sequence_rules",
9
- schema: "public",
10
- tableName: "sequence_rules",
11
- properties: [
12
- {
13
- name: "id",
14
- code: "id",
15
- columnName: "id",
16
- type: "integer",
17
- required: true,
18
- autoIncrement: true,
19
- },
20
- {
21
- name: "code",
22
- code: "code",
23
- columnName: "code",
24
- type: "text",
25
- required: true,
26
- },
27
- {
28
- name: "description",
29
- code: "description",
30
- columnName: "description",
31
- type: "text",
32
- required: false,
33
- },
34
- {
35
- name: "config",
36
- code: "config",
37
- columnName: "config",
38
- type: "json",
39
- required: false,
40
- },
41
- ],
42
- } as RpdDataModel;
1
+ import { RpdDataModel } from "~/types";
2
+
3
+ export default {
4
+ maintainedBy: "sequencePlugin",
5
+ namespace: "svc",
6
+ name: "sequence_rule",
7
+ singularCode: "sequence_rule",
8
+ pluralCode: "sequence_rules",
9
+ schema: "public",
10
+ tableName: "sequence_rules",
11
+ properties: [
12
+ {
13
+ name: "id",
14
+ code: "id",
15
+ columnName: "id",
16
+ type: "integer",
17
+ required: true,
18
+ autoIncrement: true,
19
+ },
20
+ {
21
+ name: "code",
22
+ code: "code",
23
+ columnName: "code",
24
+ type: "text",
25
+ required: true,
26
+ },
27
+ {
28
+ name: "description",
29
+ code: "description",
30
+ columnName: "description",
31
+ type: "text",
32
+ required: false,
33
+ },
34
+ {
35
+ name: "config",
36
+ code: "config",
37
+ columnName: "config",
38
+ type: "json",
39
+ required: false,
40
+ },
41
+ ],
42
+ } as RpdDataModel;