@open-mercato/core 0.6.7-develop.6553.1.2ec7246e04 → 0.6.7-develop.6566.1.15385fa179
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/dist/modules/attachments/api/partitions/route.js.map +1 -1
- package/dist/modules/attachments/lib/reconcileOrganization.js +9 -7
- package/dist/modules/attachments/lib/reconcileOrganization.js.map +2 -2
- package/dist/modules/catalog/api/products/route.js.map +1 -1
- package/dist/modules/customers/api/companies/[id]/people/route.js +2 -2
- package/dist/modules/customers/api/companies/[id]/people/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/companies/route.js +2 -2
- package/dist/modules/customers/api/deals/[id]/companies/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/people/route.js +2 -2
- package/dist/modules/customers/api/deals/[id]/people/route.js.map +2 -2
- package/dist/modules/customers/api/dictionaries/[kind]/[id]/route.js +4 -4
- package/dist/modules/customers/api/dictionaries/[kind]/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/entity-roles-factory.js +3 -3
- package/dist/modules/customers/api/entity-roles-factory.js.map +2 -2
- package/dist/modules/customers/api/labels/assign/route.js +2 -2
- package/dist/modules/customers/api/labels/assign/route.js.map +2 -2
- package/dist/modules/customers/api/labels/unassign/route.js +2 -2
- package/dist/modules/customers/api/labels/unassign/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js +3 -7
- package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/context.js +3 -3
- package/dist/modules/customers/api/people/[id]/companies/context.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js +2 -2
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js.map +2 -2
- package/dist/modules/customers/api/todos/route.js +2 -2
- package/dist/modules/customers/api/todos/route.js.map +2 -2
- package/dist/modules/customers/commands/addresses.js +3 -3
- package/dist/modules/customers/commands/addresses.js.map +2 -2
- package/dist/modules/customers/commands/comments.js +3 -3
- package/dist/modules/customers/commands/comments.js.map +2 -2
- package/dist/modules/customers/commands/companies.js +2 -2
- package/dist/modules/customers/commands/companies.js.map +2 -2
- package/dist/modules/customers/commands/deals.js +3 -3
- package/dist/modules/customers/commands/deals.js.map +2 -2
- package/dist/modules/customers/commands/dictionaries.js +3 -3
- package/dist/modules/customers/commands/dictionaries.js.map +2 -2
- package/dist/modules/customers/commands/entity-roles.js +3 -3
- package/dist/modules/customers/commands/entity-roles.js.map +2 -2
- package/dist/modules/customers/commands/interactions.js +6 -6
- package/dist/modules/customers/commands/interactions.js.map +2 -2
- package/dist/modules/customers/commands/labels.js +7 -7
- package/dist/modules/customers/commands/labels.js.map +2 -2
- package/dist/modules/customers/commands/people.js +3 -3
- package/dist/modules/customers/commands/people.js.map +2 -2
- package/dist/modules/customers/commands/personCompanyLinks.js +6 -6
- package/dist/modules/customers/commands/personCompanyLinks.js.map +2 -2
- package/dist/modules/customers/commands/pipeline-stages.js +3 -3
- package/dist/modules/customers/commands/pipeline-stages.js.map +2 -2
- package/dist/modules/customers/commands/pipelines.js +3 -3
- package/dist/modules/customers/commands/pipelines.js.map +2 -2
- package/dist/modules/customers/commands/shared.js +3 -3
- package/dist/modules/customers/commands/shared.js.map +2 -2
- package/dist/modules/customers/commands/tags.js +7 -7
- package/dist/modules/customers/commands/tags.js.map +2 -2
- package/dist/modules/customers/commands/todos.js +3 -3
- package/dist/modules/customers/commands/todos.js.map +2 -2
- package/dist/modules/customers/lib/personCompanies.js +4 -4
- package/dist/modules/customers/lib/personCompanies.js.map +2 -2
- package/dist/modules/perspectives/data/validators.js +4 -0
- package/dist/modules/perspectives/data/validators.js.map +2 -2
- package/dist/modules/sales/api/notes/route.js +2 -4
- package/dist/modules/sales/api/notes/route.js.map +2 -2
- package/dist/modules/sales/api/quotes/accept/route.js +2 -2
- package/dist/modules/sales/api/quotes/accept/route.js.map +2 -2
- package/dist/modules/sales/api/quotes/public/[token]/route.js +3 -7
- package/dist/modules/sales/api/quotes/public/[token]/route.js.map +2 -2
- package/dist/modules/sales/api/quotes/send/route.js +2 -2
- package/dist/modules/sales/api/quotes/send/route.js.map +2 -2
- package/dist/modules/sales/api/returns/[id]/route.js +2 -2
- package/dist/modules/sales/api/returns/[id]/route.js.map +2 -2
- package/dist/modules/sales/commands/configuration.js +11 -11
- package/dist/modules/sales/commands/configuration.js.map +2 -2
- package/dist/modules/sales/commands/documentAddresses.js +3 -3
- package/dist/modules/sales/commands/documentAddresses.js.map +2 -2
- package/dist/modules/sales/commands/documents.js +31 -39
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/commands/notes.js +7 -7
- package/dist/modules/sales/commands/notes.js.map +2 -2
- package/dist/modules/sales/commands/payments.js +2 -2
- package/dist/modules/sales/commands/payments.js.map +2 -2
- package/dist/modules/sales/commands/returns.js +8 -8
- package/dist/modules/sales/commands/returns.js.map +2 -2
- package/dist/modules/sales/commands/shared.js +2 -2
- package/dist/modules/sales/commands/shared.js.map +2 -2
- package/dist/modules/sales/commands/shipments.js +5 -5
- package/dist/modules/sales/commands/shipments.js.map +2 -2
- package/dist/modules/sales/commands/statuses.js +2 -2
- package/dist/modules/sales/commands/statuses.js.map +2 -2
- package/dist/modules/sales/commands/tags.js +3 -3
- package/dist/modules/sales/commands/tags.js.map +2 -2
- package/package.json +8 -8
- package/src/modules/attachments/api/partitions/route.ts +1 -1
- package/src/modules/attachments/lib/reconcileOrganization.ts +16 -7
- package/src/modules/catalog/api/products/route.ts +1 -1
- package/src/modules/customer_accounts/i18n/de.json +12 -0
- package/src/modules/customer_accounts/i18n/en.json +12 -0
- package/src/modules/customer_accounts/i18n/es.json +34 -22
- package/src/modules/customer_accounts/i18n/pl.json +32 -20
- package/src/modules/customers/api/companies/[id]/people/route.ts +2 -2
- package/src/modules/customers/api/deals/[id]/companies/route.ts +2 -2
- package/src/modules/customers/api/deals/[id]/people/route.ts +2 -2
- package/src/modules/customers/api/dictionaries/[kind]/[id]/route.ts +4 -4
- package/src/modules/customers/api/entity-roles-factory.ts +3 -3
- package/src/modules/customers/api/labels/assign/route.ts +2 -2
- package/src/modules/customers/api/labels/unassign/route.ts +2 -2
- package/src/modules/customers/api/people/[id]/companies/[linkId]/route.ts +3 -7
- package/src/modules/customers/api/people/[id]/companies/context.ts +3 -3
- package/src/modules/customers/api/people/[id]/companies/enriched/route.ts +2 -2
- package/src/modules/customers/api/todos/route.ts +2 -2
- package/src/modules/customers/commands/addresses.ts +3 -3
- package/src/modules/customers/commands/comments.ts +3 -3
- package/src/modules/customers/commands/companies.ts +2 -2
- package/src/modules/customers/commands/deals.ts +3 -3
- package/src/modules/customers/commands/dictionaries.ts +3 -3
- package/src/modules/customers/commands/entity-roles.ts +3 -3
- package/src/modules/customers/commands/interactions.ts +6 -6
- package/src/modules/customers/commands/labels.ts +7 -7
- package/src/modules/customers/commands/people.ts +3 -3
- package/src/modules/customers/commands/personCompanyLinks.ts +6 -6
- package/src/modules/customers/commands/pipeline-stages.ts +3 -3
- package/src/modules/customers/commands/pipelines.ts +3 -3
- package/src/modules/customers/commands/shared.ts +3 -3
- package/src/modules/customers/commands/tags.ts +7 -7
- package/src/modules/customers/commands/todos.ts +3 -3
- package/src/modules/customers/lib/personCompanies.ts +4 -4
- package/src/modules/perspectives/data/validators.ts +4 -0
- package/src/modules/sales/api/notes/route.ts +2 -4
- package/src/modules/sales/api/quotes/accept/route.ts +2 -2
- package/src/modules/sales/api/quotes/public/[token]/route.ts +3 -7
- package/src/modules/sales/api/quotes/send/route.ts +2 -2
- package/src/modules/sales/api/returns/[id]/route.ts +2 -2
- package/src/modules/sales/commands/configuration.ts +11 -11
- package/src/modules/sales/commands/documentAddresses.ts +3 -3
- package/src/modules/sales/commands/documents.ts +23 -31
- package/src/modules/sales/commands/notes.ts +7 -7
- package/src/modules/sales/commands/payments.ts +2 -2
- package/src/modules/sales/commands/returns.ts +8 -8
- package/src/modules/sales/commands/shared.ts +2 -2
- package/src/modules/sales/commands/shipments.ts +5 -5
- package/src/modules/sales/commands/statuses.ts +2 -2
- package/src/modules/sales/commands/tags.ts +3 -3
- package/tsconfig.json +0 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/modules/customers/commands/entity-roles.ts"],
|
|
4
|
-
"sourcesContent": ["import { registerCommand } from '@open-mercato/shared/lib/commands'\nimport type { CommandHandler } from '@open-mercato/shared/lib/commands'\nimport type { CrudEventsConfig } from '@open-mercato/shared/lib/crud/types'\nimport { emitCrudSideEffects, emitCrudUndoSideEffects } from '@open-mercato/shared/lib/commands/helpers'\nimport { CrudHttpError } from '@open-mercato/shared/lib/crud/errors'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\nimport { findOneWithDecryption } from '@open-mercato/shared/lib/encryption/find'\nimport type { DataEngine } from '@open-mercato/shared/lib/data/engine'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport { CustomerEntity, CustomerEntityRole } from '../data/entities'\nimport {\n entityRoleCreateSchema,\n entityRoleUpdateSchema,\n entityRoleDeleteSchema,\n type EntityRoleCreateInput,\n type EntityRoleUpdateInput,\n type EntityRoleDeleteInput,\n} from '../data/validators'\nimport {\n ensureOrganizationScope,\n ensureSameScope,\n ensureTenantScope,\n extractUndoPayload,\n requireCustomerEntity,\n resolveParentResourceKind,\n} from './shared'\nimport { resolveRedoSnapshot } from '@open-mercato/shared/lib/commands/redo'\n\ntype EntityRoleSnapshot = {\n role: {\n id: string\n entityType: 'company' | 'person'\n entityId: string\n userId: string\n roleType: string\n organizationId: string\n tenantId: string\n }\n entityKind: 'company' | 'person' | null\n}\n\ntype EntityRoleUndoPayload = {\n before?: EntityRoleSnapshot | null\n after?: EntityRoleSnapshot | null\n /**\n * True when createEntityRole \"undeleted\" a previously soft-deleted row\n * instead of inserting a fresh one. Undo must restore that soft-delete\n * state rather than soft-delete the freshly-restored row.\n */\n wasUndelete?: boolean\n /** userId held by the soft-deleted row before undelete; restored on undo. */\n previousUserId?: string | null\n /** deletedAt timestamp held by the soft-deleted row before undelete. */\n previousDeletedAt?: string | null\n}\n\nconst entityRoleCrudEvents: CrudEventsConfig = {\n module: 'customers',\n entity: 'entity_role',\n persistent: true,\n buildPayload: (ctx) => ({\n id: ctx.identifiers.id,\n organizationId: ctx.identifiers.organizationId,\n tenantId: ctx.identifiers.tenantId,\n entityId:\n ctx.entity && typeof ctx.entity === 'object' && 'entityId' in (ctx.entity as Record<string, unknown>)\n ? (ctx.entity as CustomerEntityRole).entityId\n : null,\n entityType:\n ctx.entity && typeof ctx.entity === 'object' && 'entityType' in (ctx.entity as Record<string, unknown>)\n ? (ctx.entity as CustomerEntityRole).entityType\n : null,\n roleType:\n ctx.entity && typeof ctx.entity === 'object' && 'roleType' in (ctx.entity as Record<string, unknown>)\n ? (ctx.entity as CustomerEntityRole).roleType\n : null,\n userId:\n ctx.entity && typeof ctx.entity === 'object' && 'userId' in (ctx.entity as Record<string, unknown>)\n ? (ctx.entity as CustomerEntityRole).userId\n : null,\n ...(ctx.syncOrigin ? { syncOrigin: ctx.syncOrigin } : {}),\n }),\n}\n\nfunction getRoleIdentifiers(role: CustomerEntityRole) {\n return {\n id: role.id,\n organizationId: role.organizationId,\n tenantId: role.tenantId,\n }\n}\n\nasync function loadEntityRoleSnapshot(\n em: EntityManager,\n id: string,\n scope?: { tenantId?: string | null; organizationId?: string | null },\n): Promise<EntityRoleSnapshot | null> {\n const filter: Record<string, unknown> = { id, deletedAt: null }\n if (scope?.tenantId) filter.tenantId = scope.tenantId\n if (scope?.organizationId) filter.organizationId = scope.organizationId\n const role = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n filter,\n undefined,\n { tenantId: scope?.tenantId ?? null, organizationId: scope?.organizationId ?? null },\n )\n if (!role) return null\n\n const entity = await findOneWithDecryption(\n em,\n CustomerEntity,\n { id: role.entityId, tenantId: role.tenantId, deletedAt: null },\n undefined,\n { tenantId: role.tenantId, organizationId: role.organizationId },\n )\n\n return {\n role: {\n id: role.id,\n entityType: role.entityType as 'company' | 'person',\n entityId: role.entityId,\n userId: role.userId,\n roleType: role.roleType,\n organizationId: role.organizationId,\n tenantId: role.tenantId,\n },\n entityKind: entity?.kind === 'company' || entity?.kind === 'person' ? entity.kind : null,\n }\n}\n\nconst createEntityRoleCommand: CommandHandler<EntityRoleCreateInput, { roleId: string; wasUndelete: boolean; previousUserId: string | null; previousDeletedAt: string | null }> = {\n id: 'customers.entityRoles.create',\n async execute(rawInput, ctx) {\n const parsed = entityRoleCreateSchema.parse(rawInput)\n ensureTenantScope(ctx, parsed.tenantId)\n ensureOrganizationScope(ctx, parsed.organizationId)\n\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const entity = await requireCustomerEntity(em, parsed.entityId, { tenantId: parsed.tenantId, organizationId: parsed.organizationId }, parsed.entityType, 'Customer not found')\n ensureSameScope(entity, parsed.organizationId, parsed.tenantId)\n\n const activeExisting = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n {\n entityType: parsed.entityType,\n entityId: parsed.entityId,\n roleType: parsed.roleType,\n organizationId: parsed.organizationId,\n tenantId: parsed.tenantId,\n deletedAt: null,\n },\n undefined,\n { tenantId: parsed.tenantId, organizationId: parsed.organizationId },\n )\n if (activeExisting) {\n throw new CrudHttpError(409, { error: 'Role type already assigned for this entity' })\n }\n\n const softDeleted = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n {\n entityType: parsed.entityType,\n entityId: parsed.entityId,\n roleType: parsed.roleType,\n organizationId: parsed.organizationId,\n tenantId: parsed.tenantId,\n },\n undefined,\n { tenantId: parsed.tenantId, organizationId: parsed.organizationId },\n )\n let role: CustomerEntityRole\n let wasUndelete = false\n let previousUserId: string | null = null\n let previousDeletedAt: string | null = null\n if (softDeleted) {\n wasUndelete = true\n previousUserId = softDeleted.userId ?? null\n previousDeletedAt = softDeleted.deletedAt instanceof Date ? softDeleted.deletedAt.toISOString() : null\n softDeleted.deletedAt = null\n softDeleted.userId = parsed.userId\n role = softDeleted\n } else {\n role = em.create(CustomerEntityRole, {\n entityType: parsed.entityType,\n entityId: parsed.entityId,\n userId: parsed.userId,\n roleType: parsed.roleType,\n organizationId: parsed.organizationId,\n tenantId: parsed.tenantId,\n })\n em.persist(role)\n }\n await em.flush()\n\n const dataEngine = ctx.container.resolve('dataEngine') as DataEngine\n await emitCrudSideEffects({\n dataEngine,\n action: 'created',\n entity: role,\n identifiers: getRoleIdentifiers(role),\n syncOrigin: ctx.syncOrigin,\n events: entityRoleCrudEvents,\n indexer: { entityType: 'customers:entity_role' },\n })\n\n return { roleId: role.id, wasUndelete, previousUserId, previousDeletedAt }\n },\n captureAfter: async (_input, result, ctx) => {\n const em = (ctx.container.resolve('em') as EntityManager)\n return loadEntityRoleSnapshot(em, result.roleId, {\n tenantId: ctx.auth?.tenantId ?? null,\n organizationId: ctx.selectedOrganizationId ?? ctx.auth?.orgId ?? null,\n })\n },\n buildLog: async ({ result, snapshots }) => {\n const { translate } = await resolveTranslations()\n const snapshot = snapshots.after as EntityRoleSnapshot | undefined\n return {\n actionLabel: translate('customers.audit.entityRoles.create', 'Create entity role'),\n resourceKind: 'customers.entityRole',\n resourceId: result.roleId,\n parentResourceKind: resolveParentResourceKind(snapshot?.entityKind),\n parentResourceId: snapshot?.role.entityId ?? null,\n tenantId: snapshot?.role.tenantId ?? null,\n organizationId: snapshot?.role.organizationId ?? null,\n snapshotAfter: snapshot ?? null,\n payload: {\n undo: {\n after: snapshot ?? null,\n wasUndelete: result.wasUndelete,\n previousUserId: result.previousUserId,\n previousDeletedAt: result.previousDeletedAt,\n } satisfies EntityRoleUndoPayload,\n },\n }\n },\n undo: async ({ logEntry, ctx }) => {\n const payload = extractUndoPayload<EntityRoleUndoPayload>(logEntry)\n const after = payload?.after\n if (!after) return\n\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const role = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n { id: after.role.id },\n undefined,\n { tenantId: after.role.tenantId, organizationId: after.role.organizationId },\n )\n if (!role) return\n\n if (payload?.wasUndelete) {\n role.deletedAt = payload.previousDeletedAt ? new Date(payload.previousDeletedAt) : new Date()\n if (payload.previousUserId) role.userId = payload.previousUserId\n } else {\n role.deletedAt = new Date()\n }\n await em.flush()\n\n const dataEngine = ctx.container.resolve('dataEngine') as DataEngine\n await emitCrudUndoSideEffects({\n dataEngine,\n action: 'deleted',\n entity: role,\n identifiers: getRoleIdentifiers(role),\n syncOrigin: ctx.syncOrigin,\n events: entityRoleCrudEvents,\n indexer: { entityType: 'customers:entity_role' },\n })\n },\n redo: async ({ logEntry, ctx }) => {\n const after = resolveRedoSnapshot<EntityRoleSnapshot>(logEntry)\n if (!after) {\n throw new CrudHttpError(400, { error: '[internal] redo snapshot unavailable for entity role create' })\n }\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n let role = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n { id: after.role.id },\n undefined,\n { tenantId: after.role.tenantId, organizationId: after.role.organizationId },\n )\n if (!role) {\n role = em.create(CustomerEntityRole, {\n id: after.role.id,\n entityType: after.role.entityType,\n entityId: after.role.entityId,\n userId: after.role.userId,\n roleType: after.role.roleType,\n organizationId: after.role.organizationId,\n tenantId: after.role.tenantId,\n })\n em.persist(role)\n } else {\n role.deletedAt = null\n role.userId = after.role.userId\n }\n await em.flush()\n\n const dataEngine = ctx.container.resolve('dataEngine') as DataEngine\n await emitCrudSideEffects({\n dataEngine,\n action: 'created',\n entity: role,\n identifiers: getRoleIdentifiers(role),\n syncOrigin: ctx.syncOrigin,\n events: entityRoleCrudEvents,\n indexer: { entityType: 'customers:entity_role' },\n })\n\n return {\n roleId: role.id,\n wasUndelete: false,\n previousUserId: null,\n previousDeletedAt: null,\n }\n },\n}\n\nconst updateEntityRoleCommand: CommandHandler<EntityRoleUpdateInput, { roleId: string }> = {\n id: 'customers.entityRoles.update',\n async prepare(rawInput, ctx) {\n const parsed = entityRoleUpdateSchema.parse(rawInput)\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const snapshot = await loadEntityRoleSnapshot(em, parsed.id, {\n tenantId: ctx.auth?.tenantId ?? null,\n organizationId: ctx.selectedOrganizationId ?? ctx.auth?.orgId ?? null,\n })\n return snapshot ? { before: snapshot } : {}\n },\n async execute(rawInput, ctx) {\n const parsed = entityRoleUpdateSchema.parse(rawInput)\n ensureTenantScope(ctx, parsed.tenantId)\n ensureOrganizationScope(ctx, parsed.organizationId)\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const role = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n { id: parsed.id, tenantId: parsed.tenantId, organizationId: parsed.organizationId, deletedAt: null },\n undefined,\n { tenantId: parsed.tenantId, organizationId: parsed.organizationId },\n )\n if (!role) {\n throw new CrudHttpError(404, { error: 'Role not found' })\n }\n\n role.userId = parsed.userId\n await em.flush()\n\n const dataEngine = ctx.container.resolve('dataEngine') as DataEngine\n await emitCrudSideEffects({\n dataEngine,\n action: 'updated',\n entity: role,\n identifiers: getRoleIdentifiers(role),\n syncOrigin: ctx.syncOrigin,\n events: entityRoleCrudEvents,\n indexer: { entityType: 'customers:entity_role' },\n })\n\n return { roleId: role.id }\n },\n captureAfter: async (_input, result, ctx) => {\n const em = ctx.container.resolve('em') as EntityManager\n return loadEntityRoleSnapshot(em, result.roleId, {\n tenantId: ctx.auth?.tenantId ?? null,\n organizationId: ctx.selectedOrganizationId ?? ctx.auth?.orgId ?? null,\n })\n },\n buildLog: async ({ result, snapshots }) => {\n const { translate } = await resolveTranslations()\n const before = snapshots.before as EntityRoleSnapshot | undefined\n const after = snapshots.after as EntityRoleSnapshot | undefined\n return {\n actionLabel: translate('customers.audit.entityRoles.update', 'Update entity role'),\n resourceKind: 'customers.entityRole',\n resourceId: result.roleId,\n parentResourceKind: resolveParentResourceKind(after?.entityKind ?? before?.entityKind),\n parentResourceId: after?.role.entityId ?? before?.role.entityId ?? null,\n tenantId: after?.role.tenantId ?? before?.role.tenantId ?? null,\n organizationId: after?.role.organizationId ?? before?.role.organizationId ?? null,\n snapshotBefore: before ?? null,\n snapshotAfter: after ?? null,\n payload: {\n undo: {\n before: before ?? null,\n after: after ?? null,\n } satisfies EntityRoleUndoPayload,\n },\n }\n },\n undo: async ({ logEntry, ctx }) => {\n const payload = extractUndoPayload<EntityRoleUndoPayload>(logEntry)\n const before = payload?.before\n if (!before) return\n\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const role = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n { id: before.role.id },\n undefined,\n { tenantId: before.role.tenantId, organizationId: before.role.organizationId },\n )\n if (!role) return\n\n role.userId = before.role.userId\n await em.flush()\n\n const dataEngine = ctx.container.resolve('dataEngine') as DataEngine\n await emitCrudUndoSideEffects({\n dataEngine,\n action: 'updated',\n entity: role,\n identifiers: getRoleIdentifiers(role),\n syncOrigin: ctx.syncOrigin,\n events: entityRoleCrudEvents,\n indexer: { entityType: 'customers:entity_role' },\n })\n },\n}\n\nconst deleteEntityRoleCommand: CommandHandler<EntityRoleDeleteInput, { roleId: string }> = {\n id: 'customers.entityRoles.delete',\n async prepare(rawInput, ctx) {\n const parsed = entityRoleDeleteSchema.parse(rawInput)\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const snapshot = await loadEntityRoleSnapshot(em, parsed.id, {\n tenantId: ctx.auth?.tenantId ?? null,\n organizationId: ctx.selectedOrganizationId ?? ctx.auth?.orgId ?? null,\n })\n return snapshot ? { before: snapshot } : {}\n },\n async execute(rawInput, ctx) {\n const parsed = entityRoleDeleteSchema.parse(rawInput)\n ensureTenantScope(ctx, parsed.tenantId)\n ensureOrganizationScope(ctx, parsed.organizationId)\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const role = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n { id: parsed.id, tenantId: parsed.tenantId, organizationId: parsed.organizationId, deletedAt: null },\n undefined,\n { tenantId: parsed.tenantId, organizationId: parsed.organizationId },\n )\n if (!role) {\n throw new CrudHttpError(404, { error: 'Role not found' })\n }\n\n role.deletedAt = new Date()\n await em.flush()\n\n const dataEngine = ctx.container.resolve('dataEngine') as DataEngine\n await emitCrudSideEffects({\n dataEngine,\n action: 'deleted',\n entity: role,\n identifiers: getRoleIdentifiers(role),\n syncOrigin: ctx.syncOrigin,\n events: entityRoleCrudEvents,\n indexer: { entityType: 'customers:entity_role' },\n })\n\n return { roleId: role.id }\n },\n buildLog: async ({ result, snapshots }) => {\n const { translate } = await resolveTranslations()\n const before = snapshots.before as EntityRoleSnapshot | undefined\n return {\n actionLabel: translate('customers.audit.entityRoles.delete', 'Delete entity role'),\n resourceKind: 'customers.entityRole',\n resourceId: result.roleId,\n parentResourceKind: resolveParentResourceKind(before?.entityKind),\n parentResourceId: before?.role.entityId ?? null,\n tenantId: before?.role.tenantId ?? null,\n organizationId: before?.role.organizationId ?? null,\n snapshotBefore: before ?? null,\n payload: {\n undo: {\n before: before ?? null,\n } satisfies EntityRoleUndoPayload,\n },\n }\n },\n undo: async ({ logEntry, ctx }) => {\n const payload = extractUndoPayload<EntityRoleUndoPayload>(logEntry)\n const before = payload?.before\n if (!before) return\n\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const entity = await requireCustomerEntity(\n em,\n before.role.entityId,\n { tenantId: before.role.tenantId, organizationId: before.role.organizationId },\n before.role.entityType,\n 'Customer not found',\n )\n ensureSameScope(entity, before.role.organizationId, before.role.tenantId)\n\n let role = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n { id: before.role.id },\n undefined,\n { tenantId: before.role.tenantId, organizationId: before.role.organizationId },\n )\n if (!role) {\n role = em.create(CustomerEntityRole, {\n id: before.role.id,\n entityType: before.role.entityType,\n entityId: before.role.entityId,\n userId: before.role.userId,\n roleType: before.role.roleType,\n organizationId: before.role.organizationId,\n tenantId: before.role.tenantId,\n })\n em.persist(role)\n } else {\n role.userId = before.role.userId\n role.roleType = before.role.roleType\n role.deletedAt = null\n }\n await em.flush()\n\n const dataEngine = ctx.container.resolve('dataEngine') as DataEngine\n await emitCrudUndoSideEffects({\n dataEngine,\n action: 'created',\n entity: role,\n identifiers: getRoleIdentifiers(role),\n syncOrigin: ctx.syncOrigin,\n events: entityRoleCrudEvents,\n indexer: { entityType: 'customers:entity_role' },\n })\n },\n}\n\nregisterCommand(createEntityRoleCommand)\nregisterCommand(updateEntityRoleCommand)\nregisterCommand(deleteEntityRoleCommand)\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { registerCommand } from '@open-mercato/shared/lib/commands'\nimport type { CommandHandler } from '@open-mercato/shared/lib/commands'\nimport type { CrudEventsConfig } from '@open-mercato/shared/lib/crud/types'\nimport { emitCrudSideEffects, emitCrudUndoSideEffects } from '@open-mercato/shared/lib/commands/helpers'\nimport { CrudHttpError, notFound } from '@open-mercato/shared/lib/crud/errors'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\nimport { findOneWithDecryption } from '@open-mercato/shared/lib/encryption/find'\nimport type { DataEngine } from '@open-mercato/shared/lib/data/engine'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport { CustomerEntity, CustomerEntityRole } from '../data/entities'\nimport {\n entityRoleCreateSchema,\n entityRoleUpdateSchema,\n entityRoleDeleteSchema,\n type EntityRoleCreateInput,\n type EntityRoleUpdateInput,\n type EntityRoleDeleteInput,\n} from '../data/validators'\nimport {\n ensureOrganizationScope,\n ensureSameScope,\n ensureTenantScope,\n extractUndoPayload,\n requireCustomerEntity,\n resolveParentResourceKind,\n} from './shared'\nimport { resolveRedoSnapshot } from '@open-mercato/shared/lib/commands/redo'\n\ntype EntityRoleSnapshot = {\n role: {\n id: string\n entityType: 'company' | 'person'\n entityId: string\n userId: string\n roleType: string\n organizationId: string\n tenantId: string\n }\n entityKind: 'company' | 'person' | null\n}\n\ntype EntityRoleUndoPayload = {\n before?: EntityRoleSnapshot | null\n after?: EntityRoleSnapshot | null\n /**\n * True when createEntityRole \"undeleted\" a previously soft-deleted row\n * instead of inserting a fresh one. Undo must restore that soft-delete\n * state rather than soft-delete the freshly-restored row.\n */\n wasUndelete?: boolean\n /** userId held by the soft-deleted row before undelete; restored on undo. */\n previousUserId?: string | null\n /** deletedAt timestamp held by the soft-deleted row before undelete. */\n previousDeletedAt?: string | null\n}\n\nconst entityRoleCrudEvents: CrudEventsConfig = {\n module: 'customers',\n entity: 'entity_role',\n persistent: true,\n buildPayload: (ctx) => ({\n id: ctx.identifiers.id,\n organizationId: ctx.identifiers.organizationId,\n tenantId: ctx.identifiers.tenantId,\n entityId:\n ctx.entity && typeof ctx.entity === 'object' && 'entityId' in (ctx.entity as Record<string, unknown>)\n ? (ctx.entity as CustomerEntityRole).entityId\n : null,\n entityType:\n ctx.entity && typeof ctx.entity === 'object' && 'entityType' in (ctx.entity as Record<string, unknown>)\n ? (ctx.entity as CustomerEntityRole).entityType\n : null,\n roleType:\n ctx.entity && typeof ctx.entity === 'object' && 'roleType' in (ctx.entity as Record<string, unknown>)\n ? (ctx.entity as CustomerEntityRole).roleType\n : null,\n userId:\n ctx.entity && typeof ctx.entity === 'object' && 'userId' in (ctx.entity as Record<string, unknown>)\n ? (ctx.entity as CustomerEntityRole).userId\n : null,\n ...(ctx.syncOrigin ? { syncOrigin: ctx.syncOrigin } : {}),\n }),\n}\n\nfunction getRoleIdentifiers(role: CustomerEntityRole) {\n return {\n id: role.id,\n organizationId: role.organizationId,\n tenantId: role.tenantId,\n }\n}\n\nasync function loadEntityRoleSnapshot(\n em: EntityManager,\n id: string,\n scope?: { tenantId?: string | null; organizationId?: string | null },\n): Promise<EntityRoleSnapshot | null> {\n const filter: Record<string, unknown> = { id, deletedAt: null }\n if (scope?.tenantId) filter.tenantId = scope.tenantId\n if (scope?.organizationId) filter.organizationId = scope.organizationId\n const role = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n filter,\n undefined,\n { tenantId: scope?.tenantId ?? null, organizationId: scope?.organizationId ?? null },\n )\n if (!role) return null\n\n const entity = await findOneWithDecryption(\n em,\n CustomerEntity,\n { id: role.entityId, tenantId: role.tenantId, deletedAt: null },\n undefined,\n { tenantId: role.tenantId, organizationId: role.organizationId },\n )\n\n return {\n role: {\n id: role.id,\n entityType: role.entityType as 'company' | 'person',\n entityId: role.entityId,\n userId: role.userId,\n roleType: role.roleType,\n organizationId: role.organizationId,\n tenantId: role.tenantId,\n },\n entityKind: entity?.kind === 'company' || entity?.kind === 'person' ? entity.kind : null,\n }\n}\n\nconst createEntityRoleCommand: CommandHandler<EntityRoleCreateInput, { roleId: string; wasUndelete: boolean; previousUserId: string | null; previousDeletedAt: string | null }> = {\n id: 'customers.entityRoles.create',\n async execute(rawInput, ctx) {\n const parsed = entityRoleCreateSchema.parse(rawInput)\n ensureTenantScope(ctx, parsed.tenantId)\n ensureOrganizationScope(ctx, parsed.organizationId)\n\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const entity = await requireCustomerEntity(em, parsed.entityId, { tenantId: parsed.tenantId, organizationId: parsed.organizationId }, parsed.entityType, 'Customer not found')\n ensureSameScope(entity, parsed.organizationId, parsed.tenantId)\n\n const activeExisting = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n {\n entityType: parsed.entityType,\n entityId: parsed.entityId,\n roleType: parsed.roleType,\n organizationId: parsed.organizationId,\n tenantId: parsed.tenantId,\n deletedAt: null,\n },\n undefined,\n { tenantId: parsed.tenantId, organizationId: parsed.organizationId },\n )\n if (activeExisting) {\n throw new CrudHttpError(409, { error: 'Role type already assigned for this entity' })\n }\n\n const softDeleted = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n {\n entityType: parsed.entityType,\n entityId: parsed.entityId,\n roleType: parsed.roleType,\n organizationId: parsed.organizationId,\n tenantId: parsed.tenantId,\n },\n undefined,\n { tenantId: parsed.tenantId, organizationId: parsed.organizationId },\n )\n let role: CustomerEntityRole\n let wasUndelete = false\n let previousUserId: string | null = null\n let previousDeletedAt: string | null = null\n if (softDeleted) {\n wasUndelete = true\n previousUserId = softDeleted.userId ?? null\n previousDeletedAt = softDeleted.deletedAt instanceof Date ? softDeleted.deletedAt.toISOString() : null\n softDeleted.deletedAt = null\n softDeleted.userId = parsed.userId\n role = softDeleted\n } else {\n role = em.create(CustomerEntityRole, {\n entityType: parsed.entityType,\n entityId: parsed.entityId,\n userId: parsed.userId,\n roleType: parsed.roleType,\n organizationId: parsed.organizationId,\n tenantId: parsed.tenantId,\n })\n em.persist(role)\n }\n await em.flush()\n\n const dataEngine = ctx.container.resolve('dataEngine') as DataEngine\n await emitCrudSideEffects({\n dataEngine,\n action: 'created',\n entity: role,\n identifiers: getRoleIdentifiers(role),\n syncOrigin: ctx.syncOrigin,\n events: entityRoleCrudEvents,\n indexer: { entityType: 'customers:entity_role' },\n })\n\n return { roleId: role.id, wasUndelete, previousUserId, previousDeletedAt }\n },\n captureAfter: async (_input, result, ctx) => {\n const em = (ctx.container.resolve('em') as EntityManager)\n return loadEntityRoleSnapshot(em, result.roleId, {\n tenantId: ctx.auth?.tenantId ?? null,\n organizationId: ctx.selectedOrganizationId ?? ctx.auth?.orgId ?? null,\n })\n },\n buildLog: async ({ result, snapshots }) => {\n const { translate } = await resolveTranslations()\n const snapshot = snapshots.after as EntityRoleSnapshot | undefined\n return {\n actionLabel: translate('customers.audit.entityRoles.create', 'Create entity role'),\n resourceKind: 'customers.entityRole',\n resourceId: result.roleId,\n parentResourceKind: resolveParentResourceKind(snapshot?.entityKind),\n parentResourceId: snapshot?.role.entityId ?? null,\n tenantId: snapshot?.role.tenantId ?? null,\n organizationId: snapshot?.role.organizationId ?? null,\n snapshotAfter: snapshot ?? null,\n payload: {\n undo: {\n after: snapshot ?? null,\n wasUndelete: result.wasUndelete,\n previousUserId: result.previousUserId,\n previousDeletedAt: result.previousDeletedAt,\n } satisfies EntityRoleUndoPayload,\n },\n }\n },\n undo: async ({ logEntry, ctx }) => {\n const payload = extractUndoPayload<EntityRoleUndoPayload>(logEntry)\n const after = payload?.after\n if (!after) return\n\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const role = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n { id: after.role.id },\n undefined,\n { tenantId: after.role.tenantId, organizationId: after.role.organizationId },\n )\n if (!role) return\n\n if (payload?.wasUndelete) {\n role.deletedAt = payload.previousDeletedAt ? new Date(payload.previousDeletedAt) : new Date()\n if (payload.previousUserId) role.userId = payload.previousUserId\n } else {\n role.deletedAt = new Date()\n }\n await em.flush()\n\n const dataEngine = ctx.container.resolve('dataEngine') as DataEngine\n await emitCrudUndoSideEffects({\n dataEngine,\n action: 'deleted',\n entity: role,\n identifiers: getRoleIdentifiers(role),\n syncOrigin: ctx.syncOrigin,\n events: entityRoleCrudEvents,\n indexer: { entityType: 'customers:entity_role' },\n })\n },\n redo: async ({ logEntry, ctx }) => {\n const after = resolveRedoSnapshot<EntityRoleSnapshot>(logEntry)\n if (!after) {\n throw new CrudHttpError(400, { error: '[internal] redo snapshot unavailable for entity role create' })\n }\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n let role = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n { id: after.role.id },\n undefined,\n { tenantId: after.role.tenantId, organizationId: after.role.organizationId },\n )\n if (!role) {\n role = em.create(CustomerEntityRole, {\n id: after.role.id,\n entityType: after.role.entityType,\n entityId: after.role.entityId,\n userId: after.role.userId,\n roleType: after.role.roleType,\n organizationId: after.role.organizationId,\n tenantId: after.role.tenantId,\n })\n em.persist(role)\n } else {\n role.deletedAt = null\n role.userId = after.role.userId\n }\n await em.flush()\n\n const dataEngine = ctx.container.resolve('dataEngine') as DataEngine\n await emitCrudSideEffects({\n dataEngine,\n action: 'created',\n entity: role,\n identifiers: getRoleIdentifiers(role),\n syncOrigin: ctx.syncOrigin,\n events: entityRoleCrudEvents,\n indexer: { entityType: 'customers:entity_role' },\n })\n\n return {\n roleId: role.id,\n wasUndelete: false,\n previousUserId: null,\n previousDeletedAt: null,\n }\n },\n}\n\nconst updateEntityRoleCommand: CommandHandler<EntityRoleUpdateInput, { roleId: string }> = {\n id: 'customers.entityRoles.update',\n async prepare(rawInput, ctx) {\n const parsed = entityRoleUpdateSchema.parse(rawInput)\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const snapshot = await loadEntityRoleSnapshot(em, parsed.id, {\n tenantId: ctx.auth?.tenantId ?? null,\n organizationId: ctx.selectedOrganizationId ?? ctx.auth?.orgId ?? null,\n })\n return snapshot ? { before: snapshot } : {}\n },\n async execute(rawInput, ctx) {\n const parsed = entityRoleUpdateSchema.parse(rawInput)\n ensureTenantScope(ctx, parsed.tenantId)\n ensureOrganizationScope(ctx, parsed.organizationId)\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const role = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n { id: parsed.id, tenantId: parsed.tenantId, organizationId: parsed.organizationId, deletedAt: null },\n undefined,\n { tenantId: parsed.tenantId, organizationId: parsed.organizationId },\n )\n if (!role) {\n throw notFound('Role not found')\n }\n\n role.userId = parsed.userId\n await em.flush()\n\n const dataEngine = ctx.container.resolve('dataEngine') as DataEngine\n await emitCrudSideEffects({\n dataEngine,\n action: 'updated',\n entity: role,\n identifiers: getRoleIdentifiers(role),\n syncOrigin: ctx.syncOrigin,\n events: entityRoleCrudEvents,\n indexer: { entityType: 'customers:entity_role' },\n })\n\n return { roleId: role.id }\n },\n captureAfter: async (_input, result, ctx) => {\n const em = ctx.container.resolve('em') as EntityManager\n return loadEntityRoleSnapshot(em, result.roleId, {\n tenantId: ctx.auth?.tenantId ?? null,\n organizationId: ctx.selectedOrganizationId ?? ctx.auth?.orgId ?? null,\n })\n },\n buildLog: async ({ result, snapshots }) => {\n const { translate } = await resolveTranslations()\n const before = snapshots.before as EntityRoleSnapshot | undefined\n const after = snapshots.after as EntityRoleSnapshot | undefined\n return {\n actionLabel: translate('customers.audit.entityRoles.update', 'Update entity role'),\n resourceKind: 'customers.entityRole',\n resourceId: result.roleId,\n parentResourceKind: resolveParentResourceKind(after?.entityKind ?? before?.entityKind),\n parentResourceId: after?.role.entityId ?? before?.role.entityId ?? null,\n tenantId: after?.role.tenantId ?? before?.role.tenantId ?? null,\n organizationId: after?.role.organizationId ?? before?.role.organizationId ?? null,\n snapshotBefore: before ?? null,\n snapshotAfter: after ?? null,\n payload: {\n undo: {\n before: before ?? null,\n after: after ?? null,\n } satisfies EntityRoleUndoPayload,\n },\n }\n },\n undo: async ({ logEntry, ctx }) => {\n const payload = extractUndoPayload<EntityRoleUndoPayload>(logEntry)\n const before = payload?.before\n if (!before) return\n\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const role = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n { id: before.role.id },\n undefined,\n { tenantId: before.role.tenantId, organizationId: before.role.organizationId },\n )\n if (!role) return\n\n role.userId = before.role.userId\n await em.flush()\n\n const dataEngine = ctx.container.resolve('dataEngine') as DataEngine\n await emitCrudUndoSideEffects({\n dataEngine,\n action: 'updated',\n entity: role,\n identifiers: getRoleIdentifiers(role),\n syncOrigin: ctx.syncOrigin,\n events: entityRoleCrudEvents,\n indexer: { entityType: 'customers:entity_role' },\n })\n },\n}\n\nconst deleteEntityRoleCommand: CommandHandler<EntityRoleDeleteInput, { roleId: string }> = {\n id: 'customers.entityRoles.delete',\n async prepare(rawInput, ctx) {\n const parsed = entityRoleDeleteSchema.parse(rawInput)\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const snapshot = await loadEntityRoleSnapshot(em, parsed.id, {\n tenantId: ctx.auth?.tenantId ?? null,\n organizationId: ctx.selectedOrganizationId ?? ctx.auth?.orgId ?? null,\n })\n return snapshot ? { before: snapshot } : {}\n },\n async execute(rawInput, ctx) {\n const parsed = entityRoleDeleteSchema.parse(rawInput)\n ensureTenantScope(ctx, parsed.tenantId)\n ensureOrganizationScope(ctx, parsed.organizationId)\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const role = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n { id: parsed.id, tenantId: parsed.tenantId, organizationId: parsed.organizationId, deletedAt: null },\n undefined,\n { tenantId: parsed.tenantId, organizationId: parsed.organizationId },\n )\n if (!role) {\n throw notFound('Role not found')\n }\n\n role.deletedAt = new Date()\n await em.flush()\n\n const dataEngine = ctx.container.resolve('dataEngine') as DataEngine\n await emitCrudSideEffects({\n dataEngine,\n action: 'deleted',\n entity: role,\n identifiers: getRoleIdentifiers(role),\n syncOrigin: ctx.syncOrigin,\n events: entityRoleCrudEvents,\n indexer: { entityType: 'customers:entity_role' },\n })\n\n return { roleId: role.id }\n },\n buildLog: async ({ result, snapshots }) => {\n const { translate } = await resolveTranslations()\n const before = snapshots.before as EntityRoleSnapshot | undefined\n return {\n actionLabel: translate('customers.audit.entityRoles.delete', 'Delete entity role'),\n resourceKind: 'customers.entityRole',\n resourceId: result.roleId,\n parentResourceKind: resolveParentResourceKind(before?.entityKind),\n parentResourceId: before?.role.entityId ?? null,\n tenantId: before?.role.tenantId ?? null,\n organizationId: before?.role.organizationId ?? null,\n snapshotBefore: before ?? null,\n payload: {\n undo: {\n before: before ?? null,\n } satisfies EntityRoleUndoPayload,\n },\n }\n },\n undo: async ({ logEntry, ctx }) => {\n const payload = extractUndoPayload<EntityRoleUndoPayload>(logEntry)\n const before = payload?.before\n if (!before) return\n\n const em = (ctx.container.resolve('em') as EntityManager).fork()\n const entity = await requireCustomerEntity(\n em,\n before.role.entityId,\n { tenantId: before.role.tenantId, organizationId: before.role.organizationId },\n before.role.entityType,\n 'Customer not found',\n )\n ensureSameScope(entity, before.role.organizationId, before.role.tenantId)\n\n let role = await findOneWithDecryption(\n em,\n CustomerEntityRole,\n { id: before.role.id },\n undefined,\n { tenantId: before.role.tenantId, organizationId: before.role.organizationId },\n )\n if (!role) {\n role = em.create(CustomerEntityRole, {\n id: before.role.id,\n entityType: before.role.entityType,\n entityId: before.role.entityId,\n userId: before.role.userId,\n roleType: before.role.roleType,\n organizationId: before.role.organizationId,\n tenantId: before.role.tenantId,\n })\n em.persist(role)\n } else {\n role.userId = before.role.userId\n role.roleType = before.role.roleType\n role.deletedAt = null\n }\n await em.flush()\n\n const dataEngine = ctx.container.resolve('dataEngine') as DataEngine\n await emitCrudUndoSideEffects({\n dataEngine,\n action: 'created',\n entity: role,\n identifiers: getRoleIdentifiers(role),\n syncOrigin: ctx.syncOrigin,\n events: entityRoleCrudEvents,\n indexer: { entityType: 'customers:entity_role' },\n })\n },\n}\n\nregisterCommand(createEntityRoleCommand)\nregisterCommand(updateEntityRoleCommand)\nregisterCommand(deleteEntityRoleCommand)\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
loadCustomFieldSnapshot,
|
|
32
32
|
buildCustomFieldResetMap
|
|
33
33
|
} from "@open-mercato/shared/lib/commands/customFieldSnapshots";
|
|
34
|
-
import { CrudHttpError } from "@open-mercato/shared/lib/crud/errors";
|
|
34
|
+
import { CrudHttpError, notFound } from "@open-mercato/shared/lib/crud/errors";
|
|
35
35
|
import { enforceRecordGoneIsConflict, enforceCommandOptimisticLockWithGuards } from "@open-mercato/shared/lib/crud/optimistic-lock-command";
|
|
36
36
|
import { findOneWithDecryption } from "@open-mercato/shared/lib/encryption/find";
|
|
37
37
|
import { recomputeNextInteraction } from "../lib/interactionProjection.js";
|
|
@@ -474,7 +474,7 @@ const updateInteractionCommand = {
|
|
|
474
474
|
const interaction2 = await findOneWithDecryption(trx, CustomerInteraction, { id: parsed.id, deletedAt: null });
|
|
475
475
|
if (!interaction2) {
|
|
476
476
|
enforceRecordGoneIsConflict({ resourceKind: "customers.interaction", resourceId: parsed.id, request: ctx.request ?? null });
|
|
477
|
-
throw
|
|
477
|
+
throw notFound("Interaction not found");
|
|
478
478
|
}
|
|
479
479
|
ensureTenantScope(ctx, interaction2.tenantId);
|
|
480
480
|
ensureOrganizationScope(ctx, interaction2.organizationId);
|
|
@@ -496,7 +496,7 @@ const updateInteractionCommand = {
|
|
|
496
496
|
// bypass (canChangeEmailVisibility ignores caller features in v1).
|
|
497
497
|
userFeatures: void 0
|
|
498
498
|
})) {
|
|
499
|
-
throw
|
|
499
|
+
throw notFound("Email not found");
|
|
500
500
|
}
|
|
501
501
|
}
|
|
502
502
|
if (parsed.dealId !== void 0) {
|
|
@@ -712,7 +712,7 @@ const completeInteractionCommand = {
|
|
|
712
712
|
const interaction2 = await findOneWithDecryption(trx, CustomerInteraction, { id: parsed.id, deletedAt: null });
|
|
713
713
|
if (!interaction2) {
|
|
714
714
|
enforceRecordGoneIsConflict({ resourceKind: "customers.interaction", resourceId: parsed.id, request: ctx.request ?? null });
|
|
715
|
-
throw
|
|
715
|
+
throw notFound("Interaction not found");
|
|
716
716
|
}
|
|
717
717
|
ensureTenantScope(ctx, interaction2.tenantId);
|
|
718
718
|
ensureOrganizationScope(ctx, interaction2.organizationId);
|
|
@@ -841,7 +841,7 @@ const cancelInteractionCommand = {
|
|
|
841
841
|
const interaction2 = await findOneWithDecryption(trx, CustomerInteraction, { id: parsed.id, deletedAt: null });
|
|
842
842
|
if (!interaction2) {
|
|
843
843
|
enforceRecordGoneIsConflict({ resourceKind: "customers.interaction", resourceId: parsed.id, request: ctx.request ?? null });
|
|
844
|
-
throw
|
|
844
|
+
throw notFound("Interaction not found");
|
|
845
845
|
}
|
|
846
846
|
ensureTenantScope(ctx, interaction2.tenantId);
|
|
847
847
|
ensureOrganizationScope(ctx, interaction2.organizationId);
|
|
@@ -967,7 +967,7 @@ const deleteInteractionCommand = {
|
|
|
967
967
|
const interaction2 = await findOneWithDecryption(trx, CustomerInteraction, { id, deletedAt: null });
|
|
968
968
|
if (!interaction2) {
|
|
969
969
|
enforceRecordGoneIsConflict({ resourceKind: "customers.interaction", resourceId: id, request: ctx.request ?? null });
|
|
970
|
-
throw
|
|
970
|
+
throw notFound("Interaction not found");
|
|
971
971
|
}
|
|
972
972
|
ensureTenantScope(ctx, interaction2.tenantId);
|
|
973
973
|
ensureOrganizationScope(ctx, interaction2.organizationId);
|