@mbc-cqrs-serverless/master 1.1.1 → 1.1.3

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 (54) hide show
  1. package/dist/controllers/index.d.ts +1 -0
  2. package/dist/controllers/index.js +1 -0
  3. package/dist/controllers/index.js.map +1 -1
  4. package/dist/controllers/master-bulk.controller.d.ts +10 -0
  5. package/dist/controllers/master-bulk.controller.js +106 -0
  6. package/dist/controllers/master-bulk.controller.js.map +1 -0
  7. package/dist/controllers/master-bulk.controller.spec.d.ts +1 -0
  8. package/dist/controllers/master-bulk.controller.spec.js +261 -0
  9. package/dist/controllers/master-bulk.controller.spec.js.map +1 -0
  10. package/dist/controllers/master-data.controller.d.ts +1 -1
  11. package/dist/controllers/master-data.controller.js +8 -2
  12. package/dist/controllers/master-data.controller.js.map +1 -1
  13. package/dist/controllers/master-data.controller.spec.js +42 -1
  14. package/dist/controllers/master-data.controller.spec.js.map +1 -1
  15. package/dist/controllers/master-setting.controller.d.ts +1 -1
  16. package/dist/controllers/master-setting.controller.js +7 -1
  17. package/dist/controllers/master-setting.controller.js.map +1 -1
  18. package/dist/controllers/master-setting.controller.spec.js +44 -4
  19. package/dist/controllers/master-setting.controller.spec.js.map +1 -1
  20. package/dist/dto/index.d.ts +1 -0
  21. package/dist/dto/index.js +1 -0
  22. package/dist/dto/index.js.map +1 -1
  23. package/dist/dto/master-bulk/index.d.ts +2 -0
  24. package/dist/dto/master-bulk/index.js +19 -0
  25. package/dist/dto/master-bulk/index.js.map +1 -0
  26. package/dist/dto/master-bulk/master-bulk-item.dto.d.ts +8 -0
  27. package/dist/dto/master-bulk/master-bulk-item.dto.js +85 -0
  28. package/dist/dto/master-bulk/master-bulk-item.dto.js.map +1 -0
  29. package/dist/dto/master-bulk/master-bulk.dto.d.ts +4 -0
  30. package/dist/dto/master-bulk/master-bulk.dto.js +36 -0
  31. package/dist/dto/master-bulk/master-bulk.dto.js.map +1 -0
  32. package/dist/dto/master-copy/master-data-create-bulk.dto.js +1 -0
  33. package/dist/dto/master-copy/master-data-create-bulk.dto.js.map +1 -1
  34. package/dist/dto/master-setting/common-setting-create-bulk.dto.js +1 -0
  35. package/dist/dto/master-setting/common-setting-create-bulk.dto.js.map +1 -1
  36. package/dist/master.module.js +1 -0
  37. package/dist/master.module.js.map +1 -1
  38. package/dist/services/master-data-upsert.integration.spec.d.ts +1 -0
  39. package/dist/services/master-data-upsert.integration.spec.js +301 -0
  40. package/dist/services/master-data-upsert.integration.spec.js.map +1 -0
  41. package/dist/services/master-data.service.d.ts +7 -0
  42. package/dist/services/master-data.service.js +42 -10
  43. package/dist/services/master-data.service.js.map +1 -1
  44. package/dist/services/master-data.service.spec.js +308 -48
  45. package/dist/services/master-data.service.spec.js.map +1 -1
  46. package/dist/services/master-setting-upsert.integration.spec.d.ts +1 -0
  47. package/dist/services/master-setting-upsert.integration.spec.js +282 -0
  48. package/dist/services/master-setting-upsert.integration.spec.js.map +1 -0
  49. package/dist/services/master-setting.service.d.ts +6 -0
  50. package/dist/services/master-setting.service.js +55 -20
  51. package/dist/services/master-setting.service.js.map +1 -1
  52. package/dist/services/master-setting.service.spec.js +245 -44
  53. package/dist/services/master-setting.service.spec.js.map +1 -1
  54. package/package.json +5 -5
