@solidxai/core 0.1.10-beta.24 → 0.1.10-beta.26

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 (230) hide show
  1. package/dist/controllers/action-metadata.controller.d.ts +1 -20
  2. package/dist/controllers/action-metadata.controller.d.ts.map +1 -1
  3. package/dist/controllers/agent-event.controller.d.ts +1 -20
  4. package/dist/controllers/agent-event.controller.d.ts.map +1 -1
  5. package/dist/controllers/agent-session.controller.d.ts +1 -20
  6. package/dist/controllers/agent-session.controller.d.ts.map +1 -1
  7. package/dist/controllers/ai-interaction.controller.d.ts +1 -20
  8. package/dist/controllers/ai-interaction.controller.d.ts.map +1 -1
  9. package/dist/controllers/chatter-message-details.controller.d.ts +1 -20
  10. package/dist/controllers/chatter-message-details.controller.d.ts.map +1 -1
  11. package/dist/controllers/chatter-message.controller.d.ts +1 -20
  12. package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
  13. package/dist/controllers/dashboard-user-layout.controller.d.ts +1 -20
  14. package/dist/controllers/dashboard-user-layout.controller.d.ts.map +1 -1
  15. package/dist/controllers/email-template.controller.d.ts +1 -20
  16. package/dist/controllers/email-template.controller.d.ts.map +1 -1
  17. package/dist/controllers/export-template.controller.d.ts +1 -20
  18. package/dist/controllers/export-template.controller.d.ts.map +1 -1
  19. package/dist/controllers/export-transaction.controller.d.ts +1 -20
  20. package/dist/controllers/export-transaction.controller.d.ts.map +1 -1
  21. package/dist/controllers/import-transaction-error-log.controller.d.ts +1 -20
  22. package/dist/controllers/import-transaction-error-log.controller.d.ts.map +1 -1
  23. package/dist/controllers/import-transaction.controller.d.ts +1 -20
  24. package/dist/controllers/import-transaction.controller.d.ts.map +1 -1
  25. package/dist/controllers/list-of-values.controller.d.ts +1 -20
  26. package/dist/controllers/list-of-values.controller.d.ts.map +1 -1
  27. package/dist/controllers/locale.controller.d.ts +1 -20
  28. package/dist/controllers/locale.controller.d.ts.map +1 -1
  29. package/dist/controllers/mcp-audit-log.controller.d.ts +1 -20
  30. package/dist/controllers/mcp-audit-log.controller.d.ts.map +1 -1
  31. package/dist/controllers/media.controller.d.ts +1 -20
  32. package/dist/controllers/media.controller.d.ts.map +1 -1
  33. package/dist/controllers/menu-item-metadata.controller.d.ts +1 -20
  34. package/dist/controllers/menu-item-metadata.controller.d.ts.map +1 -1
  35. package/dist/controllers/model-metadata.controller.d.ts +10 -30
  36. package/dist/controllers/model-metadata.controller.d.ts.map +1 -1
  37. package/dist/controllers/model-metadata.controller.js +2 -2
  38. package/dist/controllers/model-sequence.controller.d.ts +1 -20
  39. package/dist/controllers/model-sequence.controller.d.ts.map +1 -1
  40. package/dist/controllers/module-metadata-explorer.controller.d.ts +171 -0
  41. package/dist/controllers/module-metadata-explorer.controller.d.ts.map +1 -0
  42. package/dist/controllers/module-metadata-explorer.controller.js +143 -0
  43. package/dist/controllers/module-metadata-explorer.controller.js.map +1 -0
  44. package/dist/controllers/module-metadata.controller.d.ts +5 -0
  45. package/dist/controllers/module-metadata.controller.d.ts.map +1 -1
  46. package/dist/controllers/module-metadata.controller.js +12 -0
  47. package/dist/controllers/module-metadata.controller.js.map +1 -1
  48. package/dist/controllers/module-package.controller.d.ts +622 -0
  49. package/dist/controllers/module-package.controller.d.ts.map +1 -0
  50. package/dist/controllers/module-package.controller.js +150 -0
  51. package/dist/controllers/module-package.controller.js.map +1 -0
  52. package/dist/controllers/mq-message-queue.controller.d.ts +1 -20
  53. package/dist/controllers/mq-message-queue.controller.d.ts.map +1 -1
  54. package/dist/controllers/mq-message.controller.d.ts +1 -20
  55. package/dist/controllers/mq-message.controller.d.ts.map +1 -1
  56. package/dist/controllers/permission-metadata.controller.d.ts +1 -20
  57. package/dist/controllers/permission-metadata.controller.d.ts.map +1 -1
  58. package/dist/controllers/role-metadata.controller.d.ts +1 -20
  59. package/dist/controllers/role-metadata.controller.d.ts.map +1 -1
  60. package/dist/controllers/saved-filters.controller.d.ts +1 -20
  61. package/dist/controllers/saved-filters.controller.d.ts.map +1 -1
  62. package/dist/controllers/scheduled-job.controller.d.ts +1 -20
  63. package/dist/controllers/scheduled-job.controller.d.ts.map +1 -1
  64. package/dist/controllers/security-rule.controller.d.ts +1 -20
  65. package/dist/controllers/security-rule.controller.d.ts.map +1 -1
  66. package/dist/controllers/sms-template.controller.d.ts +1 -20
  67. package/dist/controllers/sms-template.controller.d.ts.map +1 -1
  68. package/dist/controllers/user-activity-history.controller.d.ts +1 -20
  69. package/dist/controllers/user-activity-history.controller.d.ts.map +1 -1
  70. package/dist/controllers/user-view-metadata.controller.d.ts +1 -20
  71. package/dist/controllers/user-view-metadata.controller.d.ts.map +1 -1
  72. package/dist/controllers/user.controller.d.ts +1 -20
  73. package/dist/controllers/user.controller.d.ts.map +1 -1
  74. package/dist/controllers/view-metadata.controller.d.ts +1 -20
  75. package/dist/controllers/view-metadata.controller.d.ts.map +1 -1
  76. package/dist/dtos/confirm-module-package-import.dto.d.ts +4 -0
  77. package/dist/dtos/confirm-module-package-import.dto.d.ts.map +1 -0
  78. package/dist/dtos/confirm-module-package-import.dto.js +34 -0
  79. package/dist/dtos/confirm-module-package-import.dto.js.map +1 -0
  80. package/dist/dtos/metadata-explorer-references-query.dto.d.ts +10 -0
  81. package/dist/dtos/metadata-explorer-references-query.dto.d.ts.map +1 -0
  82. package/dist/dtos/metadata-explorer-references-query.dto.js +69 -0
  83. package/dist/dtos/metadata-explorer-references-query.dto.js.map +1 -0
  84. package/dist/dtos/metadata-explorer-search-query.dto.d.ts +8 -0
  85. package/dist/dtos/metadata-explorer-search-query.dto.d.ts.map +1 -0
  86. package/dist/dtos/metadata-explorer-search-query.dto.js +55 -0
  87. package/dist/dtos/metadata-explorer-search-query.dto.js.map +1 -0
  88. package/dist/dtos/metadata-explorer-write.dto.d.ts +4 -0
  89. package/dist/dtos/metadata-explorer-write.dto.d.ts.map +1 -0
  90. package/dist/dtos/metadata-explorer-write.dto.js +30 -0
  91. package/dist/dtos/metadata-explorer-write.dto.js.map +1 -0
  92. package/dist/dtos/run-module-package-build.dto.d.ts +5 -0
  93. package/dist/dtos/run-module-package-build.dto.d.ts.map +1 -0
  94. package/dist/dtos/run-module-package-build.dto.js +38 -0
  95. package/dist/dtos/run-module-package-build.dto.js.map +1 -0
  96. package/dist/dtos/run-module-package-seed.dto.d.ts +4 -0
  97. package/dist/dtos/run-module-package-seed.dto.d.ts.map +1 -0
  98. package/dist/dtos/run-module-package-seed.dto.js +34 -0
  99. package/dist/dtos/run-module-package-seed.dto.js.map +1 -0
  100. package/dist/helpers/command.service.js +1 -1
  101. package/dist/helpers/command.service.js.map +1 -1
  102. package/dist/helpers/module-metadata-helper.service.d.ts +2 -0
  103. package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
  104. package/dist/helpers/module-metadata-helper.service.js +14 -12
  105. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  106. package/dist/helpers/module.helper.d.ts.map +1 -1
  107. package/dist/helpers/module.helper.js +11 -6
  108. package/dist/helpers/module.helper.js.map +1 -1
  109. package/dist/helpers/typeorm-migration-helpers.d.ts +12 -0
  110. package/dist/helpers/typeorm-migration-helpers.d.ts.map +1 -0
  111. package/dist/helpers/typeorm-migration-helpers.js +119 -0
  112. package/dist/helpers/typeorm-migration-helpers.js.map +1 -0
  113. package/dist/index.d.ts +8 -0
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.js +8 -0
  116. package/dist/index.js.map +1 -1
  117. package/dist/seeders/module-metadata-seeder.service.d.ts +1 -0
  118. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  119. package/dist/seeders/module-metadata-seeder.service.js +57 -38
  120. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  121. package/dist/seeders/module-test-data.service.js +1 -1
  122. package/dist/seeders/module-test-data.service.js.map +1 -1
  123. package/dist/seeders/seed-data/solid-core-metadata.json +2364 -1106
  124. package/dist/services/crud-helper.service.d.ts +18 -0
  125. package/dist/services/crud-helper.service.d.ts.map +1 -1
  126. package/dist/services/crud-helper.service.js +67 -1
  127. package/dist/services/crud-helper.service.js.map +1 -1
  128. package/dist/services/crud.service.d.ts +1 -21
  129. package/dist/services/crud.service.d.ts.map +1 -1
  130. package/dist/services/crud.service.js +23 -87
  131. package/dist/services/crud.service.js.map +1 -1
  132. package/dist/services/genai/ingest-metadata.service.js +2 -2
  133. package/dist/services/genai/ingest-metadata.service.js.map +1 -1
  134. package/dist/services/media.service.d.ts +1 -20
  135. package/dist/services/media.service.d.ts.map +1 -1
  136. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
  137. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +31 -2
  138. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  139. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  140. package/dist/services/mediaStorageProviders/file-storage-provider.js +5 -1
  141. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  142. package/dist/services/model-metadata.service.d.ts +15 -30
  143. package/dist/services/model-metadata.service.d.ts.map +1 -1
  144. package/dist/services/model-metadata.service.js +249 -29
  145. package/dist/services/model-metadata.service.js.map +1 -1
  146. package/dist/services/module-metadata-explorer.service.d.ts +161 -0
  147. package/dist/services/module-metadata-explorer.service.d.ts.map +1 -0
  148. package/dist/services/module-metadata-explorer.service.js +485 -0
  149. package/dist/services/module-metadata-explorer.service.js.map +1 -0
  150. package/dist/services/module-metadata.service.d.ts +7 -0
  151. package/dist/services/module-metadata.service.d.ts.map +1 -1
  152. package/dist/services/module-metadata.service.js +121 -2
  153. package/dist/services/module-metadata.service.js.map +1 -1
  154. package/dist/services/module-package.service.d.ts +266 -0
  155. package/dist/services/module-package.service.d.ts.map +1 -0
  156. package/dist/services/module-package.service.js +980 -0
  157. package/dist/services/module-package.service.js.map +1 -0
  158. package/dist/services/settings/default-settings-provider.service.d.ts +18 -0
  159. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  160. package/dist/services/settings/default-settings-provider.service.js +10 -0
  161. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  162. package/dist/solid-core.module.d.ts.map +1 -1
  163. package/dist/solid-core.module.js +10 -2
  164. package/dist/solid-core.module.js.map +1 -1
  165. package/dist-tests/api/authenticate.spec.js +119 -0
  166. package/dist-tests/api/authenticate.spec.js.map +1 -0
  167. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +97 -0
  168. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +1 -0
  169. package/dist-tests/api/ping.spec.js +21 -0
  170. package/dist-tests/api/ping.spec.js.map +1 -0
  171. package/dist-tests/helpers/auth.js +41 -0
  172. package/dist-tests/helpers/auth.js.map +1 -0
  173. package/dist-tests/helpers/env.js +11 -0
  174. package/dist-tests/helpers/env.js.map +1 -0
  175. package/docs/dashboards/AGENTIC_DASHBOARD_IMPLEMENTATION_PLAN.md +438 -0
  176. package/docs/dashboards/dashboard-curl-smoke-tests.txt +146 -0
  177. package/docs/dashboards/delete-legacy-dashboard-metadata.sql +172 -0
  178. package/docs/grouping-enhancements.md +89 -0
  179. package/docs/java-spring/README.md +3 -0
  180. package/docs/java-spring/solid-core-module-deep-dive-report.md +1317 -0
  181. package/docs/module-package-import-handoff.md +691 -0
  182. package/docs/seed-changes.md +65 -0
  183. package/docs/test-data-workflow.md +200 -0
  184. package/docs/type-declaration-import-issue.md +24 -0
  185. package/package.json +2 -1
  186. package/src/controllers/module-metadata-explorer.controller.ts +83 -0
  187. package/src/controllers/module-metadata.controller.ts +6 -0
  188. package/src/controllers/module-package.controller.ts +102 -0
  189. package/src/dtos/confirm-module-package-import.dto.ts +12 -0
  190. package/src/dtos/metadata-explorer-references-query.dto.ts +39 -0
  191. package/src/dtos/metadata-explorer-search-query.dto.ts +28 -0
  192. package/src/dtos/metadata-explorer-write.dto.ts +11 -0
  193. package/src/dtos/run-module-package-build.dto.ts +14 -0
  194. package/src/dtos/run-module-package-seed.dto.ts +12 -0
  195. package/src/helpers/command.service.ts +1 -1
  196. package/src/helpers/module-metadata-helper.service.ts +19 -21
  197. package/src/helpers/module.helper.ts +12 -9
  198. package/src/helpers/typeorm-migration-helpers.ts +163 -0
  199. package/src/index.ts +8 -0
  200. package/src/seeders/module-metadata-seeder.service.ts +63 -38
  201. package/src/seeders/module-test-data.service.ts +1 -1
  202. package/src/seeders/seed-data/solid-core-metadata.json +2365 -1107
  203. package/src/services/crud-helper.service.ts +79 -1
  204. package/src/services/crud.service.ts +26 -119
  205. package/src/services/dashboard-providers/README.md +1 -1
  206. package/src/services/genai/ingest-metadata.service.ts +3 -3
  207. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +37 -2
  208. package/src/services/mediaStorageProviders/file-storage-provider.ts +5 -1
  209. package/src/services/model-metadata.service.ts +302 -98
  210. package/src/services/module-metadata-explorer.service.ts +670 -0
  211. package/src/services/module-metadata.service.ts +136 -10
  212. package/src/services/module-package.service.ts +1171 -0
  213. package/src/services/settings/default-settings-provider.service.ts +10 -0
  214. package/src/solid-core.module.ts +10 -2
  215. package/.claude/settings.local.json +0 -15
  216. package/CLAUDE.md +0 -26
  217. package/dist/services/database/database-bootstrap.service.d.ts +0 -12
  218. package/dist/services/database/database-bootstrap.service.d.ts.map +0 -1
  219. package/dist/services/database/database-bootstrap.service.js +0 -115
  220. package/dist/services/database/database-bootstrap.service.js.map +0 -1
  221. package/sql/default/mariadb/proc_CleanupModelMetadata.sql +0 -153
  222. package/sql/default/mariadb/proc_CleanupModuleMetadata.sql +0 -56
  223. package/sql/default/mssql/proc_CleanupModuleMetadata.sql +0 -78
  224. package/sql/default/mysql/proc_CleanupModelMetadata.sql +0 -153
  225. package/sql/default/mysql/proc_CleanupModuleMetadata.sql +0 -56
  226. package/sql/default/postgres/proc_CleanupModelMetadata.sql +0 -148
  227. package/sql/default/postgres/proc_CleanupModuleMetadata.sql +0 -50
  228. package/sql/default/postgres/scratchpad.sql.txt +0 -12
  229. package/src/services/1.js +0 -6
  230. package/src/services/database/database-bootstrap.service.ts +0 -91
@@ -2,8 +2,10 @@ import { BadRequestException, forwardRef, Inject, Injectable, Logger, NotFoundEx
2
2
  import { InjectDataSource } from '@nestjs/typeorm';
3
3
  import { DEFAULT_MEDIA_FILE_STORAGE_DIR } from "src/services/settings/default-settings-provider.service";
4
4
  import type { SolidCoreSetting } from "src/services/settings/default-settings-provider.service";
5
- import { DataSource, EntityManager, SelectQueryBuilder } from 'typeorm';
5
+ import { DataSource, EntityManager, In, SelectQueryBuilder } from 'typeorm';
6
+ import { ActionMetadata } from '../entities/action-metadata.entity';
6
7
  import { CreateModuleMetadataDto } from '../dtos/create-module-metadata.dto';
8
+ import { MenuItemMetadata } from '../entities/menu-item-metadata.entity';
7
9
  import { ModuleMetadata } from '../entities/module-metadata.entity';
8
10
 
9
11
  import { classify } from '../helpers/string.helper';
@@ -196,9 +198,8 @@ export class ModuleMetadataService {
196
198
  // Convert the object to JSON string
197
199
  const metadataJson = JSON.stringify(moduleMetaDataJson, null, 2);
198
200
 
199
- // Create the folder path inside 'module-metadata'
200
- const folderPath = path.resolve(process.cwd(), 'module-metadata', module.name);
201
201
  const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(module.name);
202
+ const folderPath = path.dirname(filePath);
202
203
 
203
204
  // Ensure the folder exists
204
205
  await fs.mkdir(folderPath, { recursive: true });
@@ -355,9 +356,11 @@ export class ModuleMetadataService {
355
356
  this.logger.log(`Cleaning up for module: ${moduleEntity.name}.`);
356
357
 
357
358
  const modulePath = await this.moduleMetadataHelperService.getModulePath(moduleEntity.name);
359
+ const solidUiModulePath = await this.moduleMetadataHelperService.getSolidUiModulePath(moduleEntity.name);
358
360
  if (modulePath) {
359
361
 
360
362
  this.logger.log(`Module path: ${modulePath}`);
363
+ this.logger.log(`Solid UI module path: ${solidUiModulePath}`);
361
364
 
362
365
  // Metadata file to be deleted
363
366
  const moduleMetadataPAth = await this.moduleMetadataHelperService.getModuleMetadataFolderPath(moduleEntity.name)
@@ -365,6 +368,10 @@ export class ModuleMetadataService {
365
368
 
366
369
  try {
367
370
  await fs.rm(modulePath, { recursive: true, force: true });
371
+ if (solidUiModulePath) {
372
+ await fs.rm(solidUiModulePath, { recursive: true, force: true });
373
+ this.logger.log(`Deleted solid-ui module path: ${solidUiModulePath}`);
374
+ }
368
375
  await fs.rm(moduleMetadataPAth, { recursive: true, force: true });
369
376
  this.logger.log(`Deleted file: ${moduleMetadataPAth}`);
370
377
  } catch (error: any) {
@@ -372,10 +379,101 @@ export class ModuleMetadataService {
372
379
  throw new Error(ERROR_MESSAGES.FILE_DELETE_FAILED); // Trigger rollback
373
380
  }
374
381
  }
375
- await this.dataSource.query(
376
- `CALL cleanup_module_metadata($1, $2)`,
377
- [moduleEntity.name, true],
378
- );
382
+ await this.cleanupAssociatedMenusAndActions(moduleEntity.id);
383
+ }
384
+
385
+ private async cleanupAssociatedMenusAndActions(moduleId: number) {
386
+ const actionRepo = this.dataSource.getRepository(ActionMetadata);
387
+ const menuRepo = this.dataSource.getRepository(MenuItemMetadata);
388
+
389
+ const actions = await actionRepo.find({
390
+ where: {
391
+ module: { id: moduleId },
392
+ },
393
+ });
394
+ const actionIds = actions.map((action) => action.id);
395
+
396
+ const menus = await this.findMenusForModuleCleanup(moduleId, actionIds);
397
+ if (menus.length > 0) {
398
+ const menuIds = menus.map((menu) => menu.id).filter(Boolean);
399
+ for (const menu of menus) {
400
+ if (menu.roles?.length) {
401
+ await this.dataSource
402
+ .createQueryBuilder()
403
+ .relation(MenuItemMetadata, 'roles')
404
+ .of(menu.id)
405
+ .remove(menu.roles.map((role) => role.id));
406
+ }
407
+ }
408
+
409
+ if (menuIds.length > 0) {
410
+ await menuRepo
411
+ .createQueryBuilder()
412
+ .update(MenuItemMetadata)
413
+ .set({ parentMenuItem: null as any })
414
+ .where('id IN (:...menuIds)', { menuIds })
415
+ .execute();
416
+
417
+ await menuRepo
418
+ .createQueryBuilder()
419
+ .delete()
420
+ .from(MenuItemMetadata)
421
+ .where('id IN (:...menuIds)', { menuIds })
422
+ .execute();
423
+ }
424
+
425
+ this.logger.log(`Deleted ${menus.length} menu metadata record(s) for module id ${moduleId}`);
426
+ }
427
+
428
+ if (actions.length > 0) {
429
+ await actionRepo.remove(actions);
430
+ this.logger.log(`Deleted ${actions.length} action metadata record(s) for module id ${moduleId}`);
431
+ }
432
+ }
433
+
434
+ private async findMenusForModuleCleanup(moduleId: number, actionIds: number[]) {
435
+ const menuRepo = this.dataSource.getRepository(MenuItemMetadata);
436
+ const menusById = new Map<number, MenuItemMetadata>();
437
+
438
+ const rootMenus = await menuRepo.find({
439
+ where: [
440
+ {
441
+ module: { id: moduleId },
442
+ },
443
+ ...(actionIds.length > 0
444
+ ? [
445
+ {
446
+ action: { id: In(actionIds) },
447
+ },
448
+ ]
449
+ : []),
450
+ ],
451
+ relations: ['roles', 'action', 'parentMenuItem'],
452
+ });
453
+
454
+ rootMenus.forEach((menu) => menusById.set(menu.id, menu));
455
+
456
+ let parentIds = rootMenus.map((menu) => menu.id);
457
+ while (parentIds.length > 0) {
458
+ const childMenus = await menuRepo.find({
459
+ where: {
460
+ parentMenuItem: { id: In(parentIds) },
461
+ },
462
+ relations: ['roles', 'action', 'parentMenuItem'],
463
+ });
464
+
465
+ const nextParentIds: number[] = [];
466
+ for (const childMenu of childMenus) {
467
+ if (!menusById.has(childMenu.id)) {
468
+ menusById.set(childMenu.id, childMenu);
469
+ nextParentIds.push(childMenu.id);
470
+ }
471
+ }
472
+
473
+ parentIds = nextParentIds;
474
+ }
475
+
476
+ return Array.from(menusById.values());
379
477
  }
380
478
 
381
479
  async deleteMany(ids: number[]): Promise<any> {
@@ -391,9 +489,12 @@ export class ModuleMetadataService {
391
489
  id: id,
392
490
  }
393
491
  });
394
- // if (!entity) {
395
- // throw new Error(`Entity with id ${id} not found`);
396
- // }
492
+ if (!entity) {
493
+ this.logger.warn(`Module metadata with id ${id} not found. Skipping deleteMany cleanup for this id.`);
494
+ continue;
495
+ }
496
+
497
+ await this.cleanupOnDelete(entity.id);
397
498
  removedEntities.push(await this.moduleMetadataRepo.remove(entity));
398
499
  }
399
500
 
@@ -405,6 +506,31 @@ export class ModuleMetadataService {
405
506
  return true
406
507
  }
407
508
 
509
+ @DisallowInProduction()
510
+ async seedModuleFromMetadata(moduleId: number) {
511
+ const module = await this.findOne(moduleId);
512
+ const seeder = this.solidRegistry
513
+ .getSeeders()
514
+ .filter((registeredSeeder) => registeredSeeder.name === 'ModuleMetadataSeederService')
515
+ .map((registeredSeeder) => registeredSeeder.instance)
516
+ .pop();
517
+
518
+ if (!seeder || typeof seeder.seed !== 'function') {
519
+ throw new NotFoundException('ModuleMetadataSeederService not found. Cannot seed module metadata.');
520
+ }
521
+
522
+ await seeder.seed({
523
+ modulesToSeed: [module.name],
524
+ seedGlobalMetadata: false,
525
+ });
526
+
527
+ return {
528
+ success: true,
529
+ moduleName: module.name,
530
+ message: `Seeded metadata for module ${module.name}.`,
531
+ };
532
+ }
533
+
408
534
  @DisallowInProduction()
409
535
  async generateCodeViaCtl(moduleId: number): Promise<string> {
410
536
  const module = await this.findOne(moduleId);