@dismissible/nestjs-dismissible 0.0.2-canary.8976e84.0 → 0.0.2-canary.a611bd3.0

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 (223) hide show
  1. package/README.md +58 -74
  2. package/package.json +19 -17
  3. package/src/api/dismissible-item-response.dto.d.ts +9 -0
  4. package/src/api/dismissible-item-response.dto.js +40 -0
  5. package/src/api/dismissible-item-response.dto.js.map +1 -0
  6. package/src/api/dismissible-item.mapper.d.ts +12 -0
  7. package/src/api/dismissible-item.mapper.js +30 -0
  8. package/src/api/dismissible-item.mapper.js.map +1 -0
  9. package/src/api/dismissible-item.mapper.spec.d.ts +1 -0
  10. package/src/api/dismissible-item.mapper.spec.js +43 -0
  11. package/src/api/dismissible-item.mapper.spec.js.map +1 -0
  12. package/src/api/{index.ts → index.d.ts} +1 -4
  13. package/src/api/index.js +8 -0
  14. package/src/api/index.js.map +1 -0
  15. package/src/api/use-cases/{api-tags.constants.ts → api-tags.constants.d.ts} +1 -1
  16. package/src/api/use-cases/api-tags.constants.js +8 -0
  17. package/src/api/use-cases/api-tags.constants.js.map +1 -0
  18. package/src/api/use-cases/dismiss/dismiss.controller.d.ts +15 -0
  19. package/src/api/use-cases/dismiss/dismiss.controller.js +74 -0
  20. package/src/api/use-cases/dismiss/dismiss.controller.js.map +1 -0
  21. package/src/api/use-cases/dismiss/dismiss.controller.spec.d.ts +1 -0
  22. package/src/api/use-cases/dismiss/dismiss.controller.spec.js +37 -0
  23. package/src/api/use-cases/dismiss/dismiss.controller.spec.js.map +1 -0
  24. package/src/api/use-cases/dismiss/dismiss.response.dto.d.ts +12 -0
  25. package/src/api/use-cases/dismiss/dismiss.response.dto.js +12 -0
  26. package/src/api/use-cases/dismiss/dismiss.response.dto.js.map +1 -0
  27. package/src/api/use-cases/dismiss/index.js +6 -0
  28. package/src/api/use-cases/dismiss/index.js.map +1 -0
  29. package/src/api/use-cases/get-or-create/get-or-create.controller.d.ts +15 -0
  30. package/src/api/use-cases/get-or-create/get-or-create.controller.js +70 -0
  31. package/src/api/use-cases/get-or-create/get-or-create.controller.js.map +1 -0
  32. package/src/api/use-cases/get-or-create/get-or-create.controller.spec.d.ts +1 -0
  33. package/src/api/use-cases/get-or-create/get-or-create.controller.spec.js +32 -0
  34. package/src/api/use-cases/get-or-create/get-or-create.controller.spec.js.map +1 -0
  35. package/src/api/use-cases/get-or-create/get-or-create.response.dto.d.ts +12 -0
  36. package/src/api/use-cases/get-or-create/get-or-create.response.dto.js +12 -0
  37. package/src/api/use-cases/get-or-create/get-or-create.response.dto.js.map +1 -0
  38. package/src/api/use-cases/get-or-create/{index.ts → index.d.ts} +0 -1
  39. package/src/api/use-cases/get-or-create/index.js +6 -0
  40. package/src/api/use-cases/get-or-create/index.js.map +1 -0
  41. package/src/api/use-cases/index.js +7 -0
  42. package/src/api/use-cases/index.js.map +1 -0
  43. package/src/api/use-cases/restore/index.js +6 -0
  44. package/src/api/use-cases/restore/index.js.map +1 -0
  45. package/src/api/use-cases/restore/restore.controller.d.ts +15 -0
  46. package/src/api/use-cases/restore/restore.controller.js +74 -0
  47. package/src/api/use-cases/restore/restore.controller.js.map +1 -0
  48. package/src/api/use-cases/restore/restore.controller.spec.d.ts +1 -0
  49. package/src/api/use-cases/restore/restore.controller.spec.js +37 -0
  50. package/src/api/use-cases/restore/restore.controller.spec.js.map +1 -0
  51. package/src/api/use-cases/restore/restore.response.dto.d.ts +12 -0
  52. package/src/api/use-cases/restore/restore.response.dto.js +12 -0
  53. package/src/api/use-cases/restore/restore.response.dto.js.map +1 -0
  54. package/src/api/validation/index.d.ts +2 -0
  55. package/src/api/validation/index.js +6 -0
  56. package/src/api/validation/index.js.map +1 -0
  57. package/src/api/validation/param-validation.pipe.d.ts +11 -0
  58. package/src/api/validation/param-validation.pipe.js +36 -0
  59. package/src/api/validation/param-validation.pipe.js.map +1 -0
  60. package/src/api/validation/param-validation.pipe.spec.d.ts +1 -0
  61. package/src/api/validation/param-validation.pipe.spec.js +269 -0
  62. package/src/api/validation/param-validation.pipe.spec.js.map +1 -0
  63. package/src/api/validation/param.decorators.d.ts +28 -0
  64. package/src/api/validation/param.decorators.js +36 -0
  65. package/src/api/validation/param.decorators.js.map +1 -0
  66. package/src/core/dismissible-core.service.d.ts +56 -0
  67. package/src/core/dismissible-core.service.js +147 -0
  68. package/src/core/dismissible-core.service.js.map +1 -0
  69. package/src/core/dismissible-core.service.spec.d.ts +1 -0
  70. package/src/core/dismissible-core.service.spec.js +309 -0
  71. package/src/core/dismissible-core.service.spec.js.map +1 -0
  72. package/src/core/dismissible.service.d.ts +45 -0
  73. package/src/core/dismissible.service.js +127 -0
  74. package/src/core/dismissible.service.js.map +1 -0
  75. package/src/core/dismissible.service.spec.d.ts +1 -0
  76. package/src/core/dismissible.service.spec.js +159 -0
  77. package/src/core/dismissible.service.spec.js.map +1 -0
  78. package/src/core/hook-runner.service.d.ts +88 -0
  79. package/src/core/hook-runner.service.js +226 -0
  80. package/src/core/hook-runner.service.js.map +1 -0
  81. package/src/core/hook-runner.service.spec.d.ts +1 -0
  82. package/src/core/hook-runner.service.spec.js +538 -0
  83. package/src/core/hook-runner.service.spec.js.map +1 -0
  84. package/src/core/{index.ts → index.d.ts} +0 -1
  85. package/src/core/index.js +9 -0
  86. package/src/core/index.js.map +1 -0
  87. package/src/core/lifecycle-hook.interface.d.ts +1 -0
  88. package/src/core/lifecycle-hook.interface.js +7 -0
  89. package/src/core/lifecycle-hook.interface.js.map +1 -0
  90. package/src/core/service-responses.interface.d.ts +28 -0
  91. package/src/core/service-responses.interface.js +3 -0
  92. package/src/core/service-responses.interface.js.map +1 -0
  93. package/src/dismissible.module.d.ts +13 -0
  94. package/src/dismissible.module.integration.spec.d.ts +1 -0
  95. package/src/dismissible.module.integration.spec.js +529 -0
  96. package/src/dismissible.module.integration.spec.js.map +1 -0
  97. package/src/dismissible.module.js +77 -0
  98. package/src/dismissible.module.js.map +1 -0
  99. package/src/events/dismissible.events.d.ts +45 -0
  100. package/src/events/dismissible.events.js +53 -0
  101. package/src/events/dismissible.events.js.map +1 -0
  102. package/src/events/events.constants.d.ts +17 -0
  103. package/src/events/events.constants.js +17 -0
  104. package/src/events/events.constants.js.map +1 -0
  105. package/src/events/index.js +6 -0
  106. package/src/events/index.js.map +1 -0
  107. package/src/exceptions/dismissible.exceptions.d.ts +26 -0
  108. package/src/exceptions/dismissible.exceptions.js +49 -0
  109. package/src/exceptions/dismissible.exceptions.js.map +1 -0
  110. package/src/exceptions/dismissible.exceptions.spec.d.ts +1 -0
  111. package/src/exceptions/dismissible.exceptions.spec.js +40 -0
  112. package/src/exceptions/dismissible.exceptions.spec.js.map +1 -0
  113. package/src/exceptions/index.js +5 -0
  114. package/src/exceptions/index.js.map +1 -0
  115. package/src/{index.ts → index.d.ts} +1 -1
  116. package/src/index.js +12 -0
  117. package/src/index.js.map +1 -0
  118. package/src/response/dtos/base-response.dto.d.ts +6 -0
  119. package/src/response/dtos/base-response.dto.js +18 -0
  120. package/src/response/dtos/base-response.dto.js.map +1 -0
  121. package/src/response/dtos/error-response.dto.d.ts +19 -0
  122. package/src/response/dtos/error-response.dto.js +39 -0
  123. package/src/response/dtos/error-response.dto.js.map +1 -0
  124. package/src/response/dtos/index.js +7 -0
  125. package/src/response/dtos/index.js.map +1 -0
  126. package/src/response/dtos/{success-response.dto.ts → success-response.dto.d.ts} +6 -12
  127. package/src/response/dtos/success-response.dto.js +34 -0
  128. package/src/response/dtos/success-response.dto.js.map +1 -0
  129. package/src/response/http-exception-filter.d.ts +4 -0
  130. package/src/response/http-exception-filter.js +24 -0
  131. package/src/response/http-exception-filter.js.map +1 -0
  132. package/src/response/http-exception-filter.spec.d.ts +1 -0
  133. package/src/response/http-exception-filter.spec.js +137 -0
  134. package/src/response/http-exception-filter.spec.js.map +1 -0
  135. package/src/response/index.js +8 -0
  136. package/src/response/index.js.map +1 -0
  137. package/src/response/response.module.d.ts +2 -0
  138. package/src/response/response.module.js +17 -0
  139. package/src/response/response.module.js.map +1 -0
  140. package/src/response/response.service.d.ts +6 -0
  141. package/src/response/response.service.js +25 -0
  142. package/src/response/response.service.js.map +1 -0
  143. package/src/response/response.service.spec.d.ts +1 -0
  144. package/src/response/response.service.spec.js +58 -0
  145. package/src/response/response.service.spec.js.map +1 -0
  146. package/src/testing/factories.d.ts +14 -0
  147. package/src/testing/factories.js +58 -0
  148. package/src/testing/factories.js.map +1 -0
  149. package/src/testing/index.js +5 -0
  150. package/src/testing/index.js.map +1 -0
  151. package/src/utils/date/date.service.d.ts +8 -0
  152. package/src/utils/date/date.service.js +24 -0
  153. package/src/utils/date/date.service.js.map +1 -0
  154. package/src/utils/date/date.service.spec.d.ts +1 -0
  155. package/src/utils/date/date.service.spec.js +83 -0
  156. package/src/utils/date/date.service.spec.js.map +1 -0
  157. package/src/utils/date/index.js +5 -0
  158. package/src/utils/date/index.js.map +1 -0
  159. package/src/utils/dismissible.helper.d.ts +4 -0
  160. package/src/utils/dismissible.helper.js +15 -0
  161. package/src/utils/dismissible.helper.js.map +1 -0
  162. package/src/utils/index.js +7 -0
  163. package/src/utils/index.js.map +1 -0
  164. package/src/validation/dismissible-input.dto.d.ts +21 -0
  165. package/src/validation/dismissible-input.dto.js +54 -0
  166. package/src/validation/dismissible-input.dto.js.map +1 -0
  167. package/src/validation/index.d.ts +1 -0
  168. package/src/validation/index.js +5 -0
  169. package/src/validation/index.js.map +1 -0
  170. package/jest.config.ts +0 -29
  171. package/project.json +0 -42
  172. package/src/api/dismissible-item-response.dto.ts +0 -38
  173. package/src/api/dismissible-item.mapper.spec.ts +0 -63
  174. package/src/api/dismissible-item.mapper.ts +0 -33
  175. package/src/api/use-cases/dismiss/dismiss.controller.spec.ts +0 -42
  176. package/src/api/use-cases/dismiss/dismiss.controller.ts +0 -63
  177. package/src/api/use-cases/dismiss/dismiss.response.dto.ts +0 -7
  178. package/src/api/use-cases/get-or-create/get-or-create.controller.spec.ts +0 -76
  179. package/src/api/use-cases/get-or-create/get-or-create.controller.ts +0 -106
  180. package/src/api/use-cases/get-or-create/get-or-create.request.dto.ts +0 -17
  181. package/src/api/use-cases/get-or-create/get-or-create.response.dto.ts +0 -7
  182. package/src/api/use-cases/restore/restore.controller.spec.ts +0 -42
  183. package/src/api/use-cases/restore/restore.controller.ts +0 -63
  184. package/src/api/use-cases/restore/restore.response.dto.ts +0 -7
  185. package/src/core/create-options.ts +0 -9
  186. package/src/core/dismissible-core.service.spec.ts +0 -357
  187. package/src/core/dismissible-core.service.ts +0 -161
  188. package/src/core/dismissible.service.spec.ts +0 -144
  189. package/src/core/dismissible.service.ts +0 -188
  190. package/src/core/hook-runner.service.spec.ts +0 -304
  191. package/src/core/hook-runner.service.ts +0 -267
  192. package/src/core/lifecycle-hook.interface.ts +0 -122
  193. package/src/core/service-responses.interface.ts +0 -34
  194. package/src/dismissible.module.ts +0 -83
  195. package/src/events/dismissible.events.ts +0 -105
  196. package/src/events/events.constants.ts +0 -21
  197. package/src/exceptions/dismissible.exceptions.spec.ts +0 -50
  198. package/src/exceptions/dismissible.exceptions.ts +0 -69
  199. package/src/request/index.ts +0 -2
  200. package/src/request/request-context.decorator.ts +0 -14
  201. package/src/request/request-context.interface.ts +0 -6
  202. package/src/response/dtos/base-response.dto.ts +0 -11
  203. package/src/response/dtos/error-response.dto.ts +0 -36
  204. package/src/response/http-exception-filter.ts +0 -21
  205. package/src/response/response.module.ts +0 -9
  206. package/src/response/response.service.spec.ts +0 -86
  207. package/src/response/response.service.ts +0 -20
  208. package/src/testing/factories.ts +0 -45
  209. package/src/utils/date/date.service.spec.ts +0 -104
  210. package/src/utils/date/date.service.ts +0 -19
  211. package/src/utils/dismissible.helper.ts +0 -9
  212. package/tsconfig.json +0 -13
  213. package/tsconfig.lib.json +0 -14
  214. /package/src/api/use-cases/dismiss/{index.ts → index.d.ts} +0 -0
  215. /package/src/api/use-cases/{index.ts → index.d.ts} +0 -0
  216. /package/src/api/use-cases/restore/{index.ts → index.d.ts} +0 -0
  217. /package/src/events/{index.ts → index.d.ts} +0 -0
  218. /package/src/exceptions/{index.ts → index.d.ts} +0 -0
  219. /package/src/response/dtos/{index.ts → index.d.ts} +0 -0
  220. /package/src/response/{index.ts → index.d.ts} +0 -0
  221. /package/src/testing/{index.ts → index.d.ts} +0 -0
  222. /package/src/utils/date/{index.ts → index.d.ts} +0 -0
  223. /package/src/utils/{index.ts → index.d.ts} +0 -0