@@ -89,7 +89,9 @@ describe('MasterDataService', () => {
89
89
  .mockResolvedValueOnce(mockDeletedSettings)
90
90
  .mockResolvedValueOnce(mockItems);
91
91
  prismaService.master.count.mockResolvedValue(1);
92
- const result = await service.listByRds(searchDto, { invokeContext: mockInvokeContext });
92
+ const result = await service.listByRds(searchDto, {
93
+ invokeContext: mockInvokeContext,
94
+ });
93
95
  expect(result).toBeInstanceOf(dto_1.MasterRdsListEntity);
94
96
  expect(result.total).toBe(1);
95
97
  expect(result.items).toHaveLength(1);
@@ -106,7 +108,9 @@ describe('MasterDataService', () => {
106
108
  .mockResolvedValueOnce([])
107
109
  .mockResolvedValueOnce([]);
108
110
  prismaService.master.count.mockResolvedValue(0);
109
- const result = await service.listByRds(searchDto, { invokeContext: mockInvokeContext });
111
+ const result = await service.listByRds(searchDto, {
112
+ invokeContext: mockInvokeContext,
113
+ });
110
114
  expect(result.total).toBe(0);
111
115
  expect(result.items).toHaveLength(0);
112
116
  });
@@ -229,7 +233,9 @@ describe('MasterDataService', () => {
229
233
  updatedAt: new Date(),
230
234
  };
231
235
  commandService.publishAsync.mockResolvedValue(mockCommandResult);
232
- const result = await service.create(createDto, { invokeContext: mockInvokeContext });
236
+ const result = await service.create(createDto, {
237
+ invokeContext: mockInvokeContext,
238
+ });
233
239
  expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
234
240
  expect(commandService.publishAsync).toHaveBeenCalledWith(expect.objectContaining({
235
241
  id: 'MASTER#TEST_TENANT#SETTING_CODE#DATA_CODE',
@@ -268,8 +274,7 @@ describe('MasterDataService', () => {
268
274
  updatedAt: new Date(),
269
275
  };
270
276
  dataService.getItem.mockResolvedValue(existingData);
271
- await expect(service.create(createDto, { invokeContext: mockInvokeContext }))
272
- .rejects.toThrow('Master data already exists');
277
+ await expect(service.create(createDto, { invokeContext: mockInvokeContext })).rejects.toThrow('Master data already exists');
273
278
  expect(commandService.publishAsync).not.toHaveBeenCalled();
274
279
  });
275
280
  it('should create when existing data is deleted', async () => {
@@ -310,7 +315,9 @@ describe('MasterDataService', () => {
310
315
  updatedAt: new Date(),
311
316
  };
312
317
  commandService.publishAsync.mockResolvedValue(mockCommandResult);
313
- const result = await service.create(createDto, { invokeContext: mockInvokeContext });
318
+ const result = await service.create(createDto, {
319
+ invokeContext: mockInvokeContext,
320
+ });
314
321
  expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
315
322
  expect(commandService.publishAsync).toHaveBeenCalledWith(expect.objectContaining({
316
323
  version: 2,
@@ -349,7 +356,9 @@ describe('MasterDataService', () => {
349
356
  updatedAt: new Date(),
350
357
  };
351
358
  commandService.publishPartialUpdateAsync.mockResolvedValue(mockUpdateResult);
352
- const result = await service.update(key, updateDto, { invokeContext: mockInvokeContext });
359
+ const result = await service.update(key, updateDto, {
360
+ invokeContext: mockInvokeContext,
361
+ });
353
362
  expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
354
363
  expect(commandService.publishPartialUpdateAsync).toHaveBeenCalledWith(expect.objectContaining({
355
364
  id: existingData.id,
@@ -367,8 +376,7 @@ describe('MasterDataService', () => {
367
376
  name: 'Updated Name',
368
377
  };
369
378
  dataService.getItem.mockResolvedValue(null);
370
- await expect(service.update(key, updateDto, { invokeContext: mockInvokeContext }))
371
- .rejects.toThrow('Master data not found');
379
+ await expect(service.update(key, updateDto, { invokeContext: mockInvokeContext })).rejects.toThrow('Master data not found');
372
380
  expect(commandService.publishPartialUpdateAsync).not.toHaveBeenCalled();
373
381
  });
374
382
  it('should preserve existing values when update fields are not provided', async () => {
@@ -430,7 +438,9 @@ describe('MasterDataService', () => {
430
438
  updatedAt: new Date(),
431
439
  };
432
440
  commandService.publishPartialUpdateAsync.mockResolvedValue(mockDeleteResult);
433
- const result = await service.delete(key, { invokeContext: mockInvokeContext });
441
+ const result = await service.delete(key, {
442
+ invokeContext: mockInvokeContext,
443
+ });
434
444
  expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
435
445
  expect(commandService.publishPartialUpdateAsync).toHaveBeenCalledWith(expect.objectContaining({
436
446
  ...existingData,
@@ -440,8 +450,7 @@ describe('MasterDataService', () => {
440
450
  it('should throw NotFoundException when data does not exist', async () => {
441
451
  const key = { pk: 'MASTER#TEST_TENANT', sk: 'SETTING#DATA1' };
442
452
  dataService.getItem.mockResolvedValue(null);
443
- await expect(service.delete(key, { invokeContext: mockInvokeContext }))
444
- .rejects.toThrow('Master data not found');
453
+ await expect(service.delete(key, { invokeContext: mockInvokeContext })).rejects.toThrow('Master data not found');
445
454
  expect(commandService.publishPartialUpdateAsync).not.toHaveBeenCalled();
446
455
  });
447
456
  it('should throw BadRequestException when data is already deleted', async () => {
@@ -460,8 +469,7 @@ describe('MasterDataService', () => {
460
469
  updatedAt: new Date(),
461
470
  };
462
471
  dataService.getItem.mockResolvedValue(existingData);
463
- await expect(service.delete(key, { invokeContext: mockInvokeContext }))
464
- .rejects.toThrow('This master data is already deleted');
472
+ await expect(service.delete(key, { invokeContext: mockInvokeContext })).rejects.toThrow('This master data is already deleted');
465
473
  expect(commandService.publishPartialUpdateAsync).not.toHaveBeenCalled();
466
474
  });
467
475
  });
@@ -575,7 +583,11 @@ describe('MasterDataService', () => {
575
583
  masterTypeCode: createDto.settingCode,
576
584
  },
577
585
  });
578
- expect(createDto.attributes['seq']).toBe(6);
586
+ // Verify seq is passed to publishAsync without mutating the original DTO
587
+ expect(commandService.publishAsync).toHaveBeenCalledWith(expect.objectContaining({
588
+ attributes: expect.objectContaining({ seq: 6 }),
589
+ seq: 6,
590
+ }), expect.anything());
579
591
  });
580
592
  it('should create setting with provided sequence', async () => {
581
593
  const createDto = {
@@ -632,7 +644,11 @@ describe('MasterDataService', () => {
632
644
  };
633
645
  commandService.publishAsync.mockResolvedValue(mockCommandResult);
634
646
  await service.createSetting(createDto, mockInvokeContext);
635
- expect(createDto.attributes['seq']).toBe(1);
647
+ // Verify seq is passed to publishAsync without mutating the original DTO
648
+ expect(commandService.publishAsync).toHaveBeenCalledWith(expect.objectContaining({
649
+ attributes: expect.objectContaining({ seq: 1 }),
650
+ seq: 1,
651
+ }), expect.anything());
636
652
  });
637
653
  });
638
654
  describe('updateSetting', () => {
@@ -669,6 +685,233 @@ describe('MasterDataService', () => {
669
685
  expect(commandService.publishPartialUpdateAsync).toHaveBeenCalledWith(expect.objectContaining(updateDto), { invokeContext: mockInvokeContext });
670
686
  });
671
687
  });
688
+ describe('upsert', () => {
689
+ it('should create new data when not exists', async () => {
690
+ const createDto = {
691
+ settingCode: 'SETTING_CODE',
692
+ code: 'DATA_CODE',
693
+ tenantCode: 'TEST_TENANT',
694
+ name: 'Test Data',
695
+ seq: 1,
696
+ attributes: { key: 'value' },
697
+ };
698
+ dataService.getItem.mockResolvedValue(null);
699
+ const mockCommandResult = {
700
+ id: 'MASTER#TEST_TENANT#SETTING_CODE#DATA_CODE',
701
+ pk: 'MASTER#TEST_TENANT',
702
+ sk: 'SETTING_CODE#DATA_CODE',
703
+ version: 1,
704
+ type: 'MASTER',
705
+ tenantCode: 'TEST_TENANT',
706
+ name: createDto.name,
707
+ code: createDto.code,
708
+ seq: createDto.seq,
709
+ attributes: createDto.attributes,
710
+ isDeleted: false,
711
+ createdAt: new Date(),
712
+ updatedAt: new Date(),
713
+ };
714
+ commandService.publishAsync.mockResolvedValue(mockCommandResult);
715
+ const result = await service.upsert(createDto, {
716
+ invokeContext: mockInvokeContext,
717
+ });
718
+ expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
719
+ expect(commandService.publishAsync).toHaveBeenCalledWith(expect.objectContaining({
720
+ version: 0,
721
+ isDeleted: false,
722
+ }), { invokeContext: mockInvokeContext });
723
+ });
724
+ it('should update existing data when exists with changes', async () => {
725
+ const createDto = {
726
+ settingCode: 'SETTING_CODE',
727
+ code: 'DATA_CODE',
728
+ tenantCode: 'TEST_TENANT',
729
+ name: 'Updated Data',
730
+ seq: 2,
731
+ attributes: { key: 'new-value' },
732
+ };
733
+ const existingData = {
734
+ id: 'existing-id',
735
+ pk: 'MASTER#TEST_TENANT',
736
+ sk: 'SETTING_CODE#DATA_CODE',
737
+ code: 'DATA_CODE',
738
+ name: 'Original Data',
739
+ version: 2,
740
+ type: 'MASTER',
741
+ tenantCode: 'TEST_TENANT',
742
+ isDeleted: false,
743
+ attributes: { key: 'old-value' },
744
+ createdAt: new Date(),
745
+ updatedAt: new Date(),
746
+ };
747
+ dataService.getItem.mockResolvedValue(existingData);
748
+ const mockCommandResult = {
749
+ id: 'MASTER#TEST_TENANT#SETTING_CODE#DATA_CODE',
750
+ pk: 'MASTER#TEST_TENANT',
751
+ sk: 'SETTING_CODE#DATA_CODE',
752
+ version: 3,
753
+ type: 'MASTER',
754
+ tenantCode: 'TEST_TENANT',
755
+ name: createDto.name,
756
+ code: createDto.code,
757
+ seq: createDto.seq,
758
+ attributes: createDto.attributes,
759
+ isDeleted: false,
760
+ createdAt: new Date(),
761
+ updatedAt: new Date(),
762
+ };
763
+ commandService.publishAsync.mockResolvedValue(mockCommandResult);
764
+ const result = await service.upsert(createDto, {
765
+ invokeContext: mockInvokeContext,
766
+ });
767
+ expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
768
+ expect(result.name).toBe('Updated Data');
769
+ expect(commandService.publishAsync).toHaveBeenCalledWith(expect.objectContaining({
770
+ version: 2,
771
+ isDeleted: false,
772
+ }), { invokeContext: mockInvokeContext });
773
+ });
774
+ it('should return existing data when data is identical (not dirty)', async () => {
775
+ const createDto = {
776
+ settingCode: 'SETTING_CODE',
777
+ code: 'DATA_CODE',
778
+ tenantCode: 'TEST_TENANT',
779
+ name: 'Same Data',
780
+ seq: 1,
781
+ attributes: { key: 'value' },
782
+ };
783
+ const existingData = {
784
+ id: 'existing-id',
785
+ pk: 'MASTER#TEST_TENANT',
786
+ sk: 'SETTING_CODE#DATA_CODE',
787
+ code: 'DATA_CODE',
788
+ name: 'Same Data',
789
+ version: 2,
790
+ type: 'MASTER',
791
+ tenantCode: 'TEST_TENANT',
792
+ isDeleted: false,
793
+ attributes: { key: 'value' },
794
+ createdAt: new Date(),
795
+ updatedAt: new Date(),
796
+ };
797
+ dataService.getItem.mockResolvedValue(existingData);
798
+ // publishAsync returns null when not dirty
799
+ commandService.publishAsync.mockResolvedValue(null);
800
+ const result = await service.upsert(createDto, {
801
+ invokeContext: mockInvokeContext,
802
+ });
803
+ expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
804
+ expect(result.name).toBe('Same Data');
805
+ });
806
+ it('should recreate when existing data is deleted', async () => {
807
+ const createDto = {
808
+ settingCode: 'SETTING_CODE',
809
+ code: 'DATA_CODE',
810
+ tenantCode: 'TEST_TENANT',
811
+ name: 'Recreated Data',
812
+ seq: 1,
813
+ attributes: { recreated: true },
814
+ };
815
+ const existingDeletedData = {
816
+ id: 'existing-id',
817
+ pk: 'MASTER#TEST_TENANT',
818
+ sk: 'SETTING_CODE#DATA_CODE',
819
+ code: 'DATA_CODE',
820
+ name: 'Deleted Data',
821
+ version: 3,
822
+ type: 'MASTER',
823
+ tenantCode: 'TEST_TENANT',
824
+ isDeleted: true,
825
+ createdAt: new Date(),
826
+ updatedAt: new Date(),
827
+ };
828
+ dataService.getItem.mockResolvedValue(existingDeletedData);
829
+ const mockCommandResult = {
830
+ id: 'MASTER#TEST_TENANT#SETTING_CODE#DATA_CODE',
831
+ pk: 'MASTER#TEST_TENANT',
832
+ sk: 'SETTING_CODE#DATA_CODE',
833
+ version: 3,
834
+ type: 'MASTER',
835
+ tenantCode: 'TEST_TENANT',
836
+ name: createDto.name,
837
+ code: createDto.code,
838
+ seq: createDto.seq,
839
+ attributes: createDto.attributes,
840
+ isDeleted: false,
841
+ createdAt: new Date(),
842
+ updatedAt: new Date(),
843
+ };
844
+ commandService.publishAsync.mockResolvedValue(mockCommandResult);
845
+ const result = await service.upsert(createDto, {
846
+ invokeContext: mockInvokeContext,
847
+ });
848
+ expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
849
+ expect(result.isDeleted).toBe(false);
850
+ expect(commandService.publishAsync).toHaveBeenCalledWith(expect.objectContaining({
851
+ version: 3,
852
+ isDeleted: false,
853
+ }), { invokeContext: mockInvokeContext });
854
+ });
855
+ });
856
+ describe('upsertBulk', () => {
857
+ it('should upsert multiple items', async () => {
858
+ const createDto1 = {
859
+ settingCode: 'SETTING_CODE',
860
+ name: 'Item 1',
861
+ code: 'CODE1',
862
+ seq: 1,
863
+ attributes: { key: 'value1' },
864
+ };
865
+ const createDto2 = {
866
+ settingCode: 'SETTING_CODE',
867
+ name: 'Item 2',
868
+ code: 'CODE2',
869
+ seq: 2,
870
+ attributes: { key: 'value2' },
871
+ };
872
+ prismaService.master.aggregate.mockResolvedValue({
873
+ _max: { seq: null },
874
+ });
875
+ dataService.getItem.mockResolvedValue(null);
876
+ const mockResult1 = {
877
+ id: 'id1',
878
+ pk: `MASTER#${mockUserContext.tenantCode}`,
879
+ sk: 'SETTING_CODE#CODE1',
880
+ version: 1,
881
+ type: 'MASTER',
882
+ tenantCode: mockUserContext.tenantCode,
883
+ name: 'Item 1',
884
+ code: 'CODE1',
885
+ seq: 1,
886
+ attributes: { key: 'value1' },
887
+ isDeleted: false,
888
+ createdAt: new Date(),
889
+ updatedAt: new Date(),
890
+ };
891
+ const mockResult2 = {
892
+ id: 'id2',
893
+ pk: `MASTER#${mockUserContext.tenantCode}`,
894
+ sk: 'SETTING_CODE#CODE2',
895
+ version: 1,
896
+ type: 'MASTER',
897
+ tenantCode: mockUserContext.tenantCode,
898
+ name: 'Item 2',
899
+ code: 'CODE2',
900
+ seq: 2,
901
+ attributes: { key: 'value2' },
902
+ isDeleted: false,
903
+ createdAt: new Date(),
904
+ updatedAt: new Date(),
905
+ };
906
+ commandService.publishAsync
907
+ .mockResolvedValueOnce(mockResult1)
908
+ .mockResolvedValueOnce(mockResult2);
909
+ const result = await service.upsertBulk({ items: [createDto1, createDto2] }, mockInvokeContext);
910
+ expect(result).toHaveLength(2);
911
+ expect(result[0]).toBeInstanceOf(entities_1.MasterDataEntity);
912
+ expect(result[1]).toBeInstanceOf(entities_1.MasterDataEntity);
913
+ });
914
+ });
672
915
  describe('deleteSetting', () => {
673
916
  it('should delete setting', async () => {
674
917
  const key = { pk: 'MASTER#TEST_TENANT', sk: 'SETTING#DATA1' };
@@ -718,8 +961,7 @@ describe('MasterDataService', () => {
718
961
  const dbError = new Error('Database connection failed');
719
962
  dbError.name = 'PrismaClientKnownRequestError';
720
963
  dataService.getItem.mockRejectedValue(dbError);
721
- await expect(service.create(createDto, { invokeContext: mockInvokeContext }))
722
- .rejects.toThrow('Database connection failed');
964
+ await expect(service.create(createDto, { invokeContext: mockInvokeContext })).rejects.toThrow('Database connection failed');
723
965
  expect(commandService.publishAsync).not.toHaveBeenCalled();
724
966
  });
725
967
  it('should handle CommandService publish failures', async () => {
@@ -733,8 +975,7 @@ describe('MasterDataService', () => {
733
975
  dataService.getItem.mockResolvedValue(null);
734
976
  const commandError = new Error('Command publish failed');
735
977
  commandService.publishAsync.mockRejectedValue(commandError);
736
- await expect(service.create(createDto, { invokeContext: mockInvokeContext }))
737
- .rejects.toThrow('Command publish failed');
978
+ await expect(service.create(createDto, { invokeContext: mockInvokeContext })).rejects.toThrow('Command publish failed');
738
979
  });
739
980
  it('should handle concurrent creation attempts with version conflicts', async () => {
740
981
  const createDto = {
@@ -748,8 +989,7 @@ describe('MasterDataService', () => {
748
989
  const versionError = new Error('Version conflict');
749
990
  versionError.name = 'ConditionalCheckFailedException';
750
991
  commandService.publishAsync.mockRejectedValue(versionError);
751
- await expect(service.create(createDto, { invokeContext: mockInvokeContext }))
752
- .rejects.toThrow('Version conflict');
992
+ await expect(service.create(createDto, { invokeContext: mockInvokeContext })).rejects.toThrow('Version conflict');
753
993
  });
754
994
  });
755
995
  describe('update - Error Handling', () => {
@@ -762,8 +1002,7 @@ describe('MasterDataService', () => {
762
1002
  const timeoutError = new Error('Query timeout');
763
1003
  timeoutError.name = 'PrismaClientKnownRequestError';
764
1004
  dataService.getItem.mockRejectedValue(timeoutError);
765
- await expect(service.update(key, updateDto, { invokeContext: mockInvokeContext }))
766
- .rejects.toThrow('Query timeout');
1005
+ await expect(service.update(key, updateDto, { invokeContext: mockInvokeContext })).rejects.toThrow('Query timeout');
767
1006
  expect(commandService.publishPartialUpdateAsync).not.toHaveBeenCalled();
768
1007
  });
769
1008
  it('should handle CommandService partial update failures', async () => {
@@ -788,8 +1027,7 @@ describe('MasterDataService', () => {
788
1027
  dataService.getItem.mockResolvedValue(existingData);
789
1028
  const updateError = new Error('Update command failed');
790
1029
  commandService.publishPartialUpdateAsync.mockRejectedValue(updateError);
791
- await expect(service.update(key, updateDto, { invokeContext: mockInvokeContext }))
792
- .rejects.toThrow('Update command failed');
1030
+ await expect(service.update(key, updateDto, { invokeContext: mockInvokeContext })).rejects.toThrow('Update command failed');
793
1031
  });
794
1032
  });
795
1033
  describe('delete - Error Handling', () => {
@@ -798,8 +1036,7 @@ describe('MasterDataService', () => {
798
1036
  const accessError = new Error('Access denied');
799
1037
  accessError.name = 'PrismaClientKnownRequestError';
800
1038
  dataService.getItem.mockRejectedValue(accessError);
801
- await expect(service.delete(key, { invokeContext: mockInvokeContext }))
802
- .rejects.toThrow('Access denied');
1039
+ await expect(service.delete(key, { invokeContext: mockInvokeContext })).rejects.toThrow('Access denied');
803
1040
  expect(commandService.publishPartialUpdateAsync).not.toHaveBeenCalled();
804
1041
  });
805
1042
  it('should handle deletion command failures', async () => {
@@ -820,8 +1057,7 @@ describe('MasterDataService', () => {
820
1057
  dataService.getItem.mockResolvedValue(existingData);
821
1058
  const deleteError = new Error('Delete command failed');
822
1059
  commandService.publishPartialUpdateAsync.mockRejectedValue(deleteError);
823
- await expect(service.delete(key, { invokeContext: mockInvokeContext }))
824
- .rejects.toThrow('Delete command failed');
1060
+ await expect(service.delete(key, { invokeContext: mockInvokeContext })).rejects.toThrow('Delete command failed');
825
1061
  });
826
1062
  });
827
1063
  });
@@ -858,7 +1094,9 @@ describe('MasterDataService', () => {
858
1094
  updatedAt: new Date(),
859
1095
  };
860
1096
  commandService.publishAsync.mockResolvedValue(mockCommandResult);
861
- const result = await service.create(createDto, { invokeContext: mockInvokeContext });
1097
+ const result = await service.create(createDto, {
1098
+ invokeContext: mockInvokeContext,
1099
+ });
862
1100
  expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
863
1101
  expect(result.name).toBe('');
864
1102
  expect(result.code).toBe('');
@@ -873,7 +1111,7 @@ describe('MasterDataService', () => {
873
1111
  attributes: {
874
1112
  specialKey: 'value with 特殊文字',
875
1113
  unicodeKey: '🚀🎉',
876
- jsonString: '{"nested": "value"}'
1114
+ jsonString: '{"nested": "value"}',
877
1115
  },
878
1116
  };
879
1117
  dataService.getItem.mockResolvedValue(null);
@@ -893,7 +1131,9 @@ describe('MasterDataService', () => {
893
1131
  updatedAt: new Date(),
894
1132
  };
895
1133
  commandService.publishAsync.mockResolvedValue(mockCommandResult);
896
- const result = await service.create(createDto, { invokeContext: mockInvokeContext });
1134
+ const result = await service.create(createDto, {
1135
+ invokeContext: mockInvokeContext,
1136
+ });
897
1137
  expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
898
1138
  expect(result.code).toBe('DATA_CODE_特殊文字@#$%');
899
1139
  expect(result.name).toBe('Test Data with 特殊文字 & symbols!');
@@ -928,7 +1168,9 @@ describe('MasterDataService', () => {
928
1168
  updatedAt: new Date(),
929
1169
  };
930
1170
  commandService.publishAsync.mockResolvedValue(mockCommandResult);
931
- const result = await service.create(createDto, { invokeContext: mockInvokeContext });
1171
+ const result = await service.create(createDto, {
1172
+ invokeContext: mockInvokeContext,
1173
+ });
932
1174
  expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
933
1175
  expect(Object.keys(result.attributes)).toHaveLength(100);
934
1176
  });
@@ -956,7 +1198,9 @@ describe('MasterDataService', () => {
956
1198
  updatedAt: new Date(),
957
1199
  };
958
1200
  commandService.publishAsync.mockResolvedValue(mockCommandResult);
959
- const result = await service.create(createDto, { invokeContext: mockInvokeContext });
1201
+ const result = await service.create(createDto, {
1202
+ invokeContext: mockInvokeContext,
1203
+ });
960
1204
  expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
961
1205
  expect(result.seq).toBe(-1);
962
1206
  });
@@ -990,7 +1234,9 @@ describe('MasterDataService', () => {
990
1234
  updatedAt: new Date(),
991
1235
  };
992
1236
  commandService.publishPartialUpdateAsync.mockResolvedValue(mockUpdateResult);
993
- const result = await service.update(key, updateDto, { invokeContext: mockInvokeContext });
1237
+ const result = await service.update(key, updateDto, {
1238
+ invokeContext: mockInvokeContext,
1239
+ });
994
1240
  expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
995
1241
  expect(result.attributes).toBeNull();
996
1242
  });
@@ -1020,7 +1266,9 @@ describe('MasterDataService', () => {
1020
1266
  updatedAt: new Date(),
1021
1267
  };
1022
1268
  commandService.publishPartialUpdateAsync.mockResolvedValue(mockUpdateResult);
1023
- const result = await service.update(key, updateDto, { invokeContext: mockInvokeContext });
1269
+ const result = await service.update(key, updateDto, {
1270
+ invokeContext: mockInvokeContext,
1271
+ });
1024
1272
  expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
1025
1273
  expect(result.name).toBe(longName);
1026
1274
  expect(result.name.length).toBe(1000);
@@ -1074,7 +1322,9 @@ describe('MasterDataService', () => {
1074
1322
  updatedAt: new Date(),
1075
1323
  };
1076
1324
  commandService.publishAsync.mockResolvedValue(mockCommandResult);
1077
- const result = await service.create(createDto, { invokeContext: mockInvokeContext });
1325
+ const result = await service.create(createDto, {
1326
+ invokeContext: mockInvokeContext,
1327
+ });
1078
1328
  expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
1079
1329
  expect(result.version).toBe(3);
1080
1330
  expect(result.isDeleted).toBe(false);
@@ -1127,7 +1377,9 @@ describe('MasterDataService', () => {
1127
1377
  updatedAt: new Date(),
1128
1378
  };
1129
1379
  commandService.publishAsync.mockResolvedValue(mockCommandResult);
1130
- const result = await service.create(createDto, { invokeContext: mockInvokeContext });
1380
+ const result = await service.create(createDto, {
1381
+ invokeContext: mockInvokeContext,
1382
+ });
1131
1383
  expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
1132
1384
  expect(result.version).toBe(5);
1133
1385
  expect(result.isDeleted).toBe(false);
@@ -1171,7 +1423,9 @@ describe('MasterDataService', () => {
1171
1423
  updatedAt: new Date(),
1172
1424
  };
1173
1425
  commandService.publishAsync.mockResolvedValue(mockCommandResult);
1174
- const result = await service.create(createDto, { invokeContext: mockInvokeContext });
1426
+ const result = await service.create(createDto, {
1427
+ invokeContext: mockInvokeContext,
1428
+ });
1175
1429
  expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
1176
1430
  expect(result.createdAt).toEqual(originalCreatedAt);
1177
1431
  expect(result.isDeleted).toBe(false);
@@ -1200,7 +1454,9 @@ describe('MasterDataService', () => {
1200
1454
  updatedAt: new Date(),
1201
1455
  };
1202
1456
  commandService.publishAsync.mockResolvedValue(mockCommandResult);
1203
- const result = await service.create(createDto, { invokeContext: mockInvokeContext });
1457
+ const result = await service.create(createDto, {
1458
+ invokeContext: mockInvokeContext,
1459
+ });
1204
1460
  expect(result).toBeInstanceOf(entities_1.MasterDataEntity);
1205
1461
  expect(result.tenantCode).toBe('NEW_TENANT');
1206
1462
  expect(result.version).toBe(1);
@@ -1278,9 +1534,10 @@ describe('MasterDataService', () => {
1278
1534
  commandService.publishAsync
1279
1535
  .mockResolvedValueOnce(mockCommandResult1)
1280
1536
  .mockRejectedValueOnce(versionConflictError);
1281
- const result1 = await service.create(createDto1, { invokeContext: mockInvokeContext });
1282
- await expect(service.create(createDto2, { invokeContext: mockInvokeContext }))
1283
- .rejects.toThrow('Version conflict');
1537
+ const result1 = await service.create(createDto1, {
1538
+ invokeContext: mockInvokeContext,
1539
+ });
1540
+ await expect(service.create(createDto2, { invokeContext: mockInvokeContext })).rejects.toThrow('Version conflict');
1284
1541
  expect(result1).toBeInstanceOf(entities_1.MasterDataEntity);
1285
1542
  expect(result1.name).toBe('First Creation');
1286
1543
  });
@@ -1329,7 +1586,9 @@ describe('MasterDataService', () => {
1329
1586
  commandService.publishPartialUpdateAsync.mockResolvedValue(mockDeleteResult);
1330
1587
  commandService.publishAsync.mockResolvedValue(mockRecreateResult);
1331
1588
  const deleteResult = await service.delete({ pk: existingData.pk, sk: existingData.sk }, { invokeContext: mockInvokeContext });
1332
- const recreateResult = await service.create(createDto, { invokeContext: mockInvokeContext });
1589
+ const recreateResult = await service.create(createDto, {
1590
+ invokeContext: mockInvokeContext,
1591
+ });
1333
1592
  expect(deleteResult.isDeleted).toBe(true);
1334
1593
  expect(recreateResult.isDeleted).toBe(false);
1335
1594
  expect(recreateResult.version).toBe(3);
@@ -1372,9 +1631,10 @@ describe('MasterDataService', () => {
1372
1631
  commandService.publishPartialUpdateAsync
1373
1632
  .mockResolvedValueOnce(mockUpdateResult1)
1374
1633
  .mockRejectedValueOnce(versionConflictError);
1375
- const result1 = await service.update(key, updateDto1, { invokeContext: mockInvokeContext });
1376
- await expect(service.update(key, updateDto2, { invokeContext: mockInvokeContext }))
1377
- .rejects.toThrow('Version conflict');
1634
+ const result1 = await service.update(key, updateDto1, {
1635
+ invokeContext: mockInvokeContext,
1636
+ });
1637
+ await expect(service.update(key, updateDto2, { invokeContext: mockInvokeContext })).rejects.toThrow('Version conflict');
1378
1638
  expect(result1.name).toBe('First Update');
1379
1639
  expect(result1.version).toBe(2);
1380
1640
  });