@dismissible/nestjs-dismissible 0.0.1

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 (179) hide show
  1. package/README.md +490 -0
  2. package/package.json +68 -0
  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.d.ts +4 -0
  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.d.ts +4 -0
  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.d.ts +2 -0
  28. package/src/api/use-cases/dismiss/index.js +6 -0
  29. package/src/api/use-cases/dismiss/index.js.map +1 -0
  30. package/src/api/use-cases/get-or-create/get-or-create.controller.d.ts +15 -0
  31. package/src/api/use-cases/get-or-create/get-or-create.controller.js +70 -0
  32. package/src/api/use-cases/get-or-create/get-or-create.controller.js.map +1 -0
  33. package/src/api/use-cases/get-or-create/get-or-create.controller.spec.d.ts +1 -0
  34. package/src/api/use-cases/get-or-create/get-or-create.controller.spec.js +32 -0
  35. package/src/api/use-cases/get-or-create/get-or-create.controller.spec.js.map +1 -0
  36. package/src/api/use-cases/get-or-create/get-or-create.response.dto.d.ts +12 -0
  37. package/src/api/use-cases/get-or-create/get-or-create.response.dto.js +12 -0
  38. package/src/api/use-cases/get-or-create/get-or-create.response.dto.js.map +1 -0
  39. package/src/api/use-cases/get-or-create/index.d.ts +2 -0
  40. package/src/api/use-cases/get-or-create/index.js +6 -0
  41. package/src/api/use-cases/get-or-create/index.js.map +1 -0
  42. package/src/api/use-cases/index.d.ts +3 -0
  43. package/src/api/use-cases/index.js +7 -0
  44. package/src/api/use-cases/index.js.map +1 -0
  45. package/src/api/use-cases/restore/index.d.ts +2 -0
  46. package/src/api/use-cases/restore/index.js +6 -0
  47. package/src/api/use-cases/restore/index.js.map +1 -0
  48. package/src/api/use-cases/restore/restore.controller.d.ts +15 -0
  49. package/src/api/use-cases/restore/restore.controller.js +74 -0
  50. package/src/api/use-cases/restore/restore.controller.js.map +1 -0
  51. package/src/api/use-cases/restore/restore.controller.spec.d.ts +1 -0
  52. package/src/api/use-cases/restore/restore.controller.spec.js +37 -0
  53. package/src/api/use-cases/restore/restore.controller.spec.js.map +1 -0
  54. package/src/api/use-cases/restore/restore.response.dto.d.ts +12 -0
  55. package/src/api/use-cases/restore/restore.response.dto.js +12 -0
  56. package/src/api/use-cases/restore/restore.response.dto.js.map +1 -0
  57. package/src/api/validation/index.d.ts +2 -0
  58. package/src/api/validation/index.js +6 -0
  59. package/src/api/validation/index.js.map +1 -0
  60. package/src/api/validation/param-validation.pipe.d.ts +11 -0
  61. package/src/api/validation/param-validation.pipe.js +36 -0
  62. package/src/api/validation/param-validation.pipe.js.map +1 -0
  63. package/src/api/validation/param-validation.pipe.spec.d.ts +1 -0
  64. package/src/api/validation/param-validation.pipe.spec.js +269 -0
  65. package/src/api/validation/param-validation.pipe.spec.js.map +1 -0
  66. package/src/api/validation/param.decorators.d.ts +28 -0
  67. package/src/api/validation/param.decorators.js +36 -0
  68. package/src/api/validation/param.decorators.js.map +1 -0
  69. package/src/core/dismissible-core.service.d.ts +56 -0
  70. package/src/core/dismissible-core.service.js +147 -0
  71. package/src/core/dismissible-core.service.js.map +1 -0
  72. package/src/core/dismissible-core.service.spec.d.ts +1 -0
  73. package/src/core/dismissible-core.service.spec.js +309 -0
  74. package/src/core/dismissible-core.service.spec.js.map +1 -0
  75. package/src/core/dismissible.service.d.ts +45 -0
  76. package/src/core/dismissible.service.js +127 -0
  77. package/src/core/dismissible.service.js.map +1 -0
  78. package/src/core/dismissible.service.spec.d.ts +1 -0
  79. package/src/core/dismissible.service.spec.js +159 -0
  80. package/src/core/dismissible.service.spec.js.map +1 -0
  81. package/src/core/hook-runner.service.d.ts +88 -0
  82. package/src/core/hook-runner.service.js +226 -0
  83. package/src/core/hook-runner.service.js.map +1 -0
  84. package/src/core/hook-runner.service.spec.d.ts +1 -0
  85. package/src/core/hook-runner.service.spec.js +538 -0
  86. package/src/core/hook-runner.service.spec.js.map +1 -0
  87. package/src/core/index.d.ts +5 -0
  88. package/src/core/index.js +9 -0
  89. package/src/core/index.js.map +1 -0
  90. package/src/core/lifecycle-hook.interface.d.ts +1 -0
  91. package/src/core/lifecycle-hook.interface.js +7 -0
  92. package/src/core/lifecycle-hook.interface.js.map +1 -0
  93. package/src/core/service-responses.interface.d.ts +28 -0
  94. package/src/core/service-responses.interface.js +3 -0
  95. package/src/core/service-responses.interface.js.map +1 -0
  96. package/src/dismissible.module.d.ts +13 -0
  97. package/src/dismissible.module.integration.spec.d.ts +1 -0
  98. package/src/dismissible.module.integration.spec.js +529 -0
  99. package/src/dismissible.module.integration.spec.js.map +1 -0
  100. package/src/dismissible.module.js +77 -0
  101. package/src/dismissible.module.js.map +1 -0
  102. package/src/events/dismissible.events.d.ts +45 -0
  103. package/src/events/dismissible.events.js +53 -0
  104. package/src/events/dismissible.events.js.map +1 -0
  105. package/src/events/events.constants.d.ts +17 -0
  106. package/src/events/events.constants.js +17 -0
  107. package/src/events/events.constants.js.map +1 -0
  108. package/src/events/index.d.ts +2 -0
  109. package/src/events/index.js +6 -0
  110. package/src/events/index.js.map +1 -0
  111. package/src/exceptions/dismissible.exceptions.d.ts +26 -0
  112. package/src/exceptions/dismissible.exceptions.js +49 -0
  113. package/src/exceptions/dismissible.exceptions.js.map +1 -0
  114. package/src/exceptions/dismissible.exceptions.spec.d.ts +1 -0
  115. package/src/exceptions/dismissible.exceptions.spec.js +40 -0
  116. package/src/exceptions/dismissible.exceptions.spec.js.map +1 -0
  117. package/src/exceptions/index.d.ts +1 -0
  118. package/src/exceptions/index.js +5 -0
  119. package/src/exceptions/index.js.map +1 -0
  120. package/src/index.d.ts +8 -0
  121. package/src/index.js +12 -0
  122. package/src/index.js.map +1 -0
  123. package/src/response/dtos/base-response.dto.d.ts +6 -0
  124. package/src/response/dtos/base-response.dto.js +18 -0
  125. package/src/response/dtos/base-response.dto.js.map +1 -0
  126. package/src/response/dtos/error-response.dto.d.ts +19 -0
  127. package/src/response/dtos/error-response.dto.js +39 -0
  128. package/src/response/dtos/error-response.dto.js.map +1 -0
  129. package/src/response/dtos/index.d.ts +3 -0
  130. package/src/response/dtos/index.js +7 -0
  131. package/src/response/dtos/index.js.map +1 -0
  132. package/src/response/dtos/success-response.dto.d.ts +28 -0
  133. package/src/response/dtos/success-response.dto.js +34 -0
  134. package/src/response/dtos/success-response.dto.js.map +1 -0
  135. package/src/response/http-exception-filter.d.ts +4 -0
  136. package/src/response/http-exception-filter.js +24 -0
  137. package/src/response/http-exception-filter.js.map +1 -0
  138. package/src/response/http-exception-filter.spec.d.ts +1 -0
  139. package/src/response/http-exception-filter.spec.js +137 -0
  140. package/src/response/http-exception-filter.spec.js.map +1 -0
  141. package/src/response/index.d.ts +4 -0
  142. package/src/response/index.js +8 -0
  143. package/src/response/index.js.map +1 -0
  144. package/src/response/response.module.d.ts +2 -0
  145. package/src/response/response.module.js +17 -0
  146. package/src/response/response.module.js.map +1 -0
  147. package/src/response/response.service.d.ts +6 -0
  148. package/src/response/response.service.js +25 -0
  149. package/src/response/response.service.js.map +1 -0
  150. package/src/response/response.service.spec.d.ts +1 -0
  151. package/src/response/response.service.spec.js +58 -0
  152. package/src/response/response.service.spec.js.map +1 -0
  153. package/src/testing/factories.d.ts +14 -0
  154. package/src/testing/factories.js +58 -0
  155. package/src/testing/factories.js.map +1 -0
  156. package/src/testing/index.d.ts +1 -0
  157. package/src/testing/index.js +5 -0
  158. package/src/testing/index.js.map +1 -0
  159. package/src/utils/date/date.service.d.ts +8 -0
  160. package/src/utils/date/date.service.js +24 -0
  161. package/src/utils/date/date.service.js.map +1 -0
  162. package/src/utils/date/date.service.spec.d.ts +1 -0
  163. package/src/utils/date/date.service.spec.js +83 -0
  164. package/src/utils/date/date.service.spec.js.map +1 -0
  165. package/src/utils/date/index.d.ts +1 -0
  166. package/src/utils/date/index.js +5 -0
  167. package/src/utils/date/index.js.map +1 -0
  168. package/src/utils/dismissible.helper.d.ts +4 -0
  169. package/src/utils/dismissible.helper.js +15 -0
  170. package/src/utils/dismissible.helper.js.map +1 -0
  171. package/src/utils/index.d.ts +3 -0
  172. package/src/utils/index.js +7 -0
  173. package/src/utils/index.js.map +1 -0
  174. package/src/validation/dismissible-input.dto.d.ts +21 -0
  175. package/src/validation/dismissible-input.dto.js +54 -0
  176. package/src/validation/dismissible-input.dto.js.map +1 -0
  177. package/src/validation/index.d.ts +1 -0
  178. package/src/validation/index.js +5 -0
  179. package/src/validation/index.js.map +1 -0
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DismissibleCoreService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const nestjs_storage_1 = require("@dismissible/nestjs-storage");
7
+ const dismissible_helper_1 = require("../utils/dismissible.helper");
8
+ const date_service_1 = require("../utils/date/date.service");
9
+ const nestjs_logger_1 = require("@dismissible/nestjs-logger");
10
+ const exceptions_1 = require("../exceptions");
11
+ const nestjs_validation_1 = require("@dismissible/nestjs-validation");
12
+ const nestjs_dismissible_item_1 = require("@dismissible/nestjs-dismissible-item");
13
+ /**
14
+ * Core business logic service for dismissible operations.
15
+ * Handles pure CRUD operations without side effects (hooks, events).
16
+ */
17
+ let DismissibleCoreService = class DismissibleCoreService {
18
+ constructor(storage, dateService, logger, itemFactory, validationService, dismissibleHelper) {
19
+ this.storage = storage;
20
+ this.dateService = dateService;
21
+ this.logger = logger;
22
+ this.itemFactory = itemFactory;
23
+ this.validationService = validationService;
24
+ this.dismissibleHelper = dismissibleHelper;
25
+ }
26
+ /**
27
+ * Get an existing item by user ID and item ID.
28
+ * @param itemId The item identifier
29
+ * @param userId The user identifier (required)
30
+ * @returns The item or null if not found
31
+ */
32
+ async get(itemId, userId) {
33
+ this.logger.debug(`Looking up item in storage`, { itemId, userId });
34
+ const item = await this.storage.get(userId, itemId);
35
+ if (item) {
36
+ this.logger.debug(`Found existing item`, { itemId, userId });
37
+ }
38
+ return item;
39
+ }
40
+ /**
41
+ * Create a new item.
42
+ * @param itemId The item identifier
43
+ * @param userId The user identifier (required)
44
+ * @returns The created item
45
+ */
46
+ async create(itemId, userId) {
47
+ this.logger.debug(`Creating new item`, {
48
+ itemId,
49
+ userId,
50
+ });
51
+ const now = this.dateService.getNow();
52
+ const newItem = this.itemFactory.create({
53
+ id: itemId,
54
+ createdAt: now,
55
+ userId,
56
+ });
57
+ await this.validationService.validateInstance(newItem);
58
+ const createdItem = await this.storage.create(newItem);
59
+ this.logger.info(`Created new dismissible item`, { itemId, userId });
60
+ return createdItem;
61
+ }
62
+ /**
63
+ * Get an existing item or create a new one.
64
+ * @param itemId The item identifier
65
+ * @param userId The user identifier (required)
66
+ */
67
+ async getOrCreate(itemId, userId) {
68
+ const existingItem = await this.get(itemId, userId);
69
+ if (existingItem) {
70
+ return {
71
+ item: existingItem,
72
+ created: false,
73
+ };
74
+ }
75
+ const createdItem = await this.create(itemId, userId);
76
+ return {
77
+ item: createdItem,
78
+ created: true,
79
+ };
80
+ }
81
+ /**
82
+ * Dismiss an item.
83
+ * @param itemId The item identifier
84
+ * @param userId The user identifier (required)
85
+ * @throws ItemNotFoundException if item doesn't exist
86
+ * @throws ItemAlreadyDismissedException if item is already dismissed
87
+ */
88
+ async dismiss(itemId, userId) {
89
+ this.logger.debug(`Attempting to dismiss item`, { itemId, userId });
90
+ const existingItem = await this.storage.get(userId, itemId);
91
+ if (!existingItem) {
92
+ this.logger.warn(`Cannot dismiss: item not found`, { itemId, userId });
93
+ throw new exceptions_1.ItemNotFoundException(itemId);
94
+ }
95
+ if (this.dismissibleHelper.isDismissed(existingItem)) {
96
+ this.logger.warn(`Cannot dismiss: item already dismissed`, { itemId, userId });
97
+ throw new exceptions_1.ItemAlreadyDismissedException(itemId);
98
+ }
99
+ const previousItem = this.itemFactory.clone(existingItem);
100
+ const dismissedItem = this.itemFactory.createDismissed(existingItem, this.dateService.getNow());
101
+ await this.validationService.validateInstance(dismissedItem);
102
+ const updatedItem = await this.storage.update(dismissedItem);
103
+ this.logger.info(`Item dismissed`, { itemId, userId });
104
+ return {
105
+ item: updatedItem,
106
+ previousItem,
107
+ };
108
+ }
109
+ /**
110
+ * Restore a dismissed item.
111
+ * @param itemId The item identifier
112
+ * @param userId The user identifier (required)
113
+ * @throws ItemNotFoundException if item doesn't exist
114
+ * @throws ItemNotDismissedException if item is not dismissed
115
+ */
116
+ async restore(itemId, userId) {
117
+ this.logger.debug(`Attempting to restore item`, { itemId, userId });
118
+ const existingItem = await this.storage.get(userId, itemId);
119
+ if (!existingItem) {
120
+ this.logger.warn(`Cannot restore: item not found`, { itemId, userId });
121
+ throw new exceptions_1.ItemNotFoundException(itemId);
122
+ }
123
+ if (!this.dismissibleHelper.isDismissed(existingItem)) {
124
+ this.logger.warn(`Cannot restore: item not dismissed`, { itemId, userId });
125
+ throw new exceptions_1.ItemNotDismissedException(itemId);
126
+ }
127
+ const previousItem = this.itemFactory.clone(existingItem);
128
+ const restoredItem = this.itemFactory.createRestored(existingItem);
129
+ await this.validationService.validateInstance(restoredItem);
130
+ const updatedItem = await this.storage.update(restoredItem);
131
+ this.logger.info(`Item restored`, { itemId, userId });
132
+ return {
133
+ item: updatedItem,
134
+ previousItem,
135
+ };
136
+ }
137
+ };
138
+ exports.DismissibleCoreService = DismissibleCoreService;
139
+ exports.DismissibleCoreService = DismissibleCoreService = tslib_1.__decorate([
140
+ (0, common_1.Injectable)(),
141
+ tslib_1.__param(0, (0, common_1.Inject)(nestjs_storage_1.DISMISSIBLE_STORAGE_ADAPTER)),
142
+ tslib_1.__param(2, (0, common_1.Inject)(nestjs_logger_1.DISMISSIBLE_LOGGER)),
143
+ tslib_1.__metadata("design:paramtypes", [Object, date_service_1.DateService, Object, nestjs_dismissible_item_1.DismissibleItemFactory,
144
+ nestjs_validation_1.ValidationService,
145
+ dismissible_helper_1.DismissibleHelper])
146
+ ], DismissibleCoreService);
147
+ //# sourceMappingURL=dismissible-core.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dismissible-core.service.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/core/dismissible-core.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -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":";;AAAA,mDAA4C;AAC5C,yEAAoE;AAEpE,oDAA+E;AAC/E,8CAIuB;AACvB,kFAA8E;AAE9E,sEAAmE;AACnE,2CAAqD;AACrD,oEAAgE;AAChE,6DAAyD;AAEzD,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,OAA+B,CAAC;IACpC,IAAI,OAAkC,CAAC;IACvC,IAAI,eAAkC,CAAC;IACvC,IAAI,UAAoC,CAAC;IACzC,IAAI,WAAyC,CAAC;IAC9C,IAAI,iBAA0C,CAAC;IAC/C,IAAI,iBAA0C,CAAC;IAE/C,UAAU,CAAC,GAAG,EAAE;QACd,eAAe,GAAG,IAAA,qBAAI,EAAC,0BAAW,CAAC,CAAC;QACpC,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QAC7E,UAAU,GAAG,IAAA,qBAAI,EAAqB;YACpC,qBAAqB,EAAE,KAAK;SAC7B,CAAC,CAAC;QACH,OAAO,GAAG,IAAA,qBAAI,EAAsB;YAClC,qBAAqB,EAAE,KAAK;SAC7B,CAAC,CAAC;QACH,iBAAiB,GAAG,IAAA,qBAAI,EAAC,sCAAiB,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9E,WAAW,GAAG,IAAA,qBAAI,EAAC,gDAAsB,CAAC,CAAC;QAC3C,iBAAiB,GAAG,IAAA,qBAAI,EAAC,qCAAiB,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9E,iBAAiB,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAChE,OAAO,GAAG,IAAI,iDAAsB,CAClC,OAAO,EACP,eAAe,EACf,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,iBAAiB,CAClB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;QACnB,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAE5C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACrC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEpC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;YAEzD,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;YACxC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,OAAO,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEhF,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC1C,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAE5C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAExD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;YAC3C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEhF,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC1C,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAE5C,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAEzC,MAAM,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEhF,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC5C,iBAAiB,CAAC,gBAAgB,CAAC,iBAAiB,CAClD,IAAI,4BAAmB,CAAC,qBAAqB,CAAC,CAC/C,CAAC;YAEF,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,4BAAmB,CAAC,CAAC;YACtF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,OAAO,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEhF,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC1C,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAE5C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAE7D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;YAChD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAE5C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YAElE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACzD,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACjE,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3E,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAEtD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAChD,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAChD,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC3D,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAErD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;YACxD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;YAC3D,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEpC,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kCAAqB,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAC7C,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAEpD,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACrE,0CAA6B,CAC9B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAA,0BAAc,EAAC;gBAC1B,EAAE,EAAE,WAAW;gBACf,MAAM;aACP,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC;gBAClC,EAAE,EAAE,WAAW;gBACf,MAAM;aACP,CAAC,CAAC;YACH,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC;gBAC5C,EAAE,EAAE,WAAW;gBACf,MAAM;aACP,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAEtD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAChD,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAChD,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC3D,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAErD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAChF,MAAM,YAAY,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/E,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAEtE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAC7C,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAC/C,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAChD,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACzD,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAEpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;YAE/D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;YAC1D,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEpC,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kCAAqB,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAErD,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAClE,sCAAyB,CAC1B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC;gBAC5C,EAAE,EAAE,gBAAgB;gBACpB,MAAM;aACP,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,IAAA,mCAAuB,EAAC;gBAC3C,EAAE,EAAE,gBAAgB;gBACpB,MAAM;aACP,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC;gBAClC,EAAE,EAAE,gBAAgB;gBACpB,MAAM;aACP,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAC7C,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAC/C,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAChD,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACzD,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAEpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;YAE/D,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;YAChF,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEhF,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC5C,iBAAiB,CAAC,gBAAgB,CAAC,iBAAiB,CAClD,IAAI,4BAAmB,CAAC,qBAAqB,CAAC,CAC/C,CAAC;YAEF,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,4BAAmB,CAAC,CAAC;YAC3F,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACzD,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACjE,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3E,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAEtD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAChD,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC3D,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YACrD,iBAAiB,CAAC,gBAAgB,CAAC,iBAAiB,CAClD,IAAI,4BAAmB,CAAC,4BAA4B,CAAC,CACtD,CAAC;YAEF,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,4BAAmB,CAAC,CAAC;YACxF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAChF,MAAM,YAAY,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/E,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAEtE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAC7C,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAChD,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACzD,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACpD,iBAAiB,CAAC,gBAAgB,CAAC,iBAAiB,CAClD,IAAI,4BAAmB,CAAC,qBAAqB,CAAC,CAC/C,CAAC;YAEF,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,4BAAmB,CAAC,CAAC;YAC7F,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEhF,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC1C,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAE5C,MAAM,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAE9C,MAAM,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACzD,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACjE,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3E,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAEtD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAChD,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAChD,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC3D,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAErD,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAE3C,MAAM,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QACjF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAChF,MAAM,YAAY,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/E,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAEtE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAC7C,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAC/C,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAChD,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACzD,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAEpD,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;YAEhD,MAAM,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -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
+ }