@@ -0,0 +1,309 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ts_jest_mocker_1 = require("ts-jest-mocker");
4
+ const dismissible_core_service_1 = require("./dismissible-core.service");
5
+ const factories_1 = require("../testing/factories");
6
+ const exceptions_1 = require("../exceptions");
7
+ const nestjs_dismissible_item_1 = require("@dismissible/nestjs-dismissible-item");
8
+ const nestjs_validation_1 = require("@dismissible/nestjs-validation");
9
+ const common_1 = require("@nestjs/common");
10
+ const dismissible_helper_1 = require("../utils/dismissible.helper");
11
+ const date_service_1 = require("../utils/date/date.service");
12
+ describe('DismissibleCoreService', () => {
13
+ let service;
14
+ let storage;
15
+ let mockDateService;
16
+ let mockLogger;
17
+ let itemFactory;
18
+ let validationService;
19
+ let dismissibleHelper;
20
+ beforeEach(() => {
21
+ mockDateService = (0, ts_jest_mocker_1.mock)(date_service_1.DateService);
22
+ mockDateService.getNow.mockReturnValue(new Date('2024-01-15T10:00:00.000Z'));
23
+ mockLogger = (0, ts_jest_mocker_1.mock)({
24
+ failIfMockNotProvided: false,
25
+ });
26
+ storage = (0, ts_jest_mocker_1.mock)({
27
+ failIfMockNotProvided: false,
28
+ });
29
+ dismissibleHelper = (0, ts_jest_mocker_1.mock)(dismissible_helper_1.DismissibleHelper, { failIfMockNotProvided: false });
30
+ itemFactory = (0, ts_jest_mocker_1.mock)(nestjs_dismissible_item_1.DismissibleItemFactory);
31
+ validationService = (0, ts_jest_mocker_1.mock)(nestjs_validation_1.ValidationService, { failIfMockNotProvided: false });
32
+ validationService.validateInstance.mockResolvedValue(undefined);
33
+ service = new dismissible_core_service_1.DismissibleCoreService(storage, mockDateService, mockLogger, itemFactory, validationService, dismissibleHelper);
34
+ });
35
+ afterEach(() => {
36
+ jest.clearAllMocks();
37
+ });
38
+ describe('get', () => {
39
+ it('should return item when it exists', async () => {
40
+ const userId = 'user-123';
41
+ const existingItem = (0, factories_1.createTestItem)({ id: 'existing-item', userId });
42
+ storage.get.mockResolvedValue(existingItem);
43
+ const result = await service.get('existing-item', userId);
44
+ expect(result).toEqual(existingItem);
45
+ expect(storage.get).toHaveBeenCalledWith(userId, 'existing-item');
46
+ });
47
+ it('should return null when item does not exist', async () => {
48
+ const userId = 'user-123';
49
+ storage.get.mockResolvedValue(null);
50
+ const result = await service.get('non-existent', userId);
51
+ expect(result).toBeNull();
52
+ expect(storage.get).toHaveBeenCalledWith(userId, 'non-existent');
53
+ });
54
+ });
55
+ describe('create', () => {
56
+ it('should create a new item', async () => {
57
+ const testDate = new Date('2024-01-15T10:00:00.000Z');
58
+ const userId = 'user-123';
59
+ const newItem = (0, factories_1.createTestItem)({ id: 'new-item', userId, createdAt: testDate });
60
+ storage.create.mockResolvedValue(newItem);
61
+ mockDateService.getNow.mockReturnValue(testDate);
62
+ itemFactory.create.mockReturnValue(newItem);
63
+ const result = await service.create('new-item', userId);
64
+ expect(result.id).toBe('new-item');
65
+ expect(result.userId).toBe(userId);
66
+ expect(result.createdAt).toBeInstanceOf(Date);
67
+ expect(result.dismissedAt).toBeUndefined();
68
+ expect(storage.create).toHaveBeenCalledWith(newItem);
69
+ });
70
+ it('should validate item before storage', async () => {
71
+ const userId = 'user-123';
72
+ const testDate = new Date('2024-01-15T10:00:00.000Z');
73
+ const newItem = (0, factories_1.createTestItem)({ id: 'new-item', userId, createdAt: testDate });
74
+ storage.create.mockResolvedValue(newItem);
75
+ mockDateService.getNow.mockReturnValue(testDate);
76
+ itemFactory.create.mockReturnValue(newItem);
77
+ await service.create('new-item', userId);
78
+ expect(validationService.validateInstance).toHaveBeenCalledWith(newItem);
79
+ });
80
+ it('should throw BadRequestException when validation fails', async () => {
81
+ const userId = 'user-123';
82
+ const testDate = new Date('2024-01-15T10:00:00.000Z');
83
+ const newItem = (0, factories_1.createTestItem)({ id: 'new-item', userId, createdAt: testDate });
84
+ mockDateService.getNow.mockReturnValue(testDate);
85
+ itemFactory.create.mockReturnValue(newItem);
86
+ validationService.validateInstance.mockRejectedValue(new common_1.BadRequestException('id must be a string'));
87
+ await expect(service.create('new-item', userId)).rejects.toThrow(common_1.BadRequestException);
88
+ expect(storage.create).not.toHaveBeenCalled();
89
+ });
90
+ });
91
+ describe('getOrCreate', () => {
92
+ it('should create a new item when it does not exist', async () => {
93
+ const testDate = new Date('2024-01-15T10:00:00.000Z');
94
+ const userId = 'user-123';
95
+ const newItem = (0, factories_1.createTestItem)({ id: 'new-item', userId, createdAt: testDate });
96
+ storage.get.mockResolvedValue(null);
97
+ storage.create.mockResolvedValue(newItem);
98
+ mockDateService.getNow.mockReturnValue(testDate);
99
+ itemFactory.create.mockReturnValue(newItem);
100
+ const result = await service.getOrCreate('new-item', userId);
101
+ expect(result.created).toBe(true);
102
+ expect(result.item.id).toBe('new-item');
103
+ expect(result.item.userId).toBe(userId);
104
+ expect(result.item.createdAt).toBeInstanceOf(Date);
105
+ expect(result.item.dismissedAt).toBeUndefined();
106
+ expect(storage.create).toHaveBeenCalledWith(newItem);
107
+ });
108
+ it('should return existing item when it exists', async () => {
109
+ const userId = 'user-123';
110
+ const existingItem = (0, factories_1.createTestItem)({ id: 'existing-item', userId });
111
+ storage.get.mockResolvedValue(existingItem);
112
+ const result = await service.getOrCreate('existing-item', userId);
113
+ expect(result.created).toBe(false);
114
+ expect(result.item).toEqual(existingItem);
115
+ expect(storage.get).toHaveBeenCalledWith(userId, 'existing-item');
116
+ });
117
+ });
118
+ describe('dismiss', () => {
119
+ it('should dismiss an existing item', async () => {
120
+ const userId = 'user-123';
121
+ const item = (0, factories_1.createTestItem)({ id: 'test-item', userId });
122
+ const previousItem = (0, factories_1.createTestItem)({ id: 'test-item', userId });
123
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({ id: 'test-item', userId });
124
+ const testDate = new Date('2024-01-15T12:00:00.000Z');
125
+ storage.get.mockResolvedValue(item);
126
+ storage.update.mockResolvedValue(dismissedItem);
127
+ itemFactory.clone.mockReturnValue(previousItem);
128
+ mockDateService.getNow.mockReturnValue(testDate);
129
+ itemFactory.createDismissed.mockReturnValue(dismissedItem);
130
+ dismissibleHelper.isDismissed.mockReturnValue(false);
131
+ const result = await service.dismiss('test-item', userId);
132
+ expect(result.item.dismissedAt).toBeDefined();
133
+ expect(result.previousItem.dismissedAt).toBeUndefined();
134
+ expect(storage.update).toHaveBeenCalledWith(dismissedItem);
135
+ expect(storage.get).toHaveBeenCalledWith(userId, 'test-item');
136
+ });
137
+ it('should throw ItemNotFoundException for non-existent item', async () => {
138
+ const userId = 'user-123';
139
+ storage.get.mockResolvedValue(null);
140
+ await expect(service.dismiss('non-existent', userId)).rejects.toThrow(exceptions_1.ItemNotFoundException);
141
+ });
142
+ it('should throw ItemAlreadyDismissedException for already dismissed item', async () => {
143
+ const userId = 'user-123';
144
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({ id: 'dismissed-item', userId });
145
+ storage.get.mockResolvedValue(dismissedItem);
146
+ dismissibleHelper.isDismissed.mockReturnValue(true);
147
+ await expect(service.dismiss('dismissed-item', userId)).rejects.toThrow(exceptions_1.ItemAlreadyDismissedException);
148
+ });
149
+ it('should return the previous item state', async () => {
150
+ const userId = 'user-123';
151
+ const item = (0, factories_1.createTestItem)({
152
+ id: 'test-item',
153
+ userId,
154
+ });
155
+ const previousItem = (0, factories_1.createTestItem)({
156
+ id: 'test-item',
157
+ userId,
158
+ });
159
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({
160
+ id: 'test-item',
161
+ userId,
162
+ });
163
+ const testDate = new Date('2024-01-15T12:00:00.000Z');
164
+ storage.get.mockResolvedValue(item);
165
+ storage.update.mockResolvedValue(dismissedItem);
166
+ itemFactory.clone.mockReturnValue(previousItem);
167
+ mockDateService.getNow.mockReturnValue(testDate);
168
+ itemFactory.createDismissed.mockReturnValue(dismissedItem);
169
+ dismissibleHelper.isDismissed.mockReturnValue(false);
170
+ const result = await service.dismiss('test-item', userId);
171
+ expect(result.previousItem.id).toBe(item.id);
172
+ expect(result.previousItem.dismissedAt).toBeUndefined();
173
+ });
174
+ });
175
+ describe('restore', () => {
176
+ it('should restore a dismissed item', async () => {
177
+ const userId = 'user-123';
178
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({ id: 'dismissed-item', userId });
179
+ const previousItem = (0, factories_1.createDismissedTestItem)({ id: 'dismissed-item', userId });
180
+ const restoredItem = (0, factories_1.createTestItem)({ id: 'dismissed-item', userId });
181
+ storage.get.mockResolvedValue(dismissedItem);
182
+ storage.update.mockResolvedValue(restoredItem);
183
+ itemFactory.clone.mockReturnValue(previousItem);
184
+ itemFactory.createRestored.mockReturnValue(restoredItem);
185
+ dismissibleHelper.isDismissed.mockReturnValue(true);
186
+ const result = await service.restore('dismissed-item', userId);
187
+ expect(result.item.dismissedAt).toBeUndefined();
188
+ expect(result.previousItem.dismissedAt).toBeDefined();
189
+ expect(storage.update).toHaveBeenCalledWith(restoredItem);
190
+ expect(storage.get).toHaveBeenCalledWith(userId, 'dismissed-item');
191
+ });
192
+ it('should throw ItemNotFoundException for non-existent item', async () => {
193
+ const userId = 'user-123';
194
+ storage.get.mockResolvedValue(null);
195
+ await expect(service.restore('non-existent', userId)).rejects.toThrow(exceptions_1.ItemNotFoundException);
196
+ });
197
+ it('should throw ItemNotDismissedException for non-dismissed item', async () => {
198
+ const userId = 'user-123';
199
+ const item = (0, factories_1.createTestItem)({ id: 'active-item', userId });
200
+ storage.get.mockResolvedValue(item);
201
+ dismissibleHelper.isDismissed.mockReturnValue(false);
202
+ await expect(service.restore('active-item', userId)).rejects.toThrow(exceptions_1.ItemNotDismissedException);
203
+ });
204
+ it('should return the previous item state', async () => {
205
+ const userId = 'user-123';
206
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({
207
+ id: 'dismissed-item',
208
+ userId,
209
+ });
210
+ const previousItem = (0, factories_1.createDismissedTestItem)({
211
+ id: 'dismissed-item',
212
+ userId,
213
+ });
214
+ const restoredItem = (0, factories_1.createTestItem)({
215
+ id: 'dismissed-item',
216
+ userId,
217
+ });
218
+ storage.get.mockResolvedValue(dismissedItem);
219
+ storage.update.mockResolvedValue(restoredItem);
220
+ itemFactory.clone.mockReturnValue(previousItem);
221
+ itemFactory.createRestored.mockReturnValue(restoredItem);
222
+ dismissibleHelper.isDismissed.mockReturnValue(true);
223
+ const result = await service.restore('dismissed-item', userId);
224
+ expect(result.previousItem.id).toBe(dismissedItem.id);
225
+ expect(result.previousItem.dismissedAt).toBeDefined();
226
+ });
227
+ });
228
+ describe('validation', () => {
229
+ it('should throw BadRequestException when validation fails on create', async () => {
230
+ const userId = 'user-123';
231
+ const testDate = new Date('2024-01-15T10:00:00.000Z');
232
+ const newItem = (0, factories_1.createTestItem)({ id: 'new-item', userId, createdAt: testDate });
233
+ storage.get.mockResolvedValue(null);
234
+ mockDateService.getNow.mockReturnValue(testDate);
235
+ itemFactory.create.mockReturnValue(newItem);
236
+ validationService.validateInstance.mockRejectedValue(new common_1.BadRequestException('id must be a string'));
237
+ await expect(service.getOrCreate('new-item', userId)).rejects.toThrow(common_1.BadRequestException);
238
+ expect(storage.create).not.toHaveBeenCalled();
239
+ });
240
+ it('should throw BadRequestException when validation fails on dismiss', async () => {
241
+ const userId = 'user-123';
242
+ const item = (0, factories_1.createTestItem)({ id: 'test-item', userId });
243
+ const previousItem = (0, factories_1.createTestItem)({ id: 'test-item', userId });
244
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({ id: 'test-item', userId });
245
+ const testDate = new Date('2024-01-15T12:00:00.000Z');
246
+ storage.get.mockResolvedValue(item);
247
+ itemFactory.clone.mockReturnValue(previousItem);
248
+ mockDateService.getNow.mockReturnValue(testDate);
249
+ itemFactory.createDismissed.mockReturnValue(dismissedItem);
250
+ dismissibleHelper.isDismissed.mockReturnValue(false);
251
+ validationService.validateInstance.mockRejectedValue(new common_1.BadRequestException('dismissedAt must be a date'));
252
+ await expect(service.dismiss('test-item', userId)).rejects.toThrow(common_1.BadRequestException);
253
+ expect(storage.update).not.toHaveBeenCalled();
254
+ });
255
+ it('should throw BadRequestException when validation fails on restore', async () => {
256
+ const userId = 'user-123';
257
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({ id: 'dismissed-item', userId });
258
+ const previousItem = (0, factories_1.createDismissedTestItem)({ id: 'dismissed-item', userId });
259
+ const restoredItem = (0, factories_1.createTestItem)({ id: 'dismissed-item', userId });
260
+ storage.get.mockResolvedValue(dismissedItem);
261
+ itemFactory.clone.mockReturnValue(previousItem);
262
+ itemFactory.createRestored.mockReturnValue(restoredItem);
263
+ dismissibleHelper.isDismissed.mockReturnValue(true);
264
+ validationService.validateInstance.mockRejectedValue(new common_1.BadRequestException('id must be a string'));
265
+ await expect(service.restore('dismissed-item', userId)).rejects.toThrow(common_1.BadRequestException);
266
+ expect(storage.update).not.toHaveBeenCalled();
267
+ });
268
+ it('should validate item when creating', async () => {
269
+ const userId = 'user-123';
270
+ const testDate = new Date('2024-01-15T10:00:00.000Z');
271
+ const newItem = (0, factories_1.createTestItem)({ id: 'new-item', userId, createdAt: testDate });
272
+ storage.get.mockResolvedValue(null);
273
+ storage.create.mockResolvedValue(newItem);
274
+ mockDateService.getNow.mockReturnValue(testDate);
275
+ itemFactory.create.mockReturnValue(newItem);
276
+ await service.getOrCreate('new-item', userId);
277
+ expect(validationService.validateInstance).toHaveBeenCalledWith(newItem);
278
+ });
279
+ it('should validate item when dismissing', async () => {
280
+ const userId = 'user-123';
281
+ const item = (0, factories_1.createTestItem)({ id: 'test-item', userId });
282
+ const previousItem = (0, factories_1.createTestItem)({ id: 'test-item', userId });
283
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({ id: 'test-item', userId });
284
+ const testDate = new Date('2024-01-15T12:00:00.000Z');
285
+ storage.get.mockResolvedValue(item);
286
+ storage.update.mockResolvedValue(dismissedItem);
287
+ itemFactory.clone.mockReturnValue(previousItem);
288
+ mockDateService.getNow.mockReturnValue(testDate);
289
+ itemFactory.createDismissed.mockReturnValue(dismissedItem);
290
+ dismissibleHelper.isDismissed.mockReturnValue(false);
291
+ await service.dismiss('test-item', userId);
292
+ expect(validationService.validateInstance).toHaveBeenCalledWith(dismissedItem);
293
+ });
294
+ it('should validate item when restoring', async () => {
295
+ const userId = 'user-123';
296
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({ id: 'dismissed-item', userId });
297
+ const previousItem = (0, factories_1.createDismissedTestItem)({ id: 'dismissed-item', userId });
298
+ const restoredItem = (0, factories_1.createTestItem)({ id: 'dismissed-item', userId });
299
+ storage.get.mockResolvedValue(dismissedItem);
300
+ storage.update.mockResolvedValue(restoredItem);
301
+ itemFactory.clone.mockReturnValue(previousItem);
302
+ itemFactory.createRestored.mockReturnValue(restoredItem);
303
+ dismissibleHelper.isDismissed.mockReturnValue(true);
304
+ await service.restore('dismissed-item', userId);
305
+ expect(validationService.validateInstance).toHaveBeenCalledWith(restoredItem);
306
+ });
307
+ });
308
+ });
309
+ //# sourceMappingURL=dismissible-core.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dismissible-core.service.spec.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/core/dismissible-core.service.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { EventEmitter2 } from '@nestjs/event-emitter';
2
+ import { DismissibleCoreService } from './dismissible-core.service';
3
+ import { HookRunner } from './hook-runner.service';
4
+ import { IDismissibleLogger } from '@dismissible/nestjs-logger';
5
+ import { IGetOrCreateServiceResponse, IDismissServiceResponse, IRestoreServiceResponse } from './service-responses.interface';
6
+ import { IRequestContext } from '@dismissible/nestjs-dismissible-request';
7
+ import { ValidationService } from '@dismissible/nestjs-validation';
8
+ /**
9
+ * Main orchestration service for dismissible operations.
10
+ * Coordinates core logic, hooks, and events.
11
+ */
12
+ export declare class DismissibleService {
13
+ private readonly coreService;
14
+ private readonly hookRunner;
15
+ private readonly eventEmitter;
16
+ private readonly logger;
17
+ private readonly validationService;
18
+ constructor(coreService: DismissibleCoreService, hookRunner: HookRunner, eventEmitter: EventEmitter2, logger: IDismissibleLogger, validationService: ValidationService);
19
+ /**
20
+ * Validates input parameters for all service methods.
21
+ * Provides defense in depth when the service is used directly without controllers.
22
+ */
23
+ private validateInput;
24
+ /**
25
+ * Get an existing item or create a new one.
26
+ * @param itemId The item identifier
27
+ * @param userId The user identifier (required)
28
+ * @param context Optional request context for tracing
29
+ */
30
+ getOrCreate(itemId: string, userId: string, context?: IRequestContext): Promise<IGetOrCreateServiceResponse>;
31
+ /**
32
+ * Dismiss an item.
33
+ * @param itemId The item identifier
34
+ * @param userId The user identifier (required)
35
+ * @param context Optional request context for tracing
36
+ */
37
+ dismiss(itemId: string, userId: string, context?: IRequestContext): Promise<IDismissServiceResponse>;
38
+ /**
39
+ * Restore a dismissed item.
40
+ * @param itemId The item identifier
41
+ * @param userId The user identifier (required)
42
+ * @param context Optional request context for tracing
43
+ */
44
+ restore(itemId: string, userId: string, context?: IRequestContext): Promise<IRestoreServiceResponse>;
45
+ }
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DismissibleService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const event_emitter_1 = require("@nestjs/event-emitter");
7
+ const dismissible_core_service_1 = require("./dismissible-core.service");
8
+ const hook_runner_service_1 = require("./hook-runner.service");
9
+ const nestjs_logger_1 = require("@dismissible/nestjs-logger");
10
+ const events_1 = require("../events");
11
+ const events_2 = require("../events");
12
+ const nestjs_validation_1 = require("@dismissible/nestjs-validation");
13
+ const validation_1 = require("../validation");
14
+ /**
15
+ * Main orchestration service for dismissible operations.
16
+ * Coordinates core logic, hooks, and events.
17
+ */
18
+ let DismissibleService = class DismissibleService {
19
+ constructor(coreService, hookRunner, eventEmitter, logger, validationService) {
20
+ this.coreService = coreService;
21
+ this.hookRunner = hookRunner;
22
+ this.eventEmitter = eventEmitter;
23
+ this.logger = logger;
24
+ this.validationService = validationService;
25
+ }
26
+ /**
27
+ * Validates input parameters for all service methods.
28
+ * Provides defense in depth when the service is used directly without controllers.
29
+ */
30
+ async validateInput(itemId, userId) {
31
+ await this.validationService.validateDto(validation_1.DismissibleInputDto, { itemId, userId });
32
+ }
33
+ /**
34
+ * Get an existing item or create a new one.
35
+ * @param itemId The item identifier
36
+ * @param userId The user identifier (required)
37
+ * @param context Optional request context for tracing
38
+ */
39
+ async getOrCreate(itemId, userId, context) {
40
+ this.logger.debug(`getOrCreate called`, { itemId, userId });
41
+ await this.validateInput(itemId, userId);
42
+ const preResult = await this.hookRunner.runPreRequest(itemId, userId, context);
43
+ hook_runner_service_1.HookRunner.throwIfBlocked(preResult);
44
+ const resolvedId = preResult.id;
45
+ const resolvedUserId = preResult.userId;
46
+ const resolvedContext = preResult.context;
47
+ const existingItem = await this.coreService.get(resolvedId, resolvedUserId);
48
+ if (existingItem) {
49
+ const preGetResult = await this.hookRunner.runPreGet(resolvedId, existingItem, resolvedUserId, resolvedContext);
50
+ hook_runner_service_1.HookRunner.throwIfBlocked(preGetResult);
51
+ this.eventEmitter.emit(events_1.DismissibleEvents.ITEM_RETRIEVED, new events_2.ItemRetrievedEvent(resolvedId, existingItem, resolvedUserId, resolvedContext));
52
+ await this.hookRunner.runPostGet(resolvedId, existingItem, resolvedUserId, resolvedContext);
53
+ await this.hookRunner.runPostRequest(resolvedId, existingItem, resolvedUserId, resolvedContext);
54
+ this.logger.debug(`getOrCreate completed`, { itemId, created: false });
55
+ return {
56
+ item: existingItem,
57
+ created: false,
58
+ };
59
+ }
60
+ const preCreateResult = await this.hookRunner.runPreCreate(resolvedId, resolvedUserId, resolvedContext);
61
+ hook_runner_service_1.HookRunner.throwIfBlocked(preCreateResult);
62
+ const createdItem = await this.coreService.create(resolvedId, resolvedUserId);
63
+ await this.hookRunner.runPostCreate(resolvedId, createdItem, resolvedUserId, resolvedContext);
64
+ this.eventEmitter.emit(events_1.DismissibleEvents.ITEM_CREATED, new events_2.ItemCreatedEvent(resolvedId, createdItem, resolvedUserId, resolvedContext));
65
+ await this.hookRunner.runPostRequest(resolvedId, createdItem, resolvedUserId, resolvedContext);
66
+ this.logger.debug(`getOrCreate completed`, { itemId, created: true });
67
+ return {
68
+ item: createdItem,
69
+ created: true,
70
+ };
71
+ }
72
+ /**
73
+ * Dismiss an item.
74
+ * @param itemId The item identifier
75
+ * @param userId The user identifier (required)
76
+ * @param context Optional request context for tracing
77
+ */
78
+ async dismiss(itemId, userId, context) {
79
+ this.logger.debug(`dismiss called`, { itemId, userId });
80
+ await this.validateInput(itemId, userId);
81
+ const preRequestResult = await this.hookRunner.runPreRequest(itemId, userId, context);
82
+ hook_runner_service_1.HookRunner.throwIfBlocked(preRequestResult);
83
+ const resolvedId = preRequestResult.id;
84
+ const resolvedUserId = preRequestResult.userId;
85
+ const resolvedContext = preRequestResult.context;
86
+ const preDismissResult = await this.hookRunner.runPreDismiss(resolvedId, resolvedUserId, resolvedContext);
87
+ hook_runner_service_1.HookRunner.throwIfBlocked(preDismissResult);
88
+ const result = await this.coreService.dismiss(resolvedId, resolvedUserId);
89
+ await this.hookRunner.runPostDismiss(resolvedId, result.item, resolvedUserId, resolvedContext);
90
+ this.eventEmitter.emit(events_1.DismissibleEvents.ITEM_DISMISSED, new events_2.ItemDismissedEvent(resolvedId, result.item, result.previousItem, resolvedUserId, resolvedContext));
91
+ await this.hookRunner.runPostRequest(resolvedId, result.item, resolvedUserId, resolvedContext);
92
+ this.logger.debug(`dismiss completed`, { itemId });
93
+ return result;
94
+ }
95
+ /**
96
+ * Restore a dismissed item.
97
+ * @param itemId The item identifier
98
+ * @param userId The user identifier (required)
99
+ * @param context Optional request context for tracing
100
+ */
101
+ async restore(itemId, userId, context) {
102
+ this.logger.debug(`restore called`, { itemId, userId });
103
+ await this.validateInput(itemId, userId);
104
+ const preRequestResult = await this.hookRunner.runPreRequest(itemId, userId, context);
105
+ hook_runner_service_1.HookRunner.throwIfBlocked(preRequestResult);
106
+ const resolvedId = preRequestResult.id;
107
+ const resolvedUserId = preRequestResult.userId;
108
+ const resolvedContext = preRequestResult.context;
109
+ const preRestoreResult = await this.hookRunner.runPreRestore(resolvedId, resolvedUserId, resolvedContext);
110
+ hook_runner_service_1.HookRunner.throwIfBlocked(preRestoreResult);
111
+ const result = await this.coreService.restore(resolvedId, resolvedUserId);
112
+ await this.hookRunner.runPostRestore(resolvedId, result.item, resolvedUserId, resolvedContext);
113
+ this.eventEmitter.emit(events_1.DismissibleEvents.ITEM_RESTORED, new events_2.ItemRestoredEvent(resolvedId, result.item, result.previousItem, resolvedUserId, resolvedContext));
114
+ await this.hookRunner.runPostRequest(resolvedId, result.item, resolvedUserId, resolvedContext);
115
+ this.logger.debug(`restore completed`, { itemId });
116
+ return result;
117
+ }
118
+ };
119
+ exports.DismissibleService = DismissibleService;
120
+ exports.DismissibleService = DismissibleService = tslib_1.__decorate([
121
+ (0, common_1.Injectable)(),
122
+ tslib_1.__param(3, (0, common_1.Inject)(nestjs_logger_1.DISMISSIBLE_LOGGER)),
123
+ tslib_1.__metadata("design:paramtypes", [dismissible_core_service_1.DismissibleCoreService,
124
+ hook_runner_service_1.HookRunner,
125
+ event_emitter_1.EventEmitter2, Object, nestjs_validation_1.ValidationService])
126
+ ], DismissibleService);
127
+ //# sourceMappingURL=dismissible.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dismissible.service.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/core/dismissible.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};