@open-mercato/core 0.6.7-develop.6726.1.983ae8a07e → 0.6.7-develop.6749.1.6b54c56dfe

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 (191) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/generated/entities/resources_resource/index.js +2 -0
  3. package/dist/generated/entities/resources_resource/index.js.map +2 -2
  4. package/dist/generated/entity-fields-registry.js +1 -0
  5. package/dist/generated/entity-fields-registry.js.map +2 -2
  6. package/dist/helpers/integration/salesFixtures.js +31 -2
  7. package/dist/helpers/integration/salesFixtures.js.map +2 -2
  8. package/dist/helpers/integration/salesUi.js +5 -0
  9. package/dist/helpers/integration/salesUi.js.map +2 -2
  10. package/dist/modules/auth/api/profile/route.js +8 -2
  11. package/dist/modules/auth/api/profile/route.js.map +2 -2
  12. package/dist/modules/auth/backend/auth/profile/page.js.map +2 -2
  13. package/dist/modules/auth/backend/profile/change-password/page.js.map +2 -2
  14. package/dist/modules/communication_channels/data/enrichers.js +4 -4
  15. package/dist/modules/communication_channels/data/enrichers.js.map +2 -2
  16. package/dist/modules/customers/analytics.js +1 -0
  17. package/dist/modules/customers/analytics.js.map +2 -2
  18. package/dist/modules/customers/components/detail/DealForm.js +2 -1
  19. package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
  20. package/dist/modules/customers/components/detail/DealsSection.js +1 -1
  21. package/dist/modules/customers/components/detail/DealsSection.js.map +2 -2
  22. package/dist/modules/customers/data/validators.js +3 -1
  23. package/dist/modules/customers/data/validators.js.map +2 -2
  24. package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/config.js +52 -2
  25. package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/config.js.map +2 -2
  26. package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.client.js +42 -26
  27. package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.client.js.map +2 -2
  28. package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js +2 -2
  29. package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js.map +2 -2
  30. package/dist/modules/data_sync/lib/queue-policy.js +15 -0
  31. package/dist/modules/data_sync/lib/queue-policy.js.map +7 -0
  32. package/dist/modules/data_sync/lib/queue.js +16 -1
  33. package/dist/modules/data_sync/lib/queue.js.map +2 -2
  34. package/dist/modules/data_sync/lib/start-run.js +2 -1
  35. package/dist/modules/data_sync/lib/start-run.js.map +2 -2
  36. package/dist/modules/data_sync/lib/sync-engine.js +35 -2
  37. package/dist/modules/data_sync/lib/sync-engine.js.map +2 -2
  38. package/dist/modules/data_sync/lib/sync-run-service.js +70 -2
  39. package/dist/modules/data_sync/lib/sync-run-service.js.map +2 -2
  40. package/dist/modules/data_sync/workers/sync-export.js +9 -2
  41. package/dist/modules/data_sync/workers/sync-export.js.map +2 -2
  42. package/dist/modules/data_sync/workers/sync-import.js +9 -2
  43. package/dist/modules/data_sync/workers/sync-import.js.map +2 -2
  44. package/dist/modules/dictionaries/api/[dictionaryId]/entries/route.js +34 -12
  45. package/dist/modules/dictionaries/api/[dictionaryId]/entries/route.js.map +2 -2
  46. package/dist/modules/dictionaries/api/openapi.js +15 -2
  47. package/dist/modules/dictionaries/api/openapi.js.map +2 -2
  48. package/dist/modules/dictionaries/components/hooks/useDictionaryEntries.js +30 -29
  49. package/dist/modules/dictionaries/components/hooks/useDictionaryEntries.js.map +2 -2
  50. package/dist/modules/dictionaries/data/validators.js +7 -0
  51. package/dist/modules/dictionaries/data/validators.js.map +2 -2
  52. package/dist/modules/dictionaries/lib/clientEntries.js +4 -3
  53. package/dist/modules/dictionaries/lib/clientEntries.js.map +2 -2
  54. package/dist/modules/dictionaries/lib/fetchAllEntries.js +43 -0
  55. package/dist/modules/dictionaries/lib/fetchAllEntries.js.map +7 -0
  56. package/dist/modules/entities/api/definitions.js +51 -3
  57. package/dist/modules/entities/api/definitions.js.map +2 -2
  58. package/dist/modules/entities/api/entities.js +21 -2
  59. package/dist/modules/entities/api/entities.js.map +2 -2
  60. package/dist/modules/entities/api/records.js +3 -24
  61. package/dist/modules/entities/api/records.js.map +2 -2
  62. package/dist/modules/entities/api/sidebar-entities.js +34 -12
  63. package/dist/modules/entities/api/sidebar-entities.js.map +2 -2
  64. package/dist/modules/entities/lib/entityAcl.js +46 -0
  65. package/dist/modules/entities/lib/entityAcl.js.map +2 -2
  66. package/dist/modules/messages/api/route.js +2 -5
  67. package/dist/modules/messages/api/route.js.map +2 -2
  68. package/dist/modules/messages/lib/participantScope.js +15 -0
  69. package/dist/modules/messages/lib/participantScope.js.map +7 -0
  70. package/dist/modules/notifications/api/route.js +3 -1
  71. package/dist/modules/notifications/api/route.js.map +2 -2
  72. package/dist/modules/notifications/api/unread-count/route.js +25 -6
  73. package/dist/modules/notifications/api/unread-count/route.js.map +2 -2
  74. package/dist/modules/notifications/lib/notificationScope.js +26 -0
  75. package/dist/modules/notifications/lib/notificationScope.js.map +7 -0
  76. package/dist/modules/notifications/lib/notificationService.js +7 -3
  77. package/dist/modules/notifications/lib/notificationService.js.map +2 -2
  78. package/dist/modules/notifications/lib/routeHelpers.js +16 -2
  79. package/dist/modules/notifications/lib/routeHelpers.js.map +2 -2
  80. package/dist/modules/planner/components/unavailabilityReasons.js +3 -3
  81. package/dist/modules/planner/components/unavailabilityReasons.js.map +2 -2
  82. package/dist/modules/progress/lib/progressService.js +2 -0
  83. package/dist/modules/progress/lib/progressService.js.map +2 -2
  84. package/dist/modules/progress/lib/progressServiceImpl.js +322 -104
  85. package/dist/modules/progress/lib/progressServiceImpl.js.map +2 -2
  86. package/dist/modules/resources/api/resources.js +2 -0
  87. package/dist/modules/resources/api/resources.js.map +2 -2
  88. package/dist/modules/resources/backend/resources/resources/[id]/page.js +3 -2
  89. package/dist/modules/resources/backend/resources/resources/[id]/page.js.map +2 -2
  90. package/dist/modules/resources/commands/resources.js +9 -0
  91. package/dist/modules/resources/commands/resources.js.map +2 -2
  92. package/dist/modules/resources/components/detail/dictionaries.js +3 -3
  93. package/dist/modules/resources/components/detail/dictionaries.js.map +2 -2
  94. package/dist/modules/resources/data/entities.js +3 -0
  95. package/dist/modules/resources/data/entities.js.map +2 -2
  96. package/dist/modules/resources/data/validators.js +6 -2
  97. package/dist/modules/resources/data/validators.js.map +2 -2
  98. package/dist/modules/resources/lib/seeds.js +16 -9
  99. package/dist/modules/resources/lib/seeds.js.map +2 -2
  100. package/dist/modules/resources/migrations/Migration20260608231000.js +13 -0
  101. package/dist/modules/resources/migrations/Migration20260608231000.js.map +7 -0
  102. package/dist/modules/sales/backend/sales/documents/create/page.js +11 -14
  103. package/dist/modules/sales/backend/sales/documents/create/page.js.map +2 -2
  104. package/dist/modules/sales/commands/documents.js +8 -0
  105. package/dist/modules/sales/commands/documents.js.map +2 -2
  106. package/dist/modules/sales/components/documents/ItemsSection.js +18 -9
  107. package/dist/modules/sales/components/documents/ItemsSection.js.map +2 -2
  108. package/dist/modules/sales/components/documents/LineItemDialog.js +12 -5
  109. package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
  110. package/dist/modules/sales/components/documents/SalesDocumentForm.js +48 -2
  111. package/dist/modules/sales/components/documents/SalesDocumentForm.js.map +2 -2
  112. package/dist/modules/sales/components/documents/SalesOrderDraftLines.js +167 -0
  113. package/dist/modules/sales/components/documents/SalesOrderDraftLines.js.map +7 -0
  114. package/dist/modules/sales/data/validators.js +5 -1
  115. package/dist/modules/sales/data/validators.js.map +2 -2
  116. package/dist/modules/staff/components/detail/dictionaries.js +3 -3
  117. package/dist/modules/staff/components/detail/dictionaries.js.map +2 -2
  118. package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js +11 -4
  119. package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js.map +2 -2
  120. package/generated/entities/resources_resource/index.ts +1 -0
  121. package/generated/entity-fields-registry.ts +1 -0
  122. package/package.json +7 -7
  123. package/src/helpers/integration/salesFixtures.ts +34 -2
  124. package/src/helpers/integration/salesUi.ts +8 -0
  125. package/src/modules/auth/api/profile/route.ts +8 -2
  126. package/src/modules/auth/backend/auth/profile/page.tsx +1 -0
  127. package/src/modules/auth/backend/profile/change-password/page.tsx +1 -0
  128. package/src/modules/communication_channels/data/enrichers.ts +6 -26
  129. package/src/modules/customers/analytics.ts +1 -0
  130. package/src/modules/customers/components/detail/DealForm.tsx +5 -1
  131. package/src/modules/customers/components/detail/DealsSection.tsx +1 -1
  132. package/src/modules/customers/data/validators.ts +5 -1
  133. package/src/modules/dashboards/i18n/de.json +3 -0
  134. package/src/modules/dashboards/i18n/en.json +3 -0
  135. package/src/modules/dashboards/i18n/es.json +3 -0
  136. package/src/modules/dashboards/i18n/pl.json +3 -0
  137. package/src/modules/dashboards/widgets/dashboard/pipeline-summary/config.ts +86 -0
  138. package/src/modules/dashboards/widgets/dashboard/pipeline-summary/widget.client.tsx +33 -18
  139. package/src/modules/dashboards/widgets/dashboard/pipeline-summary/widget.ts +2 -2
  140. package/src/modules/data_sync/lib/adapter.ts +18 -0
  141. package/src/modules/data_sync/lib/queue-policy.ts +30 -0
  142. package/src/modules/data_sync/lib/queue.ts +19 -1
  143. package/src/modules/data_sync/lib/start-run.ts +2 -1
  144. package/src/modules/data_sync/lib/sync-engine.ts +46 -0
  145. package/src/modules/data_sync/lib/sync-run-service.ts +82 -1
  146. package/src/modules/data_sync/workers/sync-export.ts +8 -1
  147. package/src/modules/data_sync/workers/sync-import.ts +8 -1
  148. package/src/modules/dictionaries/api/[dictionaryId]/entries/route.ts +39 -11
  149. package/src/modules/dictionaries/api/openapi.ts +19 -0
  150. package/src/modules/dictionaries/components/hooks/useDictionaryEntries.ts +35 -36
  151. package/src/modules/dictionaries/data/validators.ts +14 -0
  152. package/src/modules/dictionaries/lib/clientEntries.ts +4 -3
  153. package/src/modules/dictionaries/lib/fetchAllEntries.ts +72 -0
  154. package/src/modules/entities/api/definitions.ts +51 -3
  155. package/src/modules/entities/api/entities.ts +30 -2
  156. package/src/modules/entities/api/records.ts +3 -27
  157. package/src/modules/entities/api/sidebar-entities.ts +43 -14
  158. package/src/modules/entities/lib/entityAcl.ts +58 -0
  159. package/src/modules/messages/api/route.ts +4 -5
  160. package/src/modules/messages/lib/participantScope.ts +64 -0
  161. package/src/modules/notifications/api/route.ts +2 -0
  162. package/src/modules/notifications/api/unread-count/route.ts +42 -5
  163. package/src/modules/notifications/lib/notificationScope.ts +40 -0
  164. package/src/modules/notifications/lib/notificationService.ts +5 -0
  165. package/src/modules/notifications/lib/routeHelpers.ts +19 -2
  166. package/src/modules/planner/components/unavailabilityReasons.ts +3 -3
  167. package/src/modules/progress/AGENTS.md +11 -1
  168. package/src/modules/progress/lib/progressService.ts +1 -0
  169. package/src/modules/progress/lib/progressServiceImpl.ts +385 -117
  170. package/src/modules/resources/api/resources.ts +2 -0
  171. package/src/modules/resources/backend/resources/resources/[id]/page.tsx +9 -3
  172. package/src/modules/resources/commands/resources.ts +10 -0
  173. package/src/modules/resources/components/detail/dictionaries.ts +3 -3
  174. package/src/modules/resources/data/entities.ts +3 -0
  175. package/src/modules/resources/data/validators.ts +5 -0
  176. package/src/modules/resources/lib/seeds.ts +16 -9
  177. package/src/modules/resources/migrations/.snapshot-open-mercato.json +17 -1
  178. package/src/modules/resources/migrations/Migration20260608231000.ts +13 -0
  179. package/src/modules/sales/backend/sales/documents/create/page.tsx +2 -4
  180. package/src/modules/sales/commands/documents.ts +8 -0
  181. package/src/modules/sales/components/documents/ItemsSection.tsx +19 -10
  182. package/src/modules/sales/components/documents/LineItemDialog.tsx +13 -5
  183. package/src/modules/sales/components/documents/SalesDocumentForm.tsx +48 -6
  184. package/src/modules/sales/components/documents/SalesOrderDraftLines.tsx +198 -0
  185. package/src/modules/sales/data/validators.ts +7 -1
  186. package/src/modules/sales/i18n/de.json +2 -0
  187. package/src/modules/sales/i18n/en.json +2 -0
  188. package/src/modules/sales/i18n/es.json +2 -0
  189. package/src/modules/sales/i18n/pl.json +2 -0
  190. package/src/modules/staff/components/detail/dictionaries.ts +3 -3
  191. package/src/modules/workflows/widgets/injection/order-approval/widget.client.tsx +12 -5
@@ -102,6 +102,7 @@ async function loadResourceSnapshot(em, id) {
102
102
  appearanceColor: resource.appearanceColor ?? null,
103
103
  isActive: resource.isActive,
104
104
  availabilityRuleSetId: resource.availabilityRuleSetId ?? null,
105
+ customFieldsetCode: resource.customFieldsetCode ?? null,
105
106
  tags,
106
107
  deletedAt: resource.deletedAt ? resource.deletedAt.toISOString() : null
107
108
  };
@@ -171,6 +172,7 @@ const createResourceCommand = {
171
172
  appearanceColor: parsed.appearanceColor ?? null,
172
173
  isActive: parsed.isActive ?? true,
173
174
  availabilityRuleSetId: parsed.availabilityRuleSetId ?? null,
175
+ customFieldsetCode: parsed.customFieldsetCode ?? null,
174
176
  createdAt: now,
175
177
  updatedAt: now
176
178
  });
@@ -291,6 +293,7 @@ const createResourceCommand = {
291
293
  appearanceColor: after.appearanceColor ?? null,
292
294
  isActive: after.isActive,
293
295
  availabilityRuleSetId: after.availabilityRuleSetId ?? null,
296
+ customFieldsetCode: after.customFieldsetCode ?? null,
294
297
  deletedAt: null,
295
298
  createdAt: /* @__PURE__ */ new Date(),
296
299
  updatedAt: /* @__PURE__ */ new Date()
@@ -309,6 +312,7 @@ const createResourceCommand = {
309
312
  record.appearanceColor = after.appearanceColor ?? null;
310
313
  record.isActive = after.isActive;
311
314
  record.availabilityRuleSetId = after.availabilityRuleSetId ?? null;
315
+ record.customFieldsetCode = after.customFieldsetCode ?? null;
312
316
  record.deletedAt = null;
313
317
  record.updatedAt = /* @__PURE__ */ new Date();
314
318
  }
@@ -397,6 +401,7 @@ const updateResourceCommand = {
397
401
  if (parsed.appearanceIcon !== void 0) record.appearanceIcon = parsed.appearanceIcon ?? null;
398
402
  if (parsed.appearanceColor !== void 0) record.appearanceColor = parsed.appearanceColor ?? null;
399
403
  if (parsed.availabilityRuleSetId !== void 0) record.availabilityRuleSetId = parsed.availabilityRuleSetId ?? null;
404
+ if (parsed.customFieldsetCode !== void 0) record.customFieldsetCode = parsed.customFieldsetCode ?? null;
400
405
  record.updatedAt = /* @__PURE__ */ new Date();
401
406
  if (parsed.isActive !== void 0) record.isActive = parsed.isActive;
402
407
  },
@@ -453,6 +458,7 @@ const updateResourceCommand = {
453
458
  "appearanceColor",
454
459
  "isActive",
455
460
  "availabilityRuleSetId",
461
+ "customFieldsetCode",
456
462
  "deletedAt"
457
463
  ]);
458
464
  if (before.tags.join(",") !== after.tags.join(",")) {
@@ -505,6 +511,7 @@ const updateResourceCommand = {
505
511
  record.appearanceColor = before.appearanceColor ?? null;
506
512
  record.isActive = before.isActive;
507
513
  record.availabilityRuleSetId = before.availabilityRuleSetId ?? null;
514
+ record.customFieldsetCode = before.customFieldsetCode ?? null;
508
515
  record.deletedAt = before.deletedAt ? new Date(before.deletedAt) : null;
509
516
  record.updatedAt = /* @__PURE__ */ new Date();
510
517
  },
@@ -633,6 +640,7 @@ const deleteResourceCommand = {
633
640
  appearanceColor: before.appearanceColor ?? null,
634
641
  isActive: before.isActive,
635
642
  availabilityRuleSetId: before.availabilityRuleSetId ?? null,
643
+ customFieldsetCode: before.customFieldsetCode ?? null,
636
644
  deletedAt: null,
637
645
  createdAt: /* @__PURE__ */ new Date(),
638
646
  updatedAt: /* @__PURE__ */ new Date()
@@ -651,6 +659,7 @@ const deleteResourceCommand = {
651
659
  record.appearanceColor = before.appearanceColor ?? null;
652
660
  record.isActive = before.isActive;
653
661
  record.availabilityRuleSetId = before.availabilityRuleSetId ?? null;
662
+ record.customFieldsetCode = before.customFieldsetCode ?? null;
654
663
  record.deletedAt = null;
655
664
  record.updatedAt = /* @__PURE__ */ new Date();
656
665
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/modules/resources/commands/resources.ts"],
4
- "sourcesContent": ["import type { CommandHandler } from '@open-mercato/shared/lib/commands'\nimport { registerCommand } from '@open-mercato/shared/lib/commands'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport { CrudHttpError } from '@open-mercato/shared/lib/crud/errors'\nimport { findOneWithDecryption } from '@open-mercato/shared/lib/encryption/find'\nimport { buildChanges, emitCrudSideEffects, emitCrudUndoSideEffects, parseWithCustomFields, setCustomFieldsIfAny } from '@open-mercato/shared/lib/commands/helpers'\nimport { withAtomicFlush } from '@open-mercato/shared/lib/commands/flush'\nimport { buildCustomFieldResetMap, diffCustomFieldChanges, loadCustomFieldSnapshot, type CustomFieldSnapshot } from '@open-mercato/shared/lib/commands/customFieldSnapshots'\nimport { resolveRedoSnapshot } from '@open-mercato/shared/lib/commands/redo'\nimport type { DataEngine } from '@open-mercato/shared/lib/data/engine'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\nimport type { CrudIndexerConfig } from '@open-mercato/shared/lib/crud/types'\nimport { Dictionary, DictionaryEntry } from '@open-mercato/core/modules/dictionaries/data/entities'\nimport { ResourcesResource, ResourcesResourceTag, ResourcesResourceTagAssignment } from '../data/entities'\nimport {\n resourcesResourceCreateSchema,\n resourcesResourceUpdateSchema,\n type ResourcesResourceCreateInput,\n type ResourcesResourceUpdateInput,\n} from '../data/validators'\nimport { resourcesResourceCrudEvents } from '../lib/crud'\nimport { ensureOrganizationScope, ensureTenantScope, extractUndoPayload } from './shared'\nimport { RESOURCES_CAPACITY_UNIT_DICTIONARY_KEY } from '../lib/capacityUnits'\nimport { E } from '#generated/entities.ids.generated'\n\nconst resourceCrudIndexer: CrudIndexerConfig<ResourcesResource> = {\n entityType: E.resources.resources_resource,\n}\n\ntype CapacityUnitSnapshot = {\n value: string\n name: string\n color: string | null\n icon: string | null\n}\n\ntype ResourceSnapshot = {\n id: string\n tenantId: string\n organizationId: string\n name: string\n description: string | null\n resourceTypeId: string | null\n capacity: number | null\n capacityUnitValue: string | null\n capacityUnitName: string | null\n capacityUnitColor: string | null\n capacityUnitIcon: string | null\n appearanceIcon: string | null\n appearanceColor: string | null\n isActive: boolean\n availabilityRuleSetId: string | null\n tags: string[]\n deletedAt: string | null\n customFields?: CustomFieldSnapshot | null\n}\n\ntype ResourceUndoPayload = {\n before?: ResourceSnapshot | null\n after?: ResourceSnapshot | null\n customBefore?: CustomFieldSnapshot | null\n customAfter?: CustomFieldSnapshot | null\n}\n\nasync function resolveCapacityUnit(\n em: EntityManager,\n scope: { tenantId: string; organizationId: string },\n rawValue: string,\n): Promise<CapacityUnitSnapshot> {\n const trimmed = rawValue.trim()\n if (!trimmed) {\n throw new CrudHttpError(400, { error: 'Capacity unit is required.' })\n }\n const dictionary = await findOneWithDecryption(\n em,\n Dictionary,\n {\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n key: RESOURCES_CAPACITY_UNIT_DICTIONARY_KEY,\n deletedAt: null,\n isActive: true,\n },\n undefined,\n scope,\n )\n if (!dictionary) {\n throw new CrudHttpError(400, { error: 'Capacity unit dictionary is not configured.' })\n }\n const normalizedValue = trimmed.toLowerCase()\n const entry = await findOneWithDecryption(\n em,\n DictionaryEntry,\n {\n dictionary,\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n normalizedValue,\n },\n { populate: ['dictionary'] },\n scope,\n )\n if (!entry) {\n throw new CrudHttpError(400, { error: 'Capacity unit not found.' })\n }\n return {\n value: entry.value,\n name: entry.label?.trim().length ? entry.label : entry.value,\n color: entry.color ?? null,\n icon: entry.icon ?? null,\n }\n}\n\nfunction normalizeTagIds(tags?: Array<string | null | undefined>): string[] {\n if (!Array.isArray(tags)) return []\n const set = new Set<string>()\n tags.forEach((id) => {\n if (typeof id === 'string' && id.trim().length > 0) set.add(id.trim())\n })\n return Array.from(set)\n}\n\nasync function loadResourceSnapshot(em: EntityManager, id: string): Promise<ResourceSnapshot | null> {\n const resource = await findOneWithDecryption(\n em,\n ResourcesResource,\n { id },\n undefined,\n { tenantId: null, organizationId: null },\n )\n if (!resource) return null\n const assignments = await em.find(\n ResourcesResourceTagAssignment,\n { resource: resource.id },\n { populate: ['tag'] },\n )\n const tags = assignments\n .map((assignment) => (assignment.tag as ResourcesResourceTag | undefined)?.id ?? null)\n .filter((tagId): tagId is string => typeof tagId === 'string' && tagId.length > 0)\n .sort((a, b) => a.localeCompare(b))\n return {\n id: resource.id,\n tenantId: resource.tenantId,\n organizationId: resource.organizationId,\n name: resource.name,\n description: resource.description ?? null,\n resourceTypeId: resource.resourceTypeId ?? null,\n capacity: resource.capacity ?? null,\n capacityUnitValue: resource.capacityUnitValue ?? null,\n capacityUnitName: resource.capacityUnitName ?? null,\n capacityUnitColor: resource.capacityUnitColor ?? null,\n capacityUnitIcon: resource.capacityUnitIcon ?? null,\n appearanceIcon: resource.appearanceIcon ?? null,\n appearanceColor: resource.appearanceColor ?? null,\n isActive: resource.isActive,\n availabilityRuleSetId: resource.availabilityRuleSetId ?? null,\n tags,\n deletedAt: resource.deletedAt ? resource.deletedAt.toISOString() : null,\n }\n}\n\nasync function loadResourceCustomSnapshot(em: EntityManager, snapshot: ResourceSnapshot): Promise<CustomFieldSnapshot> {\n return loadCustomFieldSnapshot(em, {\n entityId: E.resources.resources_resource,\n recordId: snapshot.id,\n tenantId: snapshot.tenantId,\n organizationId: snapshot.organizationId,\n })\n}\n\nasync function syncResourcesResourceTags(em: EntityManager, params: {\n resourceId: string\n organizationId: string\n tenantId: string\n tagIds?: Array<string | null | undefined> | null\n}) {\n if (params.tagIds === undefined) return\n const tagIds = normalizeTagIds(params.tagIds ?? [])\n if (tagIds.length === 0) {\n await em.nativeDelete(ResourcesResourceTagAssignment, { resource: params.resourceId })\n return\n }\n const tagsInScope = await em.find(ResourcesResourceTag, {\n id: { $in: tagIds },\n organizationId: params.organizationId,\n tenantId: params.tenantId,\n })\n if (tagsInScope.length !== tagIds.length) {\n throw new CrudHttpError(400, { error: 'One or more tags not found for this scope' })\n }\n const byId = new Map(tagsInScope.map((tag) => [tag.id, tag]))\n await em.nativeDelete(ResourcesResourceTagAssignment, { resource: params.resourceId })\n const resource = em.getReference(ResourcesResource, params.resourceId)\n for (const tagId of tagIds) {\n const tag = byId.get(tagId)\n if (!tag) continue\n const assignment = em.create(ResourcesResourceTagAssignment, {\n organizationId: params.organizationId,\n tenantId: params.tenantId,\n resource,\n tag,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(assignment)\n }\n}\n\nconst createResourceCommand: CommandHandler<ResourcesResourceCreateInput, { resourceId: string }> = {\n id: 'resources.resources.create',\n async execute(rawInput, ctx) {\n const { parsed, custom } = parseWithCustomFields(resourcesResourceCreateSchema, rawInput)\n ensureTenantScope(ctx, parsed.tenantId)\n ensureOrganizationScope(ctx, parsed.organizationId)\n\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const now = new Date()\n const unitValue =\n typeof parsed.capacityUnitValue === 'string' ? parsed.capacityUnitValue.trim() : ''\n const unitSnapshot = unitValue\n ? await resolveCapacityUnit(em, { tenantId: parsed.tenantId, organizationId: parsed.organizationId }, unitValue)\n : null\n const record = em.create(ResourcesResource, {\n tenantId: parsed.tenantId,\n organizationId: parsed.organizationId,\n name: parsed.name,\n description: parsed.description ?? null,\n resourceTypeId: parsed.resourceTypeId ?? null,\n capacity: parsed.capacity ?? null,\n capacityUnitValue: unitSnapshot?.value ?? null,\n capacityUnitName: unitSnapshot?.name ?? null,\n capacityUnitColor: unitSnapshot?.color ?? null,\n capacityUnitIcon: unitSnapshot?.icon ?? null,\n appearanceIcon: parsed.appearanceIcon ?? null,\n appearanceColor: parsed.appearanceColor ?? null,\n isActive: parsed.isActive ?? true,\n availabilityRuleSetId: parsed.availabilityRuleSetId ?? null,\n createdAt: now,\n updatedAt: now,\n })\n await withAtomicFlush(em, [\n async () => {\n em.persist(record)\n await em.flush()\n },\n () => syncResourcesResourceTags(em, {\n resourceId: record.id,\n organizationId: record.organizationId,\n tenantId: record.tenantId,\n tagIds: parsed.tags,\n }),\n ], { transaction: true })\n const dataEngine = (ctx.container.resolve('dataEngine') as DataEngine)\n await setCustomFieldsIfAny({\n dataEngine,\n entityId: E.resources.resources_resource,\n recordId: record.id,\n tenantId: record.tenantId,\n organizationId: record.organizationId,\n values: custom,\n })\n await emitCrudSideEffects({\n dataEngine,\n action: 'created',\n entity: record,\n identifiers: {\n id: record.id,\n organizationId: record.organizationId,\n tenantId: record.tenantId,\n },\n events: resourcesResourceCrudEvents,\n indexer: resourceCrudIndexer,\n })\n return { resourceId: record.id }\n },\n captureAfter: async (_input, result, ctx) => {\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const snapshot = await loadResourceSnapshot(em, result.resourceId)\n if (!snapshot) return null\n const custom = await loadResourceCustomSnapshot(em, snapshot)\n return { snapshot, custom }\n },\n buildLog: async ({ result, ctx }) => {\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const snapshot = await loadResourceSnapshot(em, result?.resourceId ?? '')\n if (!snapshot) return null\n const custom = await loadResourceCustomSnapshot(em, snapshot)\n const snapshotWithCustom: ResourceSnapshot = custom\n ? { ...snapshot, customFields: custom }\n : snapshot\n const { translate } = await resolveTranslations()\n return {\n actionLabel: translate('resources.audit.resources.create', 'Create resource'),\n resourceKind: 'resources.resource',\n resourceId: snapshotWithCustom.id,\n tenantId: snapshotWithCustom.tenantId,\n organizationId: snapshotWithCustom.organizationId,\n snapshotAfter: snapshotWithCustom,\n payload: {\n undo: {\n after: snapshotWithCustom,\n customAfter: custom,\n } satisfies ResourceUndoPayload,\n },\n }\n },\n undo: async ({ logEntry, ctx }) => {\n const payload = extractUndoPayload<ResourceUndoPayload>(logEntry)\n const after = payload?.after\n if (!after) return\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const record = await em.findOne(ResourcesResource, { id: after.id })\n if (record) {\n record.deletedAt = new Date()\n record.updatedAt = new Date()\n await em.flush()\n\n const dataEngine = (ctx.container.resolve('dataEngine') as DataEngine)\n await emitCrudUndoSideEffects({\n dataEngine,\n action: 'deleted',\n entity: record,\n identifiers: {\n id: record.id,\n organizationId: record.organizationId,\n tenantId: record.tenantId,\n },\n events: resourcesResourceCrudEvents,\n indexer: resourceCrudIndexer,\n })\n }\n },\n redo: async ({ logEntry, ctx }) => {\n const payload = extractUndoPayload<ResourceUndoPayload>(logEntry)\n const after = resolveRedoSnapshot<ResourceSnapshot>(logEntry)\n if (!after) {\n throw new CrudHttpError(400, { error: '[internal] redo snapshot unavailable for resource create' })\n }\n const fallbackCustomAfter = (after as ResourceSnapshot).customFields ?? null\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n let record = await em.findOne(ResourcesResource, { id: after.id })\n await withAtomicFlush(em, [\n async () => {\n if (!record) {\n record = em.create(ResourcesResource, {\n id: after.id,\n tenantId: after.tenantId,\n organizationId: after.organizationId,\n name: after.name,\n description: after.description ?? null,\n resourceTypeId: after.resourceTypeId ?? null,\n capacity: after.capacity ?? null,\n capacityUnitValue: after.capacityUnitValue ?? null,\n capacityUnitName: after.capacityUnitName ?? null,\n capacityUnitColor: after.capacityUnitColor ?? null,\n capacityUnitIcon: after.capacityUnitIcon ?? null,\n appearanceIcon: after.appearanceIcon ?? null,\n appearanceColor: after.appearanceColor ?? null,\n isActive: after.isActive,\n availabilityRuleSetId: after.availabilityRuleSetId ?? null,\n deletedAt: null,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(record)\n } else {\n record.name = after.name\n record.description = after.description ?? null\n record.resourceTypeId = after.resourceTypeId ?? null\n record.capacity = after.capacity ?? null\n record.capacityUnitValue = after.capacityUnitValue ?? null\n record.capacityUnitName = after.capacityUnitName ?? null\n record.capacityUnitColor = after.capacityUnitColor ?? null\n record.capacityUnitIcon = after.capacityUnitIcon ?? null\n record.appearanceIcon = after.appearanceIcon ?? null\n record.appearanceColor = after.appearanceColor ?? null\n record.isActive = after.isActive\n record.availabilityRuleSetId = after.availabilityRuleSetId ?? null\n record.deletedAt = null\n record.updatedAt = new Date()\n }\n await em.flush()\n },\n () => syncResourcesResourceTags(em, {\n resourceId: (record as ResourcesResource).id,\n organizationId: (record as ResourcesResource).organizationId,\n tenantId: (record as ResourcesResource).tenantId,\n tagIds: after.tags,\n }),\n ], { transaction: true })\n const resolvedRecord = record as ResourcesResource\n\n const dataEngine = (ctx.container.resolve('dataEngine') as DataEngine)\n const customAfter = payload?.customAfter ?? fallbackCustomAfter ?? undefined\n if (customAfter) {\n const reset = buildCustomFieldResetMap(customAfter, undefined)\n await setCustomFieldsIfAny({\n dataEngine,\n entityId: E.resources.resources_resource,\n recordId: resolvedRecord.id,\n tenantId: resolvedRecord.tenantId,\n organizationId: resolvedRecord.organizationId,\n values: reset,\n })\n }\n\n await emitCrudSideEffects({\n dataEngine,\n action: 'created',\n entity: resolvedRecord,\n identifiers: {\n id: resolvedRecord.id,\n organizationId: resolvedRecord.organizationId,\n tenantId: resolvedRecord.tenantId,\n },\n events: resourcesResourceCrudEvents,\n indexer: resourceCrudIndexer,\n })\n return { resourceId: resolvedRecord.id }\n },\n}\n\nconst updateResourceCommand: CommandHandler<ResourcesResourceUpdateInput, { resourceId: string }> = {\n id: 'resources.resources.update',\n async prepare(rawInput, ctx) {\n const { parsed } = parseWithCustomFields(resourcesResourceUpdateSchema, rawInput)\n const em = (ctx.container.resolve('em') as EntityManager)\n const snapshot = await loadResourceSnapshot(em, parsed.id)\n if (!snapshot) return {}\n const custom = await loadResourceCustomSnapshot(em, snapshot)\n return { before: snapshot, customBefore: custom }\n },\n async execute(rawInput, ctx) {\n const { parsed, custom } = parseWithCustomFields(resourcesResourceUpdateSchema, rawInput)\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const record = await findOneWithDecryption(\n em,\n ResourcesResource,\n { id: parsed.id, deletedAt: null },\n undefined,\n { tenantId: ctx.auth?.tenantId ?? null, organizationId: ctx.auth?.orgId ?? null },\n )\n if (!record) throw new CrudHttpError(404, { error: 'Resources resource not found.' })\n ensureTenantScope(ctx, record.tenantId)\n ensureOrganizationScope(ctx, record.organizationId)\n\n let capacityUnit: CapacityUnitSnapshot | null | undefined\n if (parsed.capacityUnitValue !== undefined) {\n const unitValue =\n typeof parsed.capacityUnitValue === 'string' ? parsed.capacityUnitValue.trim() : ''\n capacityUnit = unitValue\n ? await resolveCapacityUnit(\n em,\n { tenantId: record.tenantId, organizationId: record.organizationId },\n unitValue,\n )\n : null\n }\n await withAtomicFlush(em, [\n () => {\n if (parsed.capacityUnitValue !== undefined) {\n record.capacityUnitValue = capacityUnit?.value ?? null\n record.capacityUnitName = capacityUnit?.name ?? null\n record.capacityUnitColor = capacityUnit?.color ?? null\n record.capacityUnitIcon = capacityUnit?.icon ?? null\n }\n if (parsed.name !== undefined) record.name = parsed.name\n if (parsed.description !== undefined) record.description = parsed.description ?? null\n if (parsed.resourceTypeId !== undefined) record.resourceTypeId = parsed.resourceTypeId ?? null\n if (parsed.capacity !== undefined) record.capacity = parsed.capacity ?? null\n if (parsed.appearanceIcon !== undefined) record.appearanceIcon = parsed.appearanceIcon ?? null\n if (parsed.appearanceColor !== undefined) record.appearanceColor = parsed.appearanceColor ?? null\n if (parsed.availabilityRuleSetId !== undefined) record.availabilityRuleSetId = parsed.availabilityRuleSetId ?? null\n record.updatedAt = new Date()\n if (parsed.isActive !== undefined) record.isActive = parsed.isActive\n },\n () => syncResourcesResourceTags(em, {\n resourceId: record.id,\n organizationId: record.organizationId,\n tenantId: record.tenantId,\n tagIds: parsed.tags,\n }),\n ], { transaction: true })\n const dataEngine = (ctx.container.resolve('dataEngine') as DataEngine)\n await setCustomFieldsIfAny({\n dataEngine,\n entityId: E.resources.resources_resource,\n recordId: record.id,\n tenantId: record.tenantId,\n organizationId: record.organizationId,\n values: custom,\n })\n await emitCrudSideEffects({\n dataEngine,\n action: 'updated',\n entity: record,\n identifiers: {\n id: record.id,\n organizationId: record.organizationId,\n tenantId: record.tenantId,\n },\n events: resourcesResourceCrudEvents,\n indexer: resourceCrudIndexer,\n })\n return { resourceId: record.id }\n },\n buildLog: async ({ snapshots, ctx }) => {\n const before = snapshots.before as ResourceSnapshot | undefined\n if (!before) return null\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const after = await loadResourceSnapshot(em, before.id)\n if (!after) return null\n const customBefore = (snapshots as { customBefore?: CustomFieldSnapshot | null }).customBefore ?? undefined\n const customAfter = await loadResourceCustomSnapshot(em, after)\n const beforeWithCustom: ResourceSnapshot = customBefore\n ? { ...before, customFields: customBefore }\n : before\n const afterWithCustom: ResourceSnapshot = customAfter\n ? { ...after, customFields: customAfter }\n : after\n const changes = buildChanges(before as unknown as Record<string, unknown>, after as unknown as Record<string, unknown>, [\n 'name',\n 'description',\n 'resourceTypeId',\n 'capacity',\n 'capacityUnitValue',\n 'capacityUnitName',\n 'capacityUnitColor',\n 'capacityUnitIcon',\n 'appearanceIcon',\n 'appearanceColor',\n 'isActive',\n 'availabilityRuleSetId',\n 'deletedAt',\n ])\n if (before.tags.join(',') !== after.tags.join(',')) {\n changes.tags = { from: before.tags, to: after.tags }\n }\n const customChanges = diffCustomFieldChanges(customBefore, customAfter)\n if (Object.keys(customChanges).length) {\n changes.customFields = { from: customBefore ?? null, to: customAfter ?? null }\n }\n const { translate } = await resolveTranslations()\n return {\n actionLabel: translate('resources.audit.resources.update', 'Update resource'),\n resourceKind: 'resources.resource',\n resourceId: before.id,\n tenantId: before.tenantId,\n organizationId: before.organizationId,\n snapshotBefore: beforeWithCustom,\n snapshotAfter: afterWithCustom,\n changes,\n payload: {\n undo: {\n before: beforeWithCustom,\n after: afterWithCustom,\n customBefore: customBefore ?? null,\n customAfter,\n } satisfies ResourceUndoPayload,\n },\n }\n },\n undo: async ({ logEntry, ctx }) => {\n const payload = extractUndoPayload<ResourceUndoPayload>(logEntry)\n const before = payload?.before\n if (!before) return\n const fallbackCustomBefore = (before as ResourceSnapshot).customFields ?? null\n const fallbackCustomAfter = (payload?.after as ResourceSnapshot | null | undefined)?.customFields ?? null\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const record = await em.findOne(ResourcesResource, { id: before.id })\n if (!record) return\n await withAtomicFlush(em, [\n () => {\n record.name = before.name\n record.description = before.description ?? null\n record.resourceTypeId = before.resourceTypeId ?? null\n record.capacity = before.capacity ?? null\n record.capacityUnitValue = before.capacityUnitValue ?? null\n record.capacityUnitName = before.capacityUnitName ?? null\n record.capacityUnitColor = before.capacityUnitColor ?? null\n record.capacityUnitIcon = before.capacityUnitIcon ?? null\n record.appearanceIcon = before.appearanceIcon ?? null\n record.appearanceColor = before.appearanceColor ?? null\n record.isActive = before.isActive\n record.availabilityRuleSetId = before.availabilityRuleSetId ?? null\n record.deletedAt = before.deletedAt ? new Date(before.deletedAt) : null\n record.updatedAt = new Date()\n },\n () => syncResourcesResourceTags(em, {\n resourceId: record.id,\n organizationId: record.organizationId,\n tenantId: record.tenantId,\n tagIds: before.tags,\n }),\n ], { transaction: true })\n\n const dataEngine = (ctx.container.resolve('dataEngine') as DataEngine)\n const customBefore = payload.customBefore ?? fallbackCustomBefore ?? undefined\n const customAfter = payload.customAfter ?? fallbackCustomAfter ?? undefined\n if (customBefore || customAfter) {\n const reset = buildCustomFieldResetMap(customBefore, customAfter)\n await setCustomFieldsIfAny({\n dataEngine,\n entityId: E.resources.resources_resource,\n recordId: record.id,\n tenantId: record.tenantId,\n organizationId: record.organizationId,\n values: reset,\n })\n }\n\n await emitCrudUndoSideEffects({\n dataEngine,\n action: 'updated',\n entity: record,\n identifiers: {\n id: record.id,\n organizationId: record.organizationId,\n tenantId: record.tenantId,\n },\n events: resourcesResourceCrudEvents,\n indexer: resourceCrudIndexer,\n })\n },\n}\n\nconst deleteResourceCommand: CommandHandler<{ id?: string }, { resourceId: string }> = {\n id: 'resources.resources.delete',\n async prepare(input, ctx) {\n const id = input?.id\n if (!id) throw new CrudHttpError(400, { error: 'Resource id is required.' })\n const em = (ctx.container.resolve('em') as EntityManager)\n const snapshot = await loadResourceSnapshot(em, id)\n if (!snapshot) return {}\n const custom = await loadResourceCustomSnapshot(em, snapshot)\n return { before: snapshot, customBefore: custom }\n },\n async execute(input, ctx) {\n const id = input?.id\n if (!id) throw new CrudHttpError(400, { error: 'Resource id is required.' })\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const record = await findOneWithDecryption(\n em,\n ResourcesResource,\n { id, deletedAt: null },\n undefined,\n { tenantId: ctx.auth?.tenantId ?? null, organizationId: ctx.auth?.orgId ?? null },\n )\n if (!record) throw new CrudHttpError(404, { error: 'Resources resource not found.' })\n ensureTenantScope(ctx, record.tenantId)\n ensureOrganizationScope(ctx, record.organizationId)\n record.deletedAt = new Date()\n record.updatedAt = new Date()\n await em.flush()\n const dataEngine = (ctx.container.resolve('dataEngine') as DataEngine)\n await emitCrudSideEffects({\n dataEngine,\n action: 'deleted',\n entity: record,\n identifiers: {\n id: record.id,\n organizationId: record.organizationId,\n tenantId: record.tenantId,\n },\n events: resourcesResourceCrudEvents,\n indexer: resourceCrudIndexer,\n })\n return { resourceId: record.id }\n },\n buildLog: async ({ snapshots }) => {\n const before = snapshots.before as ResourceSnapshot | undefined\n if (!before) return null\n const customBefore = (snapshots as { customBefore?: CustomFieldSnapshot | null }).customBefore ?? undefined\n const beforeWithCustom: ResourceSnapshot = customBefore\n ? { ...before, customFields: customBefore }\n : before\n const { translate } = await resolveTranslations()\n return {\n actionLabel: translate('resources.audit.resources.delete', 'Delete resource'),\n resourceKind: 'resources.resource',\n resourceId: before.id,\n tenantId: before.tenantId,\n organizationId: before.organizationId,\n snapshotBefore: beforeWithCustom,\n payload: {\n undo: {\n before: beforeWithCustom,\n customBefore: customBefore ?? null,\n } satisfies ResourceUndoPayload,\n },\n }\n },\n undo: async ({ logEntry, ctx }) => {\n const payload = extractUndoPayload<ResourceUndoPayload>(logEntry)\n const before = payload?.before\n if (!before) return\n const fallbackCustomBefore = (before as ResourceSnapshot).customFields ?? null\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n let record = await em.findOne(ResourcesResource, { id: before.id })\n await withAtomicFlush(em, [\n async () => {\n if (!record) {\n record = em.create(ResourcesResource, {\n id: before.id,\n tenantId: before.tenantId,\n organizationId: before.organizationId,\n name: before.name,\n description: before.description ?? null,\n resourceTypeId: before.resourceTypeId ?? null,\n capacity: before.capacity ?? null,\n capacityUnitValue: before.capacityUnitValue ?? null,\n capacityUnitName: before.capacityUnitName ?? null,\n capacityUnitColor: before.capacityUnitColor ?? null,\n capacityUnitIcon: before.capacityUnitIcon ?? null,\n appearanceIcon: before.appearanceIcon ?? null,\n appearanceColor: before.appearanceColor ?? null,\n isActive: before.isActive,\n availabilityRuleSetId: before.availabilityRuleSetId ?? null,\n deletedAt: null,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(record)\n } else {\n record.name = before.name\n record.description = before.description ?? null\n record.resourceTypeId = before.resourceTypeId ?? null\n record.capacity = before.capacity ?? null\n record.capacityUnitValue = before.capacityUnitValue ?? null\n record.capacityUnitName = before.capacityUnitName ?? null\n record.capacityUnitColor = before.capacityUnitColor ?? null\n record.capacityUnitIcon = before.capacityUnitIcon ?? null\n record.appearanceIcon = before.appearanceIcon ?? null\n record.appearanceColor = before.appearanceColor ?? null\n record.isActive = before.isActive\n record.availabilityRuleSetId = before.availabilityRuleSetId ?? null\n record.deletedAt = null\n record.updatedAt = new Date()\n }\n await em.flush()\n },\n () => syncResourcesResourceTags(em, {\n resourceId: (record as ResourcesResource).id,\n organizationId: (record as ResourcesResource).organizationId,\n tenantId: (record as ResourcesResource).tenantId,\n tagIds: before.tags,\n }),\n ], { transaction: true })\n const resolvedRecord = record as ResourcesResource\n\n const dataEngine = (ctx.container.resolve('dataEngine') as DataEngine)\n const customBefore = payload.customBefore ?? fallbackCustomBefore ?? undefined\n if (customBefore) {\n const reset = buildCustomFieldResetMap(customBefore, undefined)\n await setCustomFieldsIfAny({\n dataEngine,\n entityId: E.resources.resources_resource,\n recordId: resolvedRecord.id,\n tenantId: resolvedRecord.tenantId,\n organizationId: resolvedRecord.organizationId,\n values: reset,\n })\n }\n\n await emitCrudUndoSideEffects({\n dataEngine,\n action: 'created',\n entity: resolvedRecord,\n identifiers: {\n id: resolvedRecord.id,\n organizationId: resolvedRecord.organizationId,\n tenantId: resolvedRecord.tenantId,\n },\n events: resourcesResourceCrudEvents,\n indexer: resourceCrudIndexer,\n })\n },\n}\n\nregisterCommand(createResourceCommand)\nregisterCommand(updateResourceCommand)\nregisterCommand(deleteResourceCommand)\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { CommandHandler } from '@open-mercato/shared/lib/commands'\nimport { registerCommand } from '@open-mercato/shared/lib/commands'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport { CrudHttpError } from '@open-mercato/shared/lib/crud/errors'\nimport { findOneWithDecryption } from '@open-mercato/shared/lib/encryption/find'\nimport { buildChanges, emitCrudSideEffects, emitCrudUndoSideEffects, parseWithCustomFields, setCustomFieldsIfAny } from '@open-mercato/shared/lib/commands/helpers'\nimport { withAtomicFlush } from '@open-mercato/shared/lib/commands/flush'\nimport { buildCustomFieldResetMap, diffCustomFieldChanges, loadCustomFieldSnapshot, type CustomFieldSnapshot } from '@open-mercato/shared/lib/commands/customFieldSnapshots'\nimport { resolveRedoSnapshot } from '@open-mercato/shared/lib/commands/redo'\nimport type { DataEngine } from '@open-mercato/shared/lib/data/engine'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\nimport type { CrudIndexerConfig } from '@open-mercato/shared/lib/crud/types'\nimport { Dictionary, DictionaryEntry } from '@open-mercato/core/modules/dictionaries/data/entities'\nimport { ResourcesResource, ResourcesResourceTag, ResourcesResourceTagAssignment } from '../data/entities'\nimport {\n resourcesResourceCreateSchema,\n resourcesResourceUpdateSchema,\n type ResourcesResourceCreateInput,\n type ResourcesResourceUpdateInput,\n} from '../data/validators'\nimport { resourcesResourceCrudEvents } from '../lib/crud'\nimport { ensureOrganizationScope, ensureTenantScope, extractUndoPayload } from './shared'\nimport { RESOURCES_CAPACITY_UNIT_DICTIONARY_KEY } from '../lib/capacityUnits'\nimport { E } from '#generated/entities.ids.generated'\n\nconst resourceCrudIndexer: CrudIndexerConfig<ResourcesResource> = {\n entityType: E.resources.resources_resource,\n}\n\ntype CapacityUnitSnapshot = {\n value: string\n name: string\n color: string | null\n icon: string | null\n}\n\ntype ResourceSnapshot = {\n id: string\n tenantId: string\n organizationId: string\n name: string\n description: string | null\n resourceTypeId: string | null\n capacity: number | null\n capacityUnitValue: string | null\n capacityUnitName: string | null\n capacityUnitColor: string | null\n capacityUnitIcon: string | null\n appearanceIcon: string | null\n appearanceColor: string | null\n isActive: boolean\n availabilityRuleSetId: string | null\n customFieldsetCode: string | null\n tags: string[]\n deletedAt: string | null\n customFields?: CustomFieldSnapshot | null\n}\n\ntype ResourceUndoPayload = {\n before?: ResourceSnapshot | null\n after?: ResourceSnapshot | null\n customBefore?: CustomFieldSnapshot | null\n customAfter?: CustomFieldSnapshot | null\n}\n\nasync function resolveCapacityUnit(\n em: EntityManager,\n scope: { tenantId: string; organizationId: string },\n rawValue: string,\n): Promise<CapacityUnitSnapshot> {\n const trimmed = rawValue.trim()\n if (!trimmed) {\n throw new CrudHttpError(400, { error: 'Capacity unit is required.' })\n }\n const dictionary = await findOneWithDecryption(\n em,\n Dictionary,\n {\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n key: RESOURCES_CAPACITY_UNIT_DICTIONARY_KEY,\n deletedAt: null,\n isActive: true,\n },\n undefined,\n scope,\n )\n if (!dictionary) {\n throw new CrudHttpError(400, { error: 'Capacity unit dictionary is not configured.' })\n }\n const normalizedValue = trimmed.toLowerCase()\n const entry = await findOneWithDecryption(\n em,\n DictionaryEntry,\n {\n dictionary,\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n normalizedValue,\n },\n { populate: ['dictionary'] },\n scope,\n )\n if (!entry) {\n throw new CrudHttpError(400, { error: 'Capacity unit not found.' })\n }\n return {\n value: entry.value,\n name: entry.label?.trim().length ? entry.label : entry.value,\n color: entry.color ?? null,\n icon: entry.icon ?? null,\n }\n}\n\nfunction normalizeTagIds(tags?: Array<string | null | undefined>): string[] {\n if (!Array.isArray(tags)) return []\n const set = new Set<string>()\n tags.forEach((id) => {\n if (typeof id === 'string' && id.trim().length > 0) set.add(id.trim())\n })\n return Array.from(set)\n}\n\nasync function loadResourceSnapshot(em: EntityManager, id: string): Promise<ResourceSnapshot | null> {\n const resource = await findOneWithDecryption(\n em,\n ResourcesResource,\n { id },\n undefined,\n { tenantId: null, organizationId: null },\n )\n if (!resource) return null\n const assignments = await em.find(\n ResourcesResourceTagAssignment,\n { resource: resource.id },\n { populate: ['tag'] },\n )\n const tags = assignments\n .map((assignment) => (assignment.tag as ResourcesResourceTag | undefined)?.id ?? null)\n .filter((tagId): tagId is string => typeof tagId === 'string' && tagId.length > 0)\n .sort((a, b) => a.localeCompare(b))\n return {\n id: resource.id,\n tenantId: resource.tenantId,\n organizationId: resource.organizationId,\n name: resource.name,\n description: resource.description ?? null,\n resourceTypeId: resource.resourceTypeId ?? null,\n capacity: resource.capacity ?? null,\n capacityUnitValue: resource.capacityUnitValue ?? null,\n capacityUnitName: resource.capacityUnitName ?? null,\n capacityUnitColor: resource.capacityUnitColor ?? null,\n capacityUnitIcon: resource.capacityUnitIcon ?? null,\n appearanceIcon: resource.appearanceIcon ?? null,\n appearanceColor: resource.appearanceColor ?? null,\n isActive: resource.isActive,\n availabilityRuleSetId: resource.availabilityRuleSetId ?? null,\n customFieldsetCode: resource.customFieldsetCode ?? null,\n tags,\n deletedAt: resource.deletedAt ? resource.deletedAt.toISOString() : null,\n }\n}\n\nasync function loadResourceCustomSnapshot(em: EntityManager, snapshot: ResourceSnapshot): Promise<CustomFieldSnapshot> {\n return loadCustomFieldSnapshot(em, {\n entityId: E.resources.resources_resource,\n recordId: snapshot.id,\n tenantId: snapshot.tenantId,\n organizationId: snapshot.organizationId,\n })\n}\n\nasync function syncResourcesResourceTags(em: EntityManager, params: {\n resourceId: string\n organizationId: string\n tenantId: string\n tagIds?: Array<string | null | undefined> | null\n}) {\n if (params.tagIds === undefined) return\n const tagIds = normalizeTagIds(params.tagIds ?? [])\n if (tagIds.length === 0) {\n await em.nativeDelete(ResourcesResourceTagAssignment, { resource: params.resourceId })\n return\n }\n const tagsInScope = await em.find(ResourcesResourceTag, {\n id: { $in: tagIds },\n organizationId: params.organizationId,\n tenantId: params.tenantId,\n })\n if (tagsInScope.length !== tagIds.length) {\n throw new CrudHttpError(400, { error: 'One or more tags not found for this scope' })\n }\n const byId = new Map(tagsInScope.map((tag) => [tag.id, tag]))\n await em.nativeDelete(ResourcesResourceTagAssignment, { resource: params.resourceId })\n const resource = em.getReference(ResourcesResource, params.resourceId)\n for (const tagId of tagIds) {\n const tag = byId.get(tagId)\n if (!tag) continue\n const assignment = em.create(ResourcesResourceTagAssignment, {\n organizationId: params.organizationId,\n tenantId: params.tenantId,\n resource,\n tag,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(assignment)\n }\n}\n\nconst createResourceCommand: CommandHandler<ResourcesResourceCreateInput, { resourceId: string }> = {\n id: 'resources.resources.create',\n async execute(rawInput, ctx) {\n const { parsed, custom } = parseWithCustomFields(resourcesResourceCreateSchema, rawInput)\n ensureTenantScope(ctx, parsed.tenantId)\n ensureOrganizationScope(ctx, parsed.organizationId)\n\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const now = new Date()\n const unitValue =\n typeof parsed.capacityUnitValue === 'string' ? parsed.capacityUnitValue.trim() : ''\n const unitSnapshot = unitValue\n ? await resolveCapacityUnit(em, { tenantId: parsed.tenantId, organizationId: parsed.organizationId }, unitValue)\n : null\n const record = em.create(ResourcesResource, {\n tenantId: parsed.tenantId,\n organizationId: parsed.organizationId,\n name: parsed.name,\n description: parsed.description ?? null,\n resourceTypeId: parsed.resourceTypeId ?? null,\n capacity: parsed.capacity ?? null,\n capacityUnitValue: unitSnapshot?.value ?? null,\n capacityUnitName: unitSnapshot?.name ?? null,\n capacityUnitColor: unitSnapshot?.color ?? null,\n capacityUnitIcon: unitSnapshot?.icon ?? null,\n appearanceIcon: parsed.appearanceIcon ?? null,\n appearanceColor: parsed.appearanceColor ?? null,\n isActive: parsed.isActive ?? true,\n availabilityRuleSetId: parsed.availabilityRuleSetId ?? null,\n customFieldsetCode: parsed.customFieldsetCode ?? null,\n createdAt: now,\n updatedAt: now,\n })\n await withAtomicFlush(em, [\n async () => {\n em.persist(record)\n await em.flush()\n },\n () => syncResourcesResourceTags(em, {\n resourceId: record.id,\n organizationId: record.organizationId,\n tenantId: record.tenantId,\n tagIds: parsed.tags,\n }),\n ], { transaction: true })\n const dataEngine = (ctx.container.resolve('dataEngine') as DataEngine)\n await setCustomFieldsIfAny({\n dataEngine,\n entityId: E.resources.resources_resource,\n recordId: record.id,\n tenantId: record.tenantId,\n organizationId: record.organizationId,\n values: custom,\n })\n await emitCrudSideEffects({\n dataEngine,\n action: 'created',\n entity: record,\n identifiers: {\n id: record.id,\n organizationId: record.organizationId,\n tenantId: record.tenantId,\n },\n events: resourcesResourceCrudEvents,\n indexer: resourceCrudIndexer,\n })\n return { resourceId: record.id }\n },\n captureAfter: async (_input, result, ctx) => {\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const snapshot = await loadResourceSnapshot(em, result.resourceId)\n if (!snapshot) return null\n const custom = await loadResourceCustomSnapshot(em, snapshot)\n return { snapshot, custom }\n },\n buildLog: async ({ result, ctx }) => {\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const snapshot = await loadResourceSnapshot(em, result?.resourceId ?? '')\n if (!snapshot) return null\n const custom = await loadResourceCustomSnapshot(em, snapshot)\n const snapshotWithCustom: ResourceSnapshot = custom\n ? { ...snapshot, customFields: custom }\n : snapshot\n const { translate } = await resolveTranslations()\n return {\n actionLabel: translate('resources.audit.resources.create', 'Create resource'),\n resourceKind: 'resources.resource',\n resourceId: snapshotWithCustom.id,\n tenantId: snapshotWithCustom.tenantId,\n organizationId: snapshotWithCustom.organizationId,\n snapshotAfter: snapshotWithCustom,\n payload: {\n undo: {\n after: snapshotWithCustom,\n customAfter: custom,\n } satisfies ResourceUndoPayload,\n },\n }\n },\n undo: async ({ logEntry, ctx }) => {\n const payload = extractUndoPayload<ResourceUndoPayload>(logEntry)\n const after = payload?.after\n if (!after) return\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const record = await em.findOne(ResourcesResource, { id: after.id })\n if (record) {\n record.deletedAt = new Date()\n record.updatedAt = new Date()\n await em.flush()\n\n const dataEngine = (ctx.container.resolve('dataEngine') as DataEngine)\n await emitCrudUndoSideEffects({\n dataEngine,\n action: 'deleted',\n entity: record,\n identifiers: {\n id: record.id,\n organizationId: record.organizationId,\n tenantId: record.tenantId,\n },\n events: resourcesResourceCrudEvents,\n indexer: resourceCrudIndexer,\n })\n }\n },\n redo: async ({ logEntry, ctx }) => {\n const payload = extractUndoPayload<ResourceUndoPayload>(logEntry)\n const after = resolveRedoSnapshot<ResourceSnapshot>(logEntry)\n if (!after) {\n throw new CrudHttpError(400, { error: '[internal] redo snapshot unavailable for resource create' })\n }\n const fallbackCustomAfter = (after as ResourceSnapshot).customFields ?? null\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n let record = await em.findOne(ResourcesResource, { id: after.id })\n await withAtomicFlush(em, [\n async () => {\n if (!record) {\n record = em.create(ResourcesResource, {\n id: after.id,\n tenantId: after.tenantId,\n organizationId: after.organizationId,\n name: after.name,\n description: after.description ?? null,\n resourceTypeId: after.resourceTypeId ?? null,\n capacity: after.capacity ?? null,\n capacityUnitValue: after.capacityUnitValue ?? null,\n capacityUnitName: after.capacityUnitName ?? null,\n capacityUnitColor: after.capacityUnitColor ?? null,\n capacityUnitIcon: after.capacityUnitIcon ?? null,\n appearanceIcon: after.appearanceIcon ?? null,\n appearanceColor: after.appearanceColor ?? null,\n isActive: after.isActive,\n availabilityRuleSetId: after.availabilityRuleSetId ?? null,\n customFieldsetCode: after.customFieldsetCode ?? null,\n deletedAt: null,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(record)\n } else {\n record.name = after.name\n record.description = after.description ?? null\n record.resourceTypeId = after.resourceTypeId ?? null\n record.capacity = after.capacity ?? null\n record.capacityUnitValue = after.capacityUnitValue ?? null\n record.capacityUnitName = after.capacityUnitName ?? null\n record.capacityUnitColor = after.capacityUnitColor ?? null\n record.capacityUnitIcon = after.capacityUnitIcon ?? null\n record.appearanceIcon = after.appearanceIcon ?? null\n record.appearanceColor = after.appearanceColor ?? null\n record.isActive = after.isActive\n record.availabilityRuleSetId = after.availabilityRuleSetId ?? null\n record.customFieldsetCode = after.customFieldsetCode ?? null\n record.deletedAt = null\n record.updatedAt = new Date()\n }\n await em.flush()\n },\n () => syncResourcesResourceTags(em, {\n resourceId: (record as ResourcesResource).id,\n organizationId: (record as ResourcesResource).organizationId,\n tenantId: (record as ResourcesResource).tenantId,\n tagIds: after.tags,\n }),\n ], { transaction: true })\n const resolvedRecord = record as ResourcesResource\n\n const dataEngine = (ctx.container.resolve('dataEngine') as DataEngine)\n const customAfter = payload?.customAfter ?? fallbackCustomAfter ?? undefined\n if (customAfter) {\n const reset = buildCustomFieldResetMap(customAfter, undefined)\n await setCustomFieldsIfAny({\n dataEngine,\n entityId: E.resources.resources_resource,\n recordId: resolvedRecord.id,\n tenantId: resolvedRecord.tenantId,\n organizationId: resolvedRecord.organizationId,\n values: reset,\n })\n }\n\n await emitCrudSideEffects({\n dataEngine,\n action: 'created',\n entity: resolvedRecord,\n identifiers: {\n id: resolvedRecord.id,\n organizationId: resolvedRecord.organizationId,\n tenantId: resolvedRecord.tenantId,\n },\n events: resourcesResourceCrudEvents,\n indexer: resourceCrudIndexer,\n })\n return { resourceId: resolvedRecord.id }\n },\n}\n\nconst updateResourceCommand: CommandHandler<ResourcesResourceUpdateInput, { resourceId: string }> = {\n id: 'resources.resources.update',\n async prepare(rawInput, ctx) {\n const { parsed } = parseWithCustomFields(resourcesResourceUpdateSchema, rawInput)\n const em = (ctx.container.resolve('em') as EntityManager)\n const snapshot = await loadResourceSnapshot(em, parsed.id)\n if (!snapshot) return {}\n const custom = await loadResourceCustomSnapshot(em, snapshot)\n return { before: snapshot, customBefore: custom }\n },\n async execute(rawInput, ctx) {\n const { parsed, custom } = parseWithCustomFields(resourcesResourceUpdateSchema, rawInput)\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const record = await findOneWithDecryption(\n em,\n ResourcesResource,\n { id: parsed.id, deletedAt: null },\n undefined,\n { tenantId: ctx.auth?.tenantId ?? null, organizationId: ctx.auth?.orgId ?? null },\n )\n if (!record) throw new CrudHttpError(404, { error: 'Resources resource not found.' })\n ensureTenantScope(ctx, record.tenantId)\n ensureOrganizationScope(ctx, record.organizationId)\n\n let capacityUnit: CapacityUnitSnapshot | null | undefined\n if (parsed.capacityUnitValue !== undefined) {\n const unitValue =\n typeof parsed.capacityUnitValue === 'string' ? parsed.capacityUnitValue.trim() : ''\n capacityUnit = unitValue\n ? await resolveCapacityUnit(\n em,\n { tenantId: record.tenantId, organizationId: record.organizationId },\n unitValue,\n )\n : null\n }\n await withAtomicFlush(em, [\n () => {\n if (parsed.capacityUnitValue !== undefined) {\n record.capacityUnitValue = capacityUnit?.value ?? null\n record.capacityUnitName = capacityUnit?.name ?? null\n record.capacityUnitColor = capacityUnit?.color ?? null\n record.capacityUnitIcon = capacityUnit?.icon ?? null\n }\n if (parsed.name !== undefined) record.name = parsed.name\n if (parsed.description !== undefined) record.description = parsed.description ?? null\n if (parsed.resourceTypeId !== undefined) record.resourceTypeId = parsed.resourceTypeId ?? null\n if (parsed.capacity !== undefined) record.capacity = parsed.capacity ?? null\n if (parsed.appearanceIcon !== undefined) record.appearanceIcon = parsed.appearanceIcon ?? null\n if (parsed.appearanceColor !== undefined) record.appearanceColor = parsed.appearanceColor ?? null\n if (parsed.availabilityRuleSetId !== undefined) record.availabilityRuleSetId = parsed.availabilityRuleSetId ?? null\n if (parsed.customFieldsetCode !== undefined) record.customFieldsetCode = parsed.customFieldsetCode ?? null\n record.updatedAt = new Date()\n if (parsed.isActive !== undefined) record.isActive = parsed.isActive\n },\n () => syncResourcesResourceTags(em, {\n resourceId: record.id,\n organizationId: record.organizationId,\n tenantId: record.tenantId,\n tagIds: parsed.tags,\n }),\n ], { transaction: true })\n const dataEngine = (ctx.container.resolve('dataEngine') as DataEngine)\n await setCustomFieldsIfAny({\n dataEngine,\n entityId: E.resources.resources_resource,\n recordId: record.id,\n tenantId: record.tenantId,\n organizationId: record.organizationId,\n values: custom,\n })\n await emitCrudSideEffects({\n dataEngine,\n action: 'updated',\n entity: record,\n identifiers: {\n id: record.id,\n organizationId: record.organizationId,\n tenantId: record.tenantId,\n },\n events: resourcesResourceCrudEvents,\n indexer: resourceCrudIndexer,\n })\n return { resourceId: record.id }\n },\n buildLog: async ({ snapshots, ctx }) => {\n const before = snapshots.before as ResourceSnapshot | undefined\n if (!before) return null\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const after = await loadResourceSnapshot(em, before.id)\n if (!after) return null\n const customBefore = (snapshots as { customBefore?: CustomFieldSnapshot | null }).customBefore ?? undefined\n const customAfter = await loadResourceCustomSnapshot(em, after)\n const beforeWithCustom: ResourceSnapshot = customBefore\n ? { ...before, customFields: customBefore }\n : before\n const afterWithCustom: ResourceSnapshot = customAfter\n ? { ...after, customFields: customAfter }\n : after\n const changes = buildChanges(before as unknown as Record<string, unknown>, after as unknown as Record<string, unknown>, [\n 'name',\n 'description',\n 'resourceTypeId',\n 'capacity',\n 'capacityUnitValue',\n 'capacityUnitName',\n 'capacityUnitColor',\n 'capacityUnitIcon',\n 'appearanceIcon',\n 'appearanceColor',\n 'isActive',\n 'availabilityRuleSetId',\n 'customFieldsetCode',\n 'deletedAt',\n ])\n if (before.tags.join(',') !== after.tags.join(',')) {\n changes.tags = { from: before.tags, to: after.tags }\n }\n const customChanges = diffCustomFieldChanges(customBefore, customAfter)\n if (Object.keys(customChanges).length) {\n changes.customFields = { from: customBefore ?? null, to: customAfter ?? null }\n }\n const { translate } = await resolveTranslations()\n return {\n actionLabel: translate('resources.audit.resources.update', 'Update resource'),\n resourceKind: 'resources.resource',\n resourceId: before.id,\n tenantId: before.tenantId,\n organizationId: before.organizationId,\n snapshotBefore: beforeWithCustom,\n snapshotAfter: afterWithCustom,\n changes,\n payload: {\n undo: {\n before: beforeWithCustom,\n after: afterWithCustom,\n customBefore: customBefore ?? null,\n customAfter,\n } satisfies ResourceUndoPayload,\n },\n }\n },\n undo: async ({ logEntry, ctx }) => {\n const payload = extractUndoPayload<ResourceUndoPayload>(logEntry)\n const before = payload?.before\n if (!before) return\n const fallbackCustomBefore = (before as ResourceSnapshot).customFields ?? null\n const fallbackCustomAfter = (payload?.after as ResourceSnapshot | null | undefined)?.customFields ?? null\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const record = await em.findOne(ResourcesResource, { id: before.id })\n if (!record) return\n await withAtomicFlush(em, [\n () => {\n record.name = before.name\n record.description = before.description ?? null\n record.resourceTypeId = before.resourceTypeId ?? null\n record.capacity = before.capacity ?? null\n record.capacityUnitValue = before.capacityUnitValue ?? null\n record.capacityUnitName = before.capacityUnitName ?? null\n record.capacityUnitColor = before.capacityUnitColor ?? null\n record.capacityUnitIcon = before.capacityUnitIcon ?? null\n record.appearanceIcon = before.appearanceIcon ?? null\n record.appearanceColor = before.appearanceColor ?? null\n record.isActive = before.isActive\n record.availabilityRuleSetId = before.availabilityRuleSetId ?? null\n record.customFieldsetCode = before.customFieldsetCode ?? null\n record.deletedAt = before.deletedAt ? new Date(before.deletedAt) : null\n record.updatedAt = new Date()\n },\n () => syncResourcesResourceTags(em, {\n resourceId: record.id,\n organizationId: record.organizationId,\n tenantId: record.tenantId,\n tagIds: before.tags,\n }),\n ], { transaction: true })\n\n const dataEngine = (ctx.container.resolve('dataEngine') as DataEngine)\n const customBefore = payload.customBefore ?? fallbackCustomBefore ?? undefined\n const customAfter = payload.customAfter ?? fallbackCustomAfter ?? undefined\n if (customBefore || customAfter) {\n const reset = buildCustomFieldResetMap(customBefore, customAfter)\n await setCustomFieldsIfAny({\n dataEngine,\n entityId: E.resources.resources_resource,\n recordId: record.id,\n tenantId: record.tenantId,\n organizationId: record.organizationId,\n values: reset,\n })\n }\n\n await emitCrudUndoSideEffects({\n dataEngine,\n action: 'updated',\n entity: record,\n identifiers: {\n id: record.id,\n organizationId: record.organizationId,\n tenantId: record.tenantId,\n },\n events: resourcesResourceCrudEvents,\n indexer: resourceCrudIndexer,\n })\n },\n}\n\nconst deleteResourceCommand: CommandHandler<{ id?: string }, { resourceId: string }> = {\n id: 'resources.resources.delete',\n async prepare(input, ctx) {\n const id = input?.id\n if (!id) throw new CrudHttpError(400, { error: 'Resource id is required.' })\n const em = (ctx.container.resolve('em') as EntityManager)\n const snapshot = await loadResourceSnapshot(em, id)\n if (!snapshot) return {}\n const custom = await loadResourceCustomSnapshot(em, snapshot)\n return { before: snapshot, customBefore: custom }\n },\n async execute(input, ctx) {\n const id = input?.id\n if (!id) throw new CrudHttpError(400, { error: 'Resource id is required.' })\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const record = await findOneWithDecryption(\n em,\n ResourcesResource,\n { id, deletedAt: null },\n undefined,\n { tenantId: ctx.auth?.tenantId ?? null, organizationId: ctx.auth?.orgId ?? null },\n )\n if (!record) throw new CrudHttpError(404, { error: 'Resources resource not found.' })\n ensureTenantScope(ctx, record.tenantId)\n ensureOrganizationScope(ctx, record.organizationId)\n record.deletedAt = new Date()\n record.updatedAt = new Date()\n await em.flush()\n const dataEngine = (ctx.container.resolve('dataEngine') as DataEngine)\n await emitCrudSideEffects({\n dataEngine,\n action: 'deleted',\n entity: record,\n identifiers: {\n id: record.id,\n organizationId: record.organizationId,\n tenantId: record.tenantId,\n },\n events: resourcesResourceCrudEvents,\n indexer: resourceCrudIndexer,\n })\n return { resourceId: record.id }\n },\n buildLog: async ({ snapshots }) => {\n const before = snapshots.before as ResourceSnapshot | undefined\n if (!before) return null\n const customBefore = (snapshots as { customBefore?: CustomFieldSnapshot | null }).customBefore ?? undefined\n const beforeWithCustom: ResourceSnapshot = customBefore\n ? { ...before, customFields: customBefore }\n : before\n const { translate } = await resolveTranslations()\n return {\n actionLabel: translate('resources.audit.resources.delete', 'Delete resource'),\n resourceKind: 'resources.resource',\n resourceId: before.id,\n tenantId: before.tenantId,\n organizationId: before.organizationId,\n snapshotBefore: beforeWithCustom,\n payload: {\n undo: {\n before: beforeWithCustom,\n customBefore: customBefore ?? null,\n } satisfies ResourceUndoPayload,\n },\n }\n },\n undo: async ({ logEntry, ctx }) => {\n const payload = extractUndoPayload<ResourceUndoPayload>(logEntry)\n const before = payload?.before\n if (!before) return\n const fallbackCustomBefore = (before as ResourceSnapshot).customFields ?? null\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n let record = await em.findOne(ResourcesResource, { id: before.id })\n await withAtomicFlush(em, [\n async () => {\n if (!record) {\n record = em.create(ResourcesResource, {\n id: before.id,\n tenantId: before.tenantId,\n organizationId: before.organizationId,\n name: before.name,\n description: before.description ?? null,\n resourceTypeId: before.resourceTypeId ?? null,\n capacity: before.capacity ?? null,\n capacityUnitValue: before.capacityUnitValue ?? null,\n capacityUnitName: before.capacityUnitName ?? null,\n capacityUnitColor: before.capacityUnitColor ?? null,\n capacityUnitIcon: before.capacityUnitIcon ?? null,\n appearanceIcon: before.appearanceIcon ?? null,\n appearanceColor: before.appearanceColor ?? null,\n isActive: before.isActive,\n availabilityRuleSetId: before.availabilityRuleSetId ?? null,\n customFieldsetCode: before.customFieldsetCode ?? null,\n deletedAt: null,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(record)\n } else {\n record.name = before.name\n record.description = before.description ?? null\n record.resourceTypeId = before.resourceTypeId ?? null\n record.capacity = before.capacity ?? null\n record.capacityUnitValue = before.capacityUnitValue ?? null\n record.capacityUnitName = before.capacityUnitName ?? null\n record.capacityUnitColor = before.capacityUnitColor ?? null\n record.capacityUnitIcon = before.capacityUnitIcon ?? null\n record.appearanceIcon = before.appearanceIcon ?? null\n record.appearanceColor = before.appearanceColor ?? null\n record.isActive = before.isActive\n record.availabilityRuleSetId = before.availabilityRuleSetId ?? null\n record.customFieldsetCode = before.customFieldsetCode ?? null\n record.deletedAt = null\n record.updatedAt = new Date()\n }\n await em.flush()\n },\n () => syncResourcesResourceTags(em, {\n resourceId: (record as ResourcesResource).id,\n organizationId: (record as ResourcesResource).organizationId,\n tenantId: (record as ResourcesResource).tenantId,\n tagIds: before.tags,\n }),\n ], { transaction: true })\n const resolvedRecord = record as ResourcesResource\n\n const dataEngine = (ctx.container.resolve('dataEngine') as DataEngine)\n const customBefore = payload.customBefore ?? fallbackCustomBefore ?? undefined\n if (customBefore) {\n const reset = buildCustomFieldResetMap(customBefore, undefined)\n await setCustomFieldsIfAny({\n dataEngine,\n entityId: E.resources.resources_resource,\n recordId: resolvedRecord.id,\n tenantId: resolvedRecord.tenantId,\n organizationId: resolvedRecord.organizationId,\n values: reset,\n })\n }\n\n await emitCrudUndoSideEffects({\n dataEngine,\n action: 'created',\n entity: resolvedRecord,\n identifiers: {\n id: resolvedRecord.id,\n organizationId: resolvedRecord.organizationId,\n tenantId: resolvedRecord.tenantId,\n },\n events: resourcesResourceCrudEvents,\n indexer: resourceCrudIndexer,\n })\n },\n}\n\nregisterCommand(createResourceCommand)\nregisterCommand(updateResourceCommand)\nregisterCommand(deleteResourceCommand)\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { apiCall, apiCallOrThrow } from "@open-mercato/ui/backend/utils/apiCall";
3
+ import { fetchAllDictionaryEntries } from "@open-mercato/core/modules/dictionaries/lib/fetchAllEntries";
3
4
  const RESOURCE_DICTIONARY_KEYS = {
4
5
  activityTypes: "resources.activity-types"
5
6
  };
@@ -30,10 +31,9 @@ async function loadResourceDictionary(kind) {
30
31
  const name = "Resource activity types";
31
32
  const dictionary = await ensureDictionary(key, name);
32
33
  if (!dictionary) return { dictionary: null, entries: [] };
33
- const entriesCall = await apiCall(`/api/dictionaries/${dictionary.id}/entries`);
34
+ const entriesCall = await fetchAllDictionaryEntries(dictionary.id);
34
35
  if (!entriesCall.ok) return { dictionary, entries: [] };
35
- const items = Array.isArray(entriesCall.result?.items) ? entriesCall.result?.items ?? [] : [];
36
- const entries = items.map((entry) => {
36
+ const entries = entriesCall.items.map((entry) => {
37
37
  if (!entry || typeof entry !== "object") return null;
38
38
  const record = entry;
39
39
  const value = typeof record.value === "string" ? record.value : null;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/modules/resources/components/detail/dictionaries.ts"],
4
- "sourcesContent": ["\"use client\"\n\nimport { apiCall, apiCallOrThrow } from '@open-mercato/ui/backend/utils/apiCall'\n\nexport type DictionaryEntryOption = {\n value: string\n label: string\n color: string | null\n icon: string | null\n}\n\ntype DictionarySummary = {\n id: string\n key: string\n name: string\n}\n\nconst RESOURCE_DICTIONARY_KEYS = {\n activityTypes: 'resources.activity-types',\n} as const\n\nasync function ensureDictionary(key: string, name: string): Promise<DictionarySummary | null> {\n const listCall = await apiCall<{ items?: DictionarySummary[] }>('/api/dictionaries')\n const items = Array.isArray(listCall.result?.items) ? listCall.result?.items ?? [] : []\n const existing = items.find((item) => item && item.key === key)\n if (existing) return existing\n if (!listCall.ok) return null\n const created = await apiCallOrThrow<DictionarySummary>(\n '/api/dictionaries',\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ key, name }),\n },\n )\n const result = created.result as DictionarySummary | undefined\n if (result && result.id && result.key) return result\n return null\n}\n\nexport async function loadResourceDictionaryEntries(\n kind: keyof typeof RESOURCE_DICTIONARY_KEYS,\n): Promise<DictionaryEntryOption[]> {\n const { entries } = await loadResourceDictionary(kind)\n return entries\n}\n\nexport async function loadResourceDictionary(\n kind: keyof typeof RESOURCE_DICTIONARY_KEYS,\n): Promise<{ dictionary: DictionarySummary | null; entries: DictionaryEntryOption[] }> {\n const key = RESOURCE_DICTIONARY_KEYS[kind]\n const name = 'Resource activity types'\n const dictionary = await ensureDictionary(key, name)\n if (!dictionary) return { dictionary: null, entries: [] }\n const entriesCall = await apiCall<{ items?: Record<string, unknown>[] }>(`/api/dictionaries/${dictionary.id}/entries`)\n if (!entriesCall.ok) return { dictionary, entries: [] }\n const items = Array.isArray(entriesCall.result?.items) ? entriesCall.result?.items ?? [] : []\n const entries = items\n .map((entry) => {\n if (!entry || typeof entry !== 'object') return null\n const record = entry as Record<string, unknown>\n const value = typeof record.value === 'string' ? record.value : null\n if (!value) return null\n const label = typeof record.label === 'string' && record.label.trim().length ? record.label : value\n const color = typeof record.color === 'string' ? record.color : null\n const icon = typeof record.icon === 'string' ? record.icon : null\n return { value, label, color, icon }\n })\n .filter((entry): entry is DictionaryEntryOption => !!entry)\n return { dictionary, entries }\n}\n\nexport async function createResourceDictionaryEntry(\n kind: keyof typeof RESOURCE_DICTIONARY_KEYS,\n input: { value: string; label?: string; color?: string | null; icon?: string | null },\n): Promise<DictionaryEntryOption | null> {\n const key = RESOURCE_DICTIONARY_KEYS[kind]\n const name = 'Resource activity types'\n const dictionary = await ensureDictionary(key, name)\n if (!dictionary) return null\n const response = await apiCallOrThrow<Record<string, unknown>>(\n `/api/dictionaries/${dictionary.id}/entries`,\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n value: input.value,\n label: input.label ?? undefined,\n color: input.color ?? undefined,\n icon: input.icon ?? undefined,\n }),\n },\n )\n const payload = response.result ?? {}\n const value = typeof payload.value === 'string' && payload.value.trim().length ? payload.value : input.value\n const label = typeof payload.label === 'string' && payload.label.trim().length ? payload.label : value\n const color = typeof payload.color === 'string' ? payload.color : input.color ?? null\n const icon = typeof payload.icon === 'string' ? payload.icon : input.icon ?? null\n return { value, label, color, icon }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["\"use client\"\n\nimport { apiCall, apiCallOrThrow } from '@open-mercato/ui/backend/utils/apiCall'\nimport { fetchAllDictionaryEntries } from '@open-mercato/core/modules/dictionaries/lib/fetchAllEntries'\n\nexport type DictionaryEntryOption = {\n value: string\n label: string\n color: string | null\n icon: string | null\n}\n\ntype DictionarySummary = {\n id: string\n key: string\n name: string\n}\n\nconst RESOURCE_DICTIONARY_KEYS = {\n activityTypes: 'resources.activity-types',\n} as const\n\nasync function ensureDictionary(key: string, name: string): Promise<DictionarySummary | null> {\n const listCall = await apiCall<{ items?: DictionarySummary[] }>('/api/dictionaries')\n const items = Array.isArray(listCall.result?.items) ? listCall.result?.items ?? [] : []\n const existing = items.find((item) => item && item.key === key)\n if (existing) return existing\n if (!listCall.ok) return null\n const created = await apiCallOrThrow<DictionarySummary>(\n '/api/dictionaries',\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ key, name }),\n },\n )\n const result = created.result as DictionarySummary | undefined\n if (result && result.id && result.key) return result\n return null\n}\n\nexport async function loadResourceDictionaryEntries(\n kind: keyof typeof RESOURCE_DICTIONARY_KEYS,\n): Promise<DictionaryEntryOption[]> {\n const { entries } = await loadResourceDictionary(kind)\n return entries\n}\n\nexport async function loadResourceDictionary(\n kind: keyof typeof RESOURCE_DICTIONARY_KEYS,\n): Promise<{ dictionary: DictionarySummary | null; entries: DictionaryEntryOption[] }> {\n const key = RESOURCE_DICTIONARY_KEYS[kind]\n const name = 'Resource activity types'\n const dictionary = await ensureDictionary(key, name)\n if (!dictionary) return { dictionary: null, entries: [] }\n const entriesCall = await fetchAllDictionaryEntries(dictionary.id)\n if (!entriesCall.ok) return { dictionary, entries: [] }\n const entries = entriesCall.items\n .map((entry) => {\n if (!entry || typeof entry !== 'object') return null\n const record = entry as Record<string, unknown>\n const value = typeof record.value === 'string' ? record.value : null\n if (!value) return null\n const label = typeof record.label === 'string' && record.label.trim().length ? record.label : value\n const color = typeof record.color === 'string' ? record.color : null\n const icon = typeof record.icon === 'string' ? record.icon : null\n return { value, label, color, icon }\n })\n .filter((entry): entry is DictionaryEntryOption => !!entry)\n return { dictionary, entries }\n}\n\nexport async function createResourceDictionaryEntry(\n kind: keyof typeof RESOURCE_DICTIONARY_KEYS,\n input: { value: string; label?: string; color?: string | null; icon?: string | null },\n): Promise<DictionaryEntryOption | null> {\n const key = RESOURCE_DICTIONARY_KEYS[kind]\n const name = 'Resource activity types'\n const dictionary = await ensureDictionary(key, name)\n if (!dictionary) return null\n const response = await apiCallOrThrow<Record<string, unknown>>(\n `/api/dictionaries/${dictionary.id}/entries`,\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n value: input.value,\n label: input.label ?? undefined,\n color: input.color ?? undefined,\n icon: input.icon ?? undefined,\n }),\n },\n )\n const payload = response.result ?? {}\n const value = typeof payload.value === 'string' && payload.value.trim().length ? payload.value : input.value\n const label = typeof payload.label === 'string' && payload.label.trim().length ? payload.label : value\n const color = typeof payload.color === 'string' ? payload.color : input.color ?? null\n const icon = typeof payload.icon === 'string' ? payload.icon : input.icon ?? null\n return { value, label, color, icon }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -102,6 +102,9 @@ __decorateClass([
102
102
  __decorateClass([
103
103
  Property({ name: "availability_rule_set_id", type: "uuid", nullable: true })
104
104
  ], ResourcesResource.prototype, "availabilityRuleSetId", 2);
105
+ __decorateClass([
106
+ Property({ name: "custom_fieldset_code", type: "text", nullable: true })
107
+ ], ResourcesResource.prototype, "customFieldsetCode", 2);
105
108
  __decorateClass([
106
109
  Property({ name: "created_at", type: Date, onCreate: () => /* @__PURE__ */ new Date() })
107
110
  ], ResourcesResource.prototype, "createdAt", 2);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/modules/resources/data/entities.ts"],
4
- "sourcesContent": ["import { Collection } from '@mikro-orm/core'\nimport { Entity, Index, ManyToOne, OneToMany, PrimaryKey, Property, Unique } from '@mikro-orm/decorators/legacy'\n\n@Entity({ tableName: 'resources_resource_types' })\n@Index({ name: 'resources_resource_types_tenant_org_idx', properties: ['tenantId', 'organizationId'] })\nexport class ResourcesResourceType {\n @PrimaryKey({ type: 'uuid', defaultRaw: 'gen_random_uuid()' })\n id!: string\n\n @Property({ name: 'tenant_id', type: 'uuid' })\n tenantId!: string\n\n @Property({ name: 'organization_id', type: 'uuid' })\n organizationId!: string\n\n @Property({ type: 'text' })\n name!: string\n\n @Property({ type: 'text', nullable: true })\n description?: string | null\n\n @Property({ name: 'appearance_icon', type: 'text', nullable: true })\n appearanceIcon?: string | null\n\n @Property({ name: 'appearance_color', type: 'text', nullable: true })\n appearanceColor?: string | null\n\n @Property({ name: 'created_at', type: Date, onCreate: () => new Date() })\n createdAt: Date = new Date()\n\n @Property({ name: 'updated_at', type: Date, onUpdate: () => new Date() })\n updatedAt: Date = new Date()\n\n @Property({ name: 'deleted_at', type: Date, nullable: true })\n deletedAt?: Date | null\n}\n\n@Entity({ tableName: 'resources_resources' })\n@Index({ name: 'resources_resources_tenant_org_idx', properties: ['tenantId', 'organizationId'] })\nexport class ResourcesResource {\n @PrimaryKey({ type: 'uuid', defaultRaw: 'gen_random_uuid()' })\n id!: string\n\n @Property({ name: 'tenant_id', type: 'uuid' })\n tenantId!: string\n\n @Property({ name: 'organization_id', type: 'uuid' })\n organizationId!: string\n\n @Property({ type: 'text' })\n name!: string\n\n @Property({ type: 'text', nullable: true })\n description?: string | null\n\n @Property({ name: 'resource_type_id', type: 'uuid', nullable: true })\n resourceTypeId?: string | null\n\n @Property({ type: 'int', nullable: true })\n capacity?: number | null\n\n @Property({ name: 'capacity_unit_value', type: 'text', nullable: true })\n capacityUnitValue?: string | null\n\n @Property({ name: 'capacity_unit_name', type: 'text', nullable: true })\n capacityUnitName?: string | null\n\n @Property({ name: 'capacity_unit_color', type: 'text', nullable: true })\n capacityUnitColor?: string | null\n\n @Property({ name: 'capacity_unit_icon', type: 'text', nullable: true })\n capacityUnitIcon?: string | null\n\n @Property({ name: 'appearance_icon', type: 'text', nullable: true })\n appearanceIcon?: string | null\n\n @Property({ name: 'appearance_color', type: 'text', nullable: true })\n appearanceColor?: string | null\n\n @Property({ name: 'is_active', type: 'boolean', default: true })\n isActive: boolean = true\n\n @Property({ name: 'availability_rule_set_id', type: 'uuid', nullable: true })\n availabilityRuleSetId?: string | null\n\n @Property({ name: 'created_at', type: Date, onCreate: () => new Date() })\n createdAt: Date = new Date()\n\n @Property({ name: 'updated_at', type: Date, onUpdate: () => new Date() })\n updatedAt: Date = new Date()\n\n @Property({ name: 'deleted_at', type: Date, nullable: true })\n deletedAt?: Date | null\n}\n\n@Entity({ tableName: 'resources_resource_comments' })\n@Index({ name: 'resources_resource_comments_resource_idx', properties: ['resource'] })\n@Index({ name: 'resources_resource_comments_tenant_org_idx', properties: ['tenantId', 'organizationId'] })\nexport class ResourcesResourceComment {\n @PrimaryKey({ type: 'uuid', defaultRaw: 'gen_random_uuid()' })\n id!: string\n\n @Property({ name: 'tenant_id', type: 'uuid' })\n tenantId!: string\n\n @Property({ name: 'organization_id', type: 'uuid' })\n organizationId!: string\n\n @Property({ name: 'body', type: 'text' })\n body!: string\n\n @Property({ name: 'author_user_id', type: 'uuid', nullable: true })\n authorUserId?: string | null\n\n @Property({ name: 'appearance_icon', type: 'text', nullable: true })\n appearanceIcon?: string | null\n\n @Property({ name: 'appearance_color', type: 'text', nullable: true })\n appearanceColor?: string | null\n\n @Property({ name: 'created_at', type: Date, onCreate: () => new Date() })\n createdAt: Date = new Date()\n\n @Property({ name: 'updated_at', type: Date, onUpdate: () => new Date() })\n updatedAt: Date = new Date()\n\n @Property({ name: 'deleted_at', type: Date, nullable: true })\n deletedAt?: Date | null\n\n @ManyToOne(() => ResourcesResource, { fieldName: 'resource_id' })\n resource!: ResourcesResource\n}\n\n@Entity({ tableName: 'resources_resource_activities' })\n@Index({ name: 'resources_resource_activities_resource_idx', properties: ['resource'] })\n@Index({ name: 'resources_resource_activities_tenant_org_idx', properties: ['tenantId', 'organizationId'] })\n@Index({ name: 'resources_resource_activities_resource_occurred_created_idx', properties: ['resource', 'occurredAt', 'createdAt'] })\nexport class ResourcesResourceActivity {\n @PrimaryKey({ type: 'uuid', defaultRaw: 'gen_random_uuid()' })\n id!: string\n\n @Property({ name: 'tenant_id', type: 'uuid' })\n tenantId!: string\n\n @Property({ name: 'organization_id', type: 'uuid' })\n organizationId!: string\n\n @Property({ name: 'activity_type', type: 'text' })\n activityType!: string\n\n @Property({ name: 'subject', type: 'text', nullable: true })\n subject?: string | null\n\n @Property({ name: 'body', type: 'text', nullable: true })\n body?: string | null\n\n @Property({ name: 'occurred_at', type: Date, nullable: true })\n occurredAt?: Date | null\n\n @Property({ name: 'author_user_id', type: 'uuid', nullable: true })\n authorUserId?: string | null\n\n @Property({ name: 'appearance_icon', type: 'text', nullable: true })\n appearanceIcon?: string | null\n\n @Property({ name: 'appearance_color', type: 'text', nullable: true })\n appearanceColor?: string | null\n\n @Property({ name: 'created_at', type: Date, onCreate: () => new Date() })\n createdAt: Date = new Date()\n\n @Property({ name: 'updated_at', type: Date, onUpdate: () => new Date() })\n updatedAt: Date = new Date()\n\n @ManyToOne(() => ResourcesResource, { fieldName: 'resource_id' })\n resource!: ResourcesResource\n}\n\n@Entity({ tableName: 'resources_resource_tags' })\n@Index({ name: 'resources_resource_tags_scope_idx', properties: ['organizationId', 'tenantId'] })\n@Unique({ name: 'resources_resource_tags_slug_unique', properties: ['organizationId', 'tenantId', 'slug'] })\nexport class ResourcesResourceTag {\n @PrimaryKey({ type: 'uuid', defaultRaw: 'gen_random_uuid()' })\n id!: string\n\n @Property({ name: 'organization_id', type: 'uuid' })\n organizationId!: string\n\n @Property({ name: 'tenant_id', type: 'uuid' })\n tenantId!: string\n\n @Property({ type: 'text' })\n slug!: string\n\n @Property({ type: 'text' })\n label!: string\n\n @Property({ type: 'text', nullable: true })\n color?: string | null\n\n @Property({ type: 'text', nullable: true })\n description?: string | null\n\n @Property({ name: 'created_at', type: Date, onCreate: () => new Date() })\n createdAt: Date = new Date()\n\n @Property({ name: 'updated_at', type: Date, onUpdate: () => new Date() })\n updatedAt: Date = new Date()\n\n @OneToMany(() => ResourcesResourceTagAssignment, (assignment) => assignment.tag)\n assignments = new Collection<ResourcesResourceTagAssignment>(this)\n}\n\n@Entity({ tableName: 'resources_resource_tag_assignments' })\n@Index({ name: 'resources_resource_tag_assignments_scope_idx', properties: ['organizationId', 'tenantId'] })\n@Unique({\n name: 'resources_resource_tag_assignments_unique',\n properties: ['tag', 'resource'],\n})\nexport class ResourcesResourceTagAssignment {\n @PrimaryKey({ type: 'uuid', defaultRaw: 'gen_random_uuid()' })\n id!: string\n\n @Property({ name: 'organization_id', type: 'uuid' })\n organizationId!: string\n\n @Property({ name: 'tenant_id', type: 'uuid' })\n tenantId!: string\n\n @ManyToOne(() => ResourcesResourceTag, { fieldName: 'tag_id' })\n tag!: ResourcesResourceTag\n\n @ManyToOne(() => ResourcesResource, { fieldName: 'resource_id' })\n resource!: ResourcesResource\n\n @Property({ name: 'created_at', type: Date, onCreate: () => new Date() })\n createdAt: Date = new Date()\n\n @Property({ name: 'updated_at', type: Date, onUpdate: () => new Date() })\n updatedAt: Date = new Date()\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Collection } from '@mikro-orm/core'\nimport { Entity, Index, ManyToOne, OneToMany, PrimaryKey, Property, Unique } from '@mikro-orm/decorators/legacy'\n\n@Entity({ tableName: 'resources_resource_types' })\n@Index({ name: 'resources_resource_types_tenant_org_idx', properties: ['tenantId', 'organizationId'] })\nexport class ResourcesResourceType {\n @PrimaryKey({ type: 'uuid', defaultRaw: 'gen_random_uuid()' })\n id!: string\n\n @Property({ name: 'tenant_id', type: 'uuid' })\n tenantId!: string\n\n @Property({ name: 'organization_id', type: 'uuid' })\n organizationId!: string\n\n @Property({ type: 'text' })\n name!: string\n\n @Property({ type: 'text', nullable: true })\n description?: string | null\n\n @Property({ name: 'appearance_icon', type: 'text', nullable: true })\n appearanceIcon?: string | null\n\n @Property({ name: 'appearance_color', type: 'text', nullable: true })\n appearanceColor?: string | null\n\n @Property({ name: 'created_at', type: Date, onCreate: () => new Date() })\n createdAt: Date = new Date()\n\n @Property({ name: 'updated_at', type: Date, onUpdate: () => new Date() })\n updatedAt: Date = new Date()\n\n @Property({ name: 'deleted_at', type: Date, nullable: true })\n deletedAt?: Date | null\n}\n\n@Entity({ tableName: 'resources_resources' })\n@Index({ name: 'resources_resources_tenant_org_idx', properties: ['tenantId', 'organizationId'] })\nexport class ResourcesResource {\n @PrimaryKey({ type: 'uuid', defaultRaw: 'gen_random_uuid()' })\n id!: string\n\n @Property({ name: 'tenant_id', type: 'uuid' })\n tenantId!: string\n\n @Property({ name: 'organization_id', type: 'uuid' })\n organizationId!: string\n\n @Property({ type: 'text' })\n name!: string\n\n @Property({ type: 'text', nullable: true })\n description?: string | null\n\n @Property({ name: 'resource_type_id', type: 'uuid', nullable: true })\n resourceTypeId?: string | null\n\n @Property({ type: 'int', nullable: true })\n capacity?: number | null\n\n @Property({ name: 'capacity_unit_value', type: 'text', nullable: true })\n capacityUnitValue?: string | null\n\n @Property({ name: 'capacity_unit_name', type: 'text', nullable: true })\n capacityUnitName?: string | null\n\n @Property({ name: 'capacity_unit_color', type: 'text', nullable: true })\n capacityUnitColor?: string | null\n\n @Property({ name: 'capacity_unit_icon', type: 'text', nullable: true })\n capacityUnitIcon?: string | null\n\n @Property({ name: 'appearance_icon', type: 'text', nullable: true })\n appearanceIcon?: string | null\n\n @Property({ name: 'appearance_color', type: 'text', nullable: true })\n appearanceColor?: string | null\n\n @Property({ name: 'is_active', type: 'boolean', default: true })\n isActive: boolean = true\n\n @Property({ name: 'availability_rule_set_id', type: 'uuid', nullable: true })\n availabilityRuleSetId?: string | null\n\n @Property({ name: 'custom_fieldset_code', type: 'text', nullable: true })\n customFieldsetCode?: string | null\n\n @Property({ name: 'created_at', type: Date, onCreate: () => new Date() })\n createdAt: Date = new Date()\n\n @Property({ name: 'updated_at', type: Date, onUpdate: () => new Date() })\n updatedAt: Date = new Date()\n\n @Property({ name: 'deleted_at', type: Date, nullable: true })\n deletedAt?: Date | null\n}\n\n@Entity({ tableName: 'resources_resource_comments' })\n@Index({ name: 'resources_resource_comments_resource_idx', properties: ['resource'] })\n@Index({ name: 'resources_resource_comments_tenant_org_idx', properties: ['tenantId', 'organizationId'] })\nexport class ResourcesResourceComment {\n @PrimaryKey({ type: 'uuid', defaultRaw: 'gen_random_uuid()' })\n id!: string\n\n @Property({ name: 'tenant_id', type: 'uuid' })\n tenantId!: string\n\n @Property({ name: 'organization_id', type: 'uuid' })\n organizationId!: string\n\n @Property({ name: 'body', type: 'text' })\n body!: string\n\n @Property({ name: 'author_user_id', type: 'uuid', nullable: true })\n authorUserId?: string | null\n\n @Property({ name: 'appearance_icon', type: 'text', nullable: true })\n appearanceIcon?: string | null\n\n @Property({ name: 'appearance_color', type: 'text', nullable: true })\n appearanceColor?: string | null\n\n @Property({ name: 'created_at', type: Date, onCreate: () => new Date() })\n createdAt: Date = new Date()\n\n @Property({ name: 'updated_at', type: Date, onUpdate: () => new Date() })\n updatedAt: Date = new Date()\n\n @Property({ name: 'deleted_at', type: Date, nullable: true })\n deletedAt?: Date | null\n\n @ManyToOne(() => ResourcesResource, { fieldName: 'resource_id' })\n resource!: ResourcesResource\n}\n\n@Entity({ tableName: 'resources_resource_activities' })\n@Index({ name: 'resources_resource_activities_resource_idx', properties: ['resource'] })\n@Index({ name: 'resources_resource_activities_tenant_org_idx', properties: ['tenantId', 'organizationId'] })\n@Index({ name: 'resources_resource_activities_resource_occurred_created_idx', properties: ['resource', 'occurredAt', 'createdAt'] })\nexport class ResourcesResourceActivity {\n @PrimaryKey({ type: 'uuid', defaultRaw: 'gen_random_uuid()' })\n id!: string\n\n @Property({ name: 'tenant_id', type: 'uuid' })\n tenantId!: string\n\n @Property({ name: 'organization_id', type: 'uuid' })\n organizationId!: string\n\n @Property({ name: 'activity_type', type: 'text' })\n activityType!: string\n\n @Property({ name: 'subject', type: 'text', nullable: true })\n subject?: string | null\n\n @Property({ name: 'body', type: 'text', nullable: true })\n body?: string | null\n\n @Property({ name: 'occurred_at', type: Date, nullable: true })\n occurredAt?: Date | null\n\n @Property({ name: 'author_user_id', type: 'uuid', nullable: true })\n authorUserId?: string | null\n\n @Property({ name: 'appearance_icon', type: 'text', nullable: true })\n appearanceIcon?: string | null\n\n @Property({ name: 'appearance_color', type: 'text', nullable: true })\n appearanceColor?: string | null\n\n @Property({ name: 'created_at', type: Date, onCreate: () => new Date() })\n createdAt: Date = new Date()\n\n @Property({ name: 'updated_at', type: Date, onUpdate: () => new Date() })\n updatedAt: Date = new Date()\n\n @ManyToOne(() => ResourcesResource, { fieldName: 'resource_id' })\n resource!: ResourcesResource\n}\n\n@Entity({ tableName: 'resources_resource_tags' })\n@Index({ name: 'resources_resource_tags_scope_idx', properties: ['organizationId', 'tenantId'] })\n@Unique({ name: 'resources_resource_tags_slug_unique', properties: ['organizationId', 'tenantId', 'slug'] })\nexport class ResourcesResourceTag {\n @PrimaryKey({ type: 'uuid', defaultRaw: 'gen_random_uuid()' })\n id!: string\n\n @Property({ name: 'organization_id', type: 'uuid' })\n organizationId!: string\n\n @Property({ name: 'tenant_id', type: 'uuid' })\n tenantId!: string\n\n @Property({ type: 'text' })\n slug!: string\n\n @Property({ type: 'text' })\n label!: string\n\n @Property({ type: 'text', nullable: true })\n color?: string | null\n\n @Property({ type: 'text', nullable: true })\n description?: string | null\n\n @Property({ name: 'created_at', type: Date, onCreate: () => new Date() })\n createdAt: Date = new Date()\n\n @Property({ name: 'updated_at', type: Date, onUpdate: () => new Date() })\n updatedAt: Date = new Date()\n\n @OneToMany(() => ResourcesResourceTagAssignment, (assignment) => assignment.tag)\n assignments = new Collection<ResourcesResourceTagAssignment>(this)\n}\n\n@Entity({ tableName: 'resources_resource_tag_assignments' })\n@Index({ name: 'resources_resource_tag_assignments_scope_idx', properties: ['organizationId', 'tenantId'] })\n@Unique({\n name: 'resources_resource_tag_assignments_unique',\n properties: ['tag', 'resource'],\n})\nexport class ResourcesResourceTagAssignment {\n @PrimaryKey({ type: 'uuid', defaultRaw: 'gen_random_uuid()' })\n id!: string\n\n @Property({ name: 'organization_id', type: 'uuid' })\n organizationId!: string\n\n @Property({ name: 'tenant_id', type: 'uuid' })\n tenantId!: string\n\n @ManyToOne(() => ResourcesResourceTag, { fieldName: 'tag_id' })\n tag!: ResourcesResourceTag\n\n @ManyToOne(() => ResourcesResource, { fieldName: 'resource_id' })\n resource!: ResourcesResource\n\n @Property({ name: 'created_at', type: Date, onCreate: () => new Date() })\n createdAt: Date = new Date()\n\n @Property({ name: 'updated_at', type: Date, onUpdate: () => new Date() })\n updatedAt: Date = new Date()\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,6 @@
1
1
  import { z } from "zod";
2
+ import { fieldsetCodeRegex } from "@open-mercato/shared/modules/entities/validators";
3
+ const customFieldsetCodeSchema = z.string().trim().regex(fieldsetCodeRegex).max(100);
2
4
  const scopedCreateFields = {
3
5
  tenantId: z.string().uuid(),
4
6
  organizationId: z.string().uuid()
@@ -31,7 +33,8 @@ const resourcesResourceCreateSchema = z.object({
31
33
  appearanceIcon: z.string().trim().max(100).optional().nullable(),
32
34
  appearanceColor: z.string().trim().regex(/^#([0-9a-fA-F]{6})$/).optional().nullable(),
33
35
  isActive: z.boolean().optional(),
34
- availabilityRuleSetId: z.string().uuid().optional().nullable()
36
+ availabilityRuleSetId: z.string().uuid().optional().nullable(),
37
+ customFieldsetCode: customFieldsetCodeSchema.optional().nullable()
35
38
  });
36
39
  const resourcesResourceUpdateSchema = z.object({
37
40
  ...scopedUpdateFields,
@@ -44,7 +47,8 @@ const resourcesResourceUpdateSchema = z.object({
44
47
  appearanceIcon: z.string().trim().max(100).optional().nullable(),
45
48
  appearanceColor: z.string().trim().regex(/^#([0-9a-fA-F]{6})$/).optional().nullable(),
46
49
  isActive: z.boolean().optional(),
47
- availabilityRuleSetId: z.string().uuid().optional().nullable()
50
+ availabilityRuleSetId: z.string().uuid().optional().nullable(),
51
+ customFieldsetCode: customFieldsetCodeSchema.optional().nullable()
48
52
  });
49
53
  const resourcesResourceTagCreateSchema = z.object({
50
54
  ...scopedCreateFields,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/modules/resources/data/validators.ts"],
4
- "sourcesContent": ["import { z } from 'zod'\n\nconst scopedCreateFields = {\n tenantId: z.string().uuid(),\n organizationId: z.string().uuid(),\n}\n\nconst scopedUpdateFields = {\n id: z.string().uuid(),\n}\n\nexport const resourcesResourceTypeCreateSchema = z.object({\n ...scopedCreateFields,\n name: z.string().min(1),\n description: z.string().optional().nullable(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n})\n\nexport const resourcesResourceTypeUpdateSchema = z.object({\n ...scopedUpdateFields,\n name: z.string().min(1).optional(),\n description: z.string().optional().nullable(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n})\n\nexport const resourcesResourceCreateSchema = z.object({\n ...scopedCreateFields,\n name: z.string().min(1),\n description: z.string().optional().nullable(),\n resourceTypeId: z.string().uuid().optional().nullable(),\n capacity: z.coerce.number().int().positive().optional().nullable(),\n capacityUnitValue: z.string().min(1).optional().nullable(),\n tags: z.array(z.string().uuid()).optional(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n isActive: z.boolean().optional(),\n availabilityRuleSetId: z.string().uuid().optional().nullable(),\n})\n\nexport const resourcesResourceUpdateSchema = z.object({\n ...scopedUpdateFields,\n name: z.string().min(1).optional(),\n description: z.string().optional().nullable(),\n resourceTypeId: z.string().uuid().optional().nullable(),\n capacity: z.coerce.number().int().positive().optional().nullable(),\n capacityUnitValue: z.string().min(1).optional().nullable(),\n tags: z.array(z.string().uuid()).optional(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n isActive: z.boolean().optional(),\n availabilityRuleSetId: z.string().uuid().optional().nullable(),\n})\n\nexport const resourcesResourceTagCreateSchema = z.object({\n ...scopedCreateFields,\n slug: z.string().min(1).optional(),\n label: z.string().min(1),\n color: z.string().trim().max(50).optional().nullable(),\n description: z.string().optional().nullable(),\n})\n\nexport const resourcesResourceTagUpdateSchema = z.object({\n ...scopedUpdateFields,\n slug: z.string().min(1).optional(),\n label: z.string().min(1).optional(),\n color: z.string().trim().max(50).optional().nullable(),\n description: z.string().optional().nullable(),\n})\n\nexport const resourcesResourceTagAssignmentSchema = z.object({\n ...scopedCreateFields,\n tagId: z.string().uuid(),\n resourceId: z.string().uuid(),\n})\n\nexport const resourcesResourceCommentCreateSchema = z.object({\n ...scopedCreateFields,\n entityId: z.string().uuid(),\n body: z.string().min(1).max(8000),\n authorUserId: z.string().uuid().optional(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n})\n\nexport const resourcesResourceCommentUpdateSchema = z\n .object({\n id: z.string().uuid(),\n })\n .merge(resourcesResourceCommentCreateSchema.partial())\n\nexport const resourcesResourceActivityCreateSchema = z.object({\n ...scopedCreateFields,\n entityId: z.string().uuid(),\n activityType: z.string().min(1).max(100),\n subject: z.string().max(200).optional(),\n body: z.string().max(8000).optional(),\n occurredAt: z.coerce.date().optional(),\n authorUserId: z.string().uuid().optional(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n})\n\nexport const resourcesResourceActivityUpdateSchema = z\n .object({\n id: z.string().uuid(),\n })\n .merge(resourcesResourceActivityCreateSchema.partial())\n\nexport type ResourcesResourceTypeCreateInput = z.infer<typeof resourcesResourceTypeCreateSchema>\nexport type ResourcesResourceTypeUpdateInput = z.infer<typeof resourcesResourceTypeUpdateSchema>\nexport type ResourcesResourceCreateInput = z.infer<typeof resourcesResourceCreateSchema>\nexport type ResourcesResourceUpdateInput = z.infer<typeof resourcesResourceUpdateSchema>\nexport type ResourcesResourceTagCreateInput = z.infer<typeof resourcesResourceTagCreateSchema>\nexport type ResourcesResourceTagUpdateInput = z.infer<typeof resourcesResourceTagUpdateSchema>\nexport type ResourcesResourceTagAssignmentInput = z.infer<typeof resourcesResourceTagAssignmentSchema>\nexport type ResourcesResourceCommentCreateInput = z.infer<typeof resourcesResourceCommentCreateSchema>\nexport type ResourcesResourceCommentUpdateInput = z.infer<typeof resourcesResourceCommentUpdateSchema>\nexport type ResourcesResourceActivityCreateInput = z.infer<typeof resourcesResourceActivityCreateSchema>\nexport type ResourcesResourceActivityUpdateInput = z.infer<typeof resourcesResourceActivityUpdateSchema>\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { z } from 'zod'\nimport { fieldsetCodeRegex } from '@open-mercato/shared/modules/entities/validators'\n\nconst customFieldsetCodeSchema = z.string().trim().regex(fieldsetCodeRegex).max(100)\n\nconst scopedCreateFields = {\n tenantId: z.string().uuid(),\n organizationId: z.string().uuid(),\n}\n\nconst scopedUpdateFields = {\n id: z.string().uuid(),\n}\n\nexport const resourcesResourceTypeCreateSchema = z.object({\n ...scopedCreateFields,\n name: z.string().min(1),\n description: z.string().optional().nullable(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n})\n\nexport const resourcesResourceTypeUpdateSchema = z.object({\n ...scopedUpdateFields,\n name: z.string().min(1).optional(),\n description: z.string().optional().nullable(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n})\n\nexport const resourcesResourceCreateSchema = z.object({\n ...scopedCreateFields,\n name: z.string().min(1),\n description: z.string().optional().nullable(),\n resourceTypeId: z.string().uuid().optional().nullable(),\n capacity: z.coerce.number().int().positive().optional().nullable(),\n capacityUnitValue: z.string().min(1).optional().nullable(),\n tags: z.array(z.string().uuid()).optional(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n isActive: z.boolean().optional(),\n availabilityRuleSetId: z.string().uuid().optional().nullable(),\n customFieldsetCode: customFieldsetCodeSchema.optional().nullable(),\n})\n\nexport const resourcesResourceUpdateSchema = z.object({\n ...scopedUpdateFields,\n name: z.string().min(1).optional(),\n description: z.string().optional().nullable(),\n resourceTypeId: z.string().uuid().optional().nullable(),\n capacity: z.coerce.number().int().positive().optional().nullable(),\n capacityUnitValue: z.string().min(1).optional().nullable(),\n tags: z.array(z.string().uuid()).optional(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n isActive: z.boolean().optional(),\n availabilityRuleSetId: z.string().uuid().optional().nullable(),\n customFieldsetCode: customFieldsetCodeSchema.optional().nullable(),\n})\n\nexport const resourcesResourceTagCreateSchema = z.object({\n ...scopedCreateFields,\n slug: z.string().min(1).optional(),\n label: z.string().min(1),\n color: z.string().trim().max(50).optional().nullable(),\n description: z.string().optional().nullable(),\n})\n\nexport const resourcesResourceTagUpdateSchema = z.object({\n ...scopedUpdateFields,\n slug: z.string().min(1).optional(),\n label: z.string().min(1).optional(),\n color: z.string().trim().max(50).optional().nullable(),\n description: z.string().optional().nullable(),\n})\n\nexport const resourcesResourceTagAssignmentSchema = z.object({\n ...scopedCreateFields,\n tagId: z.string().uuid(),\n resourceId: z.string().uuid(),\n})\n\nexport const resourcesResourceCommentCreateSchema = z.object({\n ...scopedCreateFields,\n entityId: z.string().uuid(),\n body: z.string().min(1).max(8000),\n authorUserId: z.string().uuid().optional(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n})\n\nexport const resourcesResourceCommentUpdateSchema = z\n .object({\n id: z.string().uuid(),\n })\n .merge(resourcesResourceCommentCreateSchema.partial())\n\nexport const resourcesResourceActivityCreateSchema = z.object({\n ...scopedCreateFields,\n entityId: z.string().uuid(),\n activityType: z.string().min(1).max(100),\n subject: z.string().max(200).optional(),\n body: z.string().max(8000).optional(),\n occurredAt: z.coerce.date().optional(),\n authorUserId: z.string().uuid().optional(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n})\n\nexport const resourcesResourceActivityUpdateSchema = z\n .object({\n id: z.string().uuid(),\n })\n .merge(resourcesResourceActivityCreateSchema.partial())\n\nexport type ResourcesResourceTypeCreateInput = z.infer<typeof resourcesResourceTypeCreateSchema>\nexport type ResourcesResourceTypeUpdateInput = z.infer<typeof resourcesResourceTypeUpdateSchema>\nexport type ResourcesResourceCreateInput = z.infer<typeof resourcesResourceCreateSchema>\nexport type ResourcesResourceUpdateInput = z.infer<typeof resourcesResourceUpdateSchema>\nexport type ResourcesResourceTagCreateInput = z.infer<typeof resourcesResourceTagCreateSchema>\nexport type ResourcesResourceTagUpdateInput = z.infer<typeof resourcesResourceTagUpdateSchema>\nexport type ResourcesResourceTagAssignmentInput = z.infer<typeof resourcesResourceTagAssignmentSchema>\nexport type ResourcesResourceCommentCreateInput = z.infer<typeof resourcesResourceCommentCreateSchema>\nexport type ResourcesResourceCommentUpdateInput = z.infer<typeof resourcesResourceCommentUpdateSchema>\nexport type ResourcesResourceActivityCreateInput = z.infer<typeof resourcesResourceActivityCreateSchema>\nexport type ResourcesResourceActivityUpdateInput = z.infer<typeof resourcesResourceActivityUpdateSchema>\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -597,25 +597,32 @@ async function seedResourcesResourceExamples(em, scope) {
597
597
  const resourceByName = new Map(existingResources.map((resource) => [resource.name.toLowerCase(), resource]));
598
598
  const resourceByKey = /* @__PURE__ */ new Map();
599
599
  for (const seed of RESOURCE_SEEDS) {
600
+ const seedType = seed.typeKey ? typeByKey.get(seed.typeKey) ?? null : null;
601
+ const seedFieldsetCode = resolveResourcesResourceFieldsetCode(seedType?.name ?? seed.name);
600
602
  const existing = resourceByName.get(seed.name.toLowerCase());
601
603
  if (existing) {
602
- if (!existing.resourceTypeId && seed.typeKey) {
603
- const typeId = typeByKey.get(seed.typeKey)?.id ?? null;
604
- if (typeId) {
605
- existing.resourceTypeId = typeId;
606
- existing.updatedAt = now;
607
- em.persist(existing);
608
- }
604
+ let touched = false;
605
+ if (!existing.resourceTypeId && seedType?.id) {
606
+ existing.resourceTypeId = seedType.id;
607
+ touched = true;
608
+ }
609
+ if (!existing.customFieldsetCode) {
610
+ existing.customFieldsetCode = seedFieldsetCode;
611
+ touched = true;
612
+ }
613
+ if (touched) {
614
+ existing.updatedAt = now;
615
+ em.persist(existing);
609
616
  }
610
617
  resourceByKey.set(seed.key, existing);
611
618
  continue;
612
619
  }
613
- const resourceTypeId = seed.typeKey ? typeByKey.get(seed.typeKey)?.id ?? null : null;
614
620
  const resource = em.create(ResourcesResource, {
615
621
  tenantId: scope.tenantId,
616
622
  organizationId: scope.organizationId,
617
623
  name: seed.name,
618
- resourceTypeId,
624
+ resourceTypeId: seedType?.id ?? null,
625
+ customFieldsetCode: seedFieldsetCode,
619
626
  isActive: true,
620
627
  createdAt: now,
621
628
  updatedAt: now