@dismissible/nestjs-dismissible 0.0.2-canary.738340d.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.
- package/README.md +58 -74
- package/package.json +23 -18
- package/src/api/dismissible-item-response.dto.d.ts +9 -0
- package/src/api/dismissible-item-response.dto.js +40 -0
- package/src/api/dismissible-item-response.dto.js.map +1 -0
- package/src/api/dismissible-item.mapper.d.ts +12 -0
- package/src/api/dismissible-item.mapper.js +30 -0
- package/src/api/dismissible-item.mapper.js.map +1 -0
- package/src/api/dismissible-item.mapper.spec.d.ts +1 -0
- package/src/api/dismissible-item.mapper.spec.js +43 -0
- package/src/api/dismissible-item.mapper.spec.js.map +1 -0
- package/src/api/{index.ts → index.d.ts} +1 -4
- package/src/api/index.js +8 -0
- package/src/api/index.js.map +1 -0
- package/src/api/use-cases/{api-tags.constants.ts → api-tags.constants.d.ts} +1 -1
- package/src/api/use-cases/api-tags.constants.js +8 -0
- package/src/api/use-cases/api-tags.constants.js.map +1 -0
- package/src/api/use-cases/dismiss/dismiss.controller.d.ts +15 -0
- package/src/api/use-cases/dismiss/dismiss.controller.js +74 -0
- package/src/api/use-cases/dismiss/dismiss.controller.js.map +1 -0
- package/src/api/use-cases/dismiss/dismiss.controller.spec.d.ts +1 -0
- package/src/api/use-cases/dismiss/dismiss.controller.spec.js +37 -0
- package/src/api/use-cases/dismiss/dismiss.controller.spec.js.map +1 -0
- package/src/api/use-cases/dismiss/dismiss.response.dto.d.ts +12 -0
- package/src/api/use-cases/dismiss/dismiss.response.dto.js +12 -0
- package/src/api/use-cases/dismiss/dismiss.response.dto.js.map +1 -0
- package/src/api/use-cases/dismiss/index.js +6 -0
- package/src/api/use-cases/dismiss/index.js.map +1 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.d.ts +15 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.js +70 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.js.map +1 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.spec.d.ts +1 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.spec.js +32 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.spec.js.map +1 -0
- package/src/api/use-cases/get-or-create/get-or-create.response.dto.d.ts +12 -0
- package/src/api/use-cases/get-or-create/get-or-create.response.dto.js +12 -0
- package/src/api/use-cases/get-or-create/get-or-create.response.dto.js.map +1 -0
- package/src/api/use-cases/get-or-create/{index.ts → index.d.ts} +0 -1
- package/src/api/use-cases/get-or-create/index.js +6 -0
- package/src/api/use-cases/get-or-create/index.js.map +1 -0
- package/src/api/use-cases/index.js +7 -0
- package/src/api/use-cases/index.js.map +1 -0
- package/src/api/use-cases/restore/index.js +6 -0
- package/src/api/use-cases/restore/index.js.map +1 -0
- package/src/api/use-cases/restore/restore.controller.d.ts +15 -0
- package/src/api/use-cases/restore/restore.controller.js +74 -0
- package/src/api/use-cases/restore/restore.controller.js.map +1 -0
- package/src/api/use-cases/restore/restore.controller.spec.d.ts +1 -0
- package/src/api/use-cases/restore/restore.controller.spec.js +37 -0
- package/src/api/use-cases/restore/restore.controller.spec.js.map +1 -0
- package/src/api/use-cases/restore/restore.response.dto.d.ts +12 -0
- package/src/api/use-cases/restore/restore.response.dto.js +12 -0
- package/src/api/use-cases/restore/restore.response.dto.js.map +1 -0
- package/src/api/validation/index.d.ts +2 -0
- package/src/api/validation/index.js +6 -0
- package/src/api/validation/index.js.map +1 -0
- package/src/api/validation/param-validation.pipe.d.ts +11 -0
- package/src/api/validation/param-validation.pipe.js +36 -0
- package/src/api/validation/param-validation.pipe.js.map +1 -0
- package/src/api/validation/param-validation.pipe.spec.d.ts +1 -0
- package/src/api/validation/param-validation.pipe.spec.js +269 -0
- package/src/api/validation/param-validation.pipe.spec.js.map +1 -0
- package/src/api/validation/param.decorators.d.ts +28 -0
- package/src/api/validation/param.decorators.js +36 -0
- package/src/api/validation/param.decorators.js.map +1 -0
- package/src/core/dismissible-core.service.d.ts +56 -0
- package/src/core/dismissible-core.service.js +147 -0
- package/src/core/dismissible-core.service.js.map +1 -0
- package/src/core/dismissible-core.service.spec.d.ts +1 -0
- package/src/core/dismissible-core.service.spec.js +309 -0
- package/src/core/dismissible-core.service.spec.js.map +1 -0
- package/src/core/dismissible.service.d.ts +45 -0
- package/src/core/dismissible.service.js +127 -0
- package/src/core/dismissible.service.js.map +1 -0
- package/src/core/dismissible.service.spec.d.ts +1 -0
- package/src/core/dismissible.service.spec.js +159 -0
- package/src/core/dismissible.service.spec.js.map +1 -0
- package/src/core/hook-runner.service.d.ts +88 -0
- package/src/core/hook-runner.service.js +226 -0
- package/src/core/hook-runner.service.js.map +1 -0
- package/src/core/hook-runner.service.spec.d.ts +1 -0
- package/src/core/hook-runner.service.spec.js +538 -0
- package/src/core/hook-runner.service.spec.js.map +1 -0
- package/src/core/{index.ts → index.d.ts} +0 -1
- package/src/core/index.js +9 -0
- package/src/core/index.js.map +1 -0
- package/src/core/lifecycle-hook.interface.d.ts +1 -0
- package/src/core/lifecycle-hook.interface.js +7 -0
- package/src/core/lifecycle-hook.interface.js.map +1 -0
- package/src/core/service-responses.interface.d.ts +28 -0
- package/src/core/service-responses.interface.js +3 -0
- package/src/core/service-responses.interface.js.map +1 -0
- package/src/dismissible.module.d.ts +13 -0
- package/src/dismissible.module.integration.spec.d.ts +1 -0
- package/src/dismissible.module.integration.spec.js +529 -0
- package/src/dismissible.module.integration.spec.js.map +1 -0
- package/src/dismissible.module.js +77 -0
- package/src/dismissible.module.js.map +1 -0
- package/src/events/dismissible.events.d.ts +45 -0
- package/src/events/dismissible.events.js +53 -0
- package/src/events/dismissible.events.js.map +1 -0
- package/src/events/events.constants.d.ts +17 -0
- package/src/events/events.constants.js +17 -0
- package/src/events/events.constants.js.map +1 -0
- package/src/events/index.js +6 -0
- package/src/events/index.js.map +1 -0
- package/src/exceptions/dismissible.exceptions.d.ts +26 -0
- package/src/exceptions/dismissible.exceptions.js +49 -0
- package/src/exceptions/dismissible.exceptions.js.map +1 -0
- package/src/exceptions/dismissible.exceptions.spec.d.ts +1 -0
- package/src/exceptions/dismissible.exceptions.spec.js +40 -0
- package/src/exceptions/dismissible.exceptions.spec.js.map +1 -0
- package/src/exceptions/index.js +5 -0
- package/src/exceptions/index.js.map +1 -0
- package/src/{index.ts → index.d.ts} +1 -1
- package/src/index.js +12 -0
- package/src/index.js.map +1 -0
- package/src/response/dtos/base-response.dto.d.ts +6 -0
- package/src/response/dtos/base-response.dto.js +18 -0
- package/src/response/dtos/base-response.dto.js.map +1 -0
- package/src/response/dtos/error-response.dto.d.ts +19 -0
- package/src/response/dtos/error-response.dto.js +39 -0
- package/src/response/dtos/error-response.dto.js.map +1 -0
- package/src/response/dtos/index.js +7 -0
- package/src/response/dtos/index.js.map +1 -0
- package/src/response/dtos/{success-response.dto.ts → success-response.dto.d.ts} +6 -12
- package/src/response/dtos/success-response.dto.js +34 -0
- package/src/response/dtos/success-response.dto.js.map +1 -0
- package/src/response/http-exception-filter.d.ts +4 -0
- package/src/response/http-exception-filter.js +24 -0
- package/src/response/http-exception-filter.js.map +1 -0
- package/src/response/http-exception-filter.spec.d.ts +1 -0
- package/src/response/http-exception-filter.spec.js +137 -0
- package/src/response/http-exception-filter.spec.js.map +1 -0
- package/src/response/index.js +8 -0
- package/src/response/index.js.map +1 -0
- package/src/response/response.module.d.ts +2 -0
- package/src/response/response.module.js +17 -0
- package/src/response/response.module.js.map +1 -0
- package/src/response/response.service.d.ts +6 -0
- package/src/response/response.service.js +25 -0
- package/src/response/response.service.js.map +1 -0
- package/src/response/response.service.spec.d.ts +1 -0
- package/src/response/response.service.spec.js +58 -0
- package/src/response/response.service.spec.js.map +1 -0
- package/src/testing/factories.d.ts +14 -0
- package/src/testing/factories.js +58 -0
- package/src/testing/factories.js.map +1 -0
- package/src/testing/index.js +5 -0
- package/src/testing/index.js.map +1 -0
- package/src/utils/date/date.service.d.ts +8 -0
- package/src/utils/date/date.service.js +24 -0
- package/src/utils/date/date.service.js.map +1 -0
- package/src/utils/date/date.service.spec.d.ts +1 -0
- package/src/utils/date/date.service.spec.js +83 -0
- package/src/utils/date/date.service.spec.js.map +1 -0
- package/src/utils/date/index.js +5 -0
- package/src/utils/date/index.js.map +1 -0
- package/src/utils/dismissible.helper.d.ts +4 -0
- package/src/utils/dismissible.helper.js +15 -0
- package/src/utils/dismissible.helper.js.map +1 -0
- package/src/utils/index.js +7 -0
- package/src/utils/index.js.map +1 -0
- package/src/validation/dismissible-input.dto.d.ts +21 -0
- package/src/validation/dismissible-input.dto.js +54 -0
- package/src/validation/dismissible-input.dto.js.map +1 -0
- package/src/validation/index.d.ts +1 -0
- package/src/validation/index.js +5 -0
- package/src/validation/index.js.map +1 -0
- package/jest.config.ts +0 -29
- package/project.json +0 -42
- package/src/api/dismissible-item-response.dto.ts +0 -38
- package/src/api/dismissible-item.mapper.spec.ts +0 -63
- package/src/api/dismissible-item.mapper.ts +0 -33
- package/src/api/use-cases/dismiss/dismiss.controller.spec.ts +0 -42
- package/src/api/use-cases/dismiss/dismiss.controller.ts +0 -63
- package/src/api/use-cases/dismiss/dismiss.response.dto.ts +0 -7
- package/src/api/use-cases/get-or-create/get-or-create.controller.spec.ts +0 -76
- package/src/api/use-cases/get-or-create/get-or-create.controller.ts +0 -106
- package/src/api/use-cases/get-or-create/get-or-create.request.dto.ts +0 -17
- package/src/api/use-cases/get-or-create/get-or-create.response.dto.ts +0 -7
- package/src/api/use-cases/restore/restore.controller.spec.ts +0 -42
- package/src/api/use-cases/restore/restore.controller.ts +0 -63
- package/src/api/use-cases/restore/restore.response.dto.ts +0 -7
- package/src/core/create-options.ts +0 -9
- package/src/core/dismissible-core.service.spec.ts +0 -357
- package/src/core/dismissible-core.service.ts +0 -161
- package/src/core/dismissible.service.spec.ts +0 -144
- package/src/core/dismissible.service.ts +0 -188
- package/src/core/hook-runner.service.spec.ts +0 -304
- package/src/core/hook-runner.service.ts +0 -267
- package/src/core/lifecycle-hook.interface.ts +0 -122
- package/src/core/service-responses.interface.ts +0 -34
- package/src/dismissible.module.ts +0 -83
- package/src/events/dismissible.events.ts +0 -105
- package/src/events/events.constants.ts +0 -21
- package/src/exceptions/dismissible.exceptions.spec.ts +0 -50
- package/src/exceptions/dismissible.exceptions.ts +0 -69
- package/src/request/index.ts +0 -2
- package/src/request/request-context.decorator.ts +0 -14
- package/src/request/request-context.interface.ts +0 -6
- package/src/response/dtos/base-response.dto.ts +0 -11
- package/src/response/dtos/error-response.dto.ts +0 -36
- package/src/response/http-exception-filter.ts +0 -21
- package/src/response/response.module.ts +0 -9
- package/src/response/response.service.spec.ts +0 -86
- package/src/response/response.service.ts +0 -20
- package/src/testing/factories.ts +0 -45
- package/src/utils/date/date.service.spec.ts +0 -104
- package/src/utils/date/date.service.ts +0 -19
- package/src/utils/dismissible.helper.ts +0 -9
- package/tsconfig.json +0 -13
- package/tsconfig.lib.json +0 -14
- /package/src/api/use-cases/dismiss/{index.ts → index.d.ts} +0 -0
- /package/src/api/use-cases/{index.ts → index.d.ts} +0 -0
- /package/src/api/use-cases/restore/{index.ts → index.d.ts} +0 -0
- /package/src/events/{index.ts → index.d.ts} +0 -0
- /package/src/exceptions/{index.ts → index.d.ts} +0 -0
- /package/src/response/dtos/{index.ts → index.d.ts} +0 -0
- /package/src/response/{index.ts → index.d.ts} +0 -0
- /package/src/testing/{index.ts → index.d.ts} +0 -0
- /package/src/utils/date/{index.ts → index.d.ts} +0 -0
- /package/src/utils/{index.ts → index.d.ts} +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const ts_jest_mocker_1 = require("ts-jest-mocker");
|
|
4
|
+
const dismiss_controller_1 = require("./dismiss.controller");
|
|
5
|
+
const dismissible_service_1 = require("../../../core/dismissible.service");
|
|
6
|
+
const dismissible_item_mapper_1 = require("../../dismissible-item.mapper");
|
|
7
|
+
const factories_1 = require("../../../testing/factories");
|
|
8
|
+
const response_1 = require("../../../response");
|
|
9
|
+
describe('DismissController', () => {
|
|
10
|
+
let controller;
|
|
11
|
+
let mockService;
|
|
12
|
+
let mockResponseService;
|
|
13
|
+
let mapper;
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
mockService = (0, ts_jest_mocker_1.mock)(dismissible_service_1.DismissibleService);
|
|
16
|
+
mockResponseService = (0, ts_jest_mocker_1.mock)(response_1.ResponseService, { failIfMockNotProvided: false });
|
|
17
|
+
mockResponseService.success.mockImplementation((data) => ({ data }));
|
|
18
|
+
mapper = new dismissible_item_mapper_1.DismissibleItemMapper();
|
|
19
|
+
controller = new dismiss_controller_1.DismissController(mockService, mapper, mockResponseService);
|
|
20
|
+
});
|
|
21
|
+
describe('dismiss', () => {
|
|
22
|
+
it('should return dismissed item wrapped in data', async () => {
|
|
23
|
+
const item = (0, factories_1.createTestItem)({
|
|
24
|
+
id: 'test-item',
|
|
25
|
+
dismissedAt: new Date(),
|
|
26
|
+
});
|
|
27
|
+
const previousItem = (0, factories_1.createTestItem)({ id: 'test-item' });
|
|
28
|
+
const context = (0, factories_1.createTestContext)();
|
|
29
|
+
mockService.dismiss.mockResolvedValue({ item, previousItem });
|
|
30
|
+
const result = await controller.dismiss('test-user-id', 'test-item', context);
|
|
31
|
+
expect(result.data.itemId).toBe('test-item');
|
|
32
|
+
expect(mockService.dismiss).toHaveBeenCalledWith('test-item', 'test-user-id', context);
|
|
33
|
+
expect(mockResponseService.success).toHaveBeenCalled();
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=dismiss.controller.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dismiss.controller.spec.js","sourceRoot":"","sources":["../../../../../../../libs/dismissible/src/api/use-cases/dismiss/dismiss.controller.spec.ts"],"names":[],"mappings":";;AAAA,mDAAsC;AACtC,6DAAyD;AACzD,2EAAuE;AACvE,2EAAsE;AACtE,0DAA+E;AAC/E,gDAAoD;AAEpD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,UAA6B,CAAC;IAClC,IAAI,WAA4C,CAAC;IACjD,IAAI,mBAAiD,CAAC;IACtD,IAAI,MAA6B,CAAC;IAElC,UAAU,CAAC,GAAG,EAAE;QACd,WAAW,GAAG,IAAA,qBAAI,EAAC,wCAAkB,CAAC,CAAC;QACvC,mBAAmB,GAAG,IAAA,qBAAI,EAAC,0BAAe,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9E,mBAAmB,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,GAAG,IAAI,+CAAqB,EAAE,CAAC;QAErC,UAAU,GAAG,IAAI,sCAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,IAAI,GAAG,IAAA,0BAAc,EAAC;gBAC1B,EAAE,EAAE,WAAW;gBACf,WAAW,EAAE,IAAI,IAAI,EAAE;aACxB,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YACzD,MAAM,OAAO,GAAG,IAAA,6BAAiB,GAAE,CAAC;YAEpC,WAAW,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YAE9D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YAE9E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;YACvF,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DismissibleItemResponseDto } from '../../dismissible-item-response.dto';
|
|
2
|
+
declare const DismissResponseDto_base: {
|
|
3
|
+
new (): {
|
|
4
|
+
data: DismissibleItemResponseDto;
|
|
5
|
+
};
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Response DTO for the dismiss operation.
|
|
9
|
+
*/
|
|
10
|
+
export declare class DismissResponseDto extends DismissResponseDto_base {
|
|
11
|
+
}
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DismissResponseDto = void 0;
|
|
4
|
+
const success_response_dto_1 = require("../../../response/dtos/success-response.dto");
|
|
5
|
+
const dismissible_item_response_dto_1 = require("../../dismissible-item-response.dto");
|
|
6
|
+
/**
|
|
7
|
+
* Response DTO for the dismiss operation.
|
|
8
|
+
*/
|
|
9
|
+
class DismissResponseDto extends (0, success_response_dto_1.SuccessResponseDto)(dismissible_item_response_dto_1.DismissibleItemResponseDto) {
|
|
10
|
+
}
|
|
11
|
+
exports.DismissResponseDto = DismissResponseDto;
|
|
12
|
+
//# sourceMappingURL=dismiss.response.dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dismiss.response.dto.js","sourceRoot":"","sources":["../../../../../../../libs/dismissible/src/api/use-cases/dismiss/dismiss.response.dto.ts"],"names":[],"mappings":";;;AAAA,sFAAiF;AACjF,uFAAiF;AAEjF;;GAEG;AACH,MAAa,kBAAmB,SAAQ,IAAA,yCAAkB,EAAC,0DAA0B,CAAC;CAAG;AAAzF,gDAAyF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./dismiss.response.dto"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./dismiss.controller"), exports);
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/dismissible/src/api/use-cases/dismiss/index.ts"],"names":[],"mappings":";;;AAAA,iEAAuC;AACvC,+DAAqC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DismissibleService } from '../../../core/dismissible.service';
|
|
2
|
+
import { DismissibleItemMapper } from '../../dismissible-item.mapper';
|
|
3
|
+
import { IRequestContext } from '@dismissible/nestjs-dismissible-request';
|
|
4
|
+
import { GetOrCreateResponseDto } from './get-or-create.response.dto';
|
|
5
|
+
import { ResponseService } from '../../../response/response.service';
|
|
6
|
+
/**
|
|
7
|
+
* Controller for get-or-create dismissible item operations.
|
|
8
|
+
*/
|
|
9
|
+
export declare class GetOrCreateController {
|
|
10
|
+
private readonly dismissibleService;
|
|
11
|
+
private readonly mapper;
|
|
12
|
+
private readonly responseService;
|
|
13
|
+
constructor(dismissibleService: DismissibleService, mapper: DismissibleItemMapper, responseService: ResponseService);
|
|
14
|
+
getOrCreate(userId: string, itemId: string, context: IRequestContext): Promise<GetOrCreateResponseDto>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GetOrCreateController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
7
|
+
const dismissible_service_1 = require("../../../core/dismissible.service");
|
|
8
|
+
const dismissible_item_mapper_1 = require("../../dismissible-item.mapper");
|
|
9
|
+
const nestjs_dismissible_request_1 = require("@dismissible/nestjs-dismissible-request");
|
|
10
|
+
const get_or_create_response_dto_1 = require("./get-or-create.response.dto");
|
|
11
|
+
const response_service_1 = require("../../../response/response.service");
|
|
12
|
+
const http_exception_filter_1 = require("../../../response/http-exception-filter");
|
|
13
|
+
const api_tags_constants_1 = require("../api-tags.constants");
|
|
14
|
+
const validation_1 = require("../../validation");
|
|
15
|
+
/**
|
|
16
|
+
* Controller for get-or-create dismissible item operations.
|
|
17
|
+
*/
|
|
18
|
+
let GetOrCreateController = class GetOrCreateController {
|
|
19
|
+
constructor(dismissibleService, mapper, responseService) {
|
|
20
|
+
this.dismissibleService = dismissibleService;
|
|
21
|
+
this.mapper = mapper;
|
|
22
|
+
this.responseService = responseService;
|
|
23
|
+
}
|
|
24
|
+
async getOrCreate(userId, itemId, context) {
|
|
25
|
+
const result = await this.dismissibleService.getOrCreate(itemId, userId, context);
|
|
26
|
+
return this.responseService.success(this.mapper.toResponseDto(result.item));
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
exports.GetOrCreateController = GetOrCreateController;
|
|
30
|
+
tslib_1.__decorate([
|
|
31
|
+
(0, common_1.Get)(':itemId'),
|
|
32
|
+
(0, swagger_1.ApiOperation)({
|
|
33
|
+
summary: 'Get or create a dismissible item',
|
|
34
|
+
description: 'Retrieves an existing dismissible item by ID, or creates a new one if it does not exist.',
|
|
35
|
+
}),
|
|
36
|
+
(0, swagger_1.ApiParam)({
|
|
37
|
+
name: 'userId',
|
|
38
|
+
description: 'User identifier (max length: 32 characters)',
|
|
39
|
+
example: 'user-123',
|
|
40
|
+
}),
|
|
41
|
+
(0, swagger_1.ApiParam)({
|
|
42
|
+
name: 'itemId',
|
|
43
|
+
description: 'Unique identifier for the dismissible item (max length: 32 characters)',
|
|
44
|
+
example: 'welcome-banner-v2',
|
|
45
|
+
}),
|
|
46
|
+
(0, swagger_1.ApiResponse)({
|
|
47
|
+
status: 200,
|
|
48
|
+
description: 'The dismissible item (retrieved or created)',
|
|
49
|
+
type: get_or_create_response_dto_1.GetOrCreateResponseDto,
|
|
50
|
+
}),
|
|
51
|
+
(0, swagger_1.ApiResponse)({
|
|
52
|
+
status: 403,
|
|
53
|
+
description: 'Operation blocked by lifecycle hook',
|
|
54
|
+
}),
|
|
55
|
+
(0, common_1.UseFilters)(http_exception_filter_1.HttpExceptionFilter),
|
|
56
|
+
tslib_1.__param(0, (0, validation_1.UserId)()),
|
|
57
|
+
tslib_1.__param(1, (0, validation_1.ItemId)()),
|
|
58
|
+
tslib_1.__param(2, (0, nestjs_dismissible_request_1.RequestContext)()),
|
|
59
|
+
tslib_1.__metadata("design:type", Function),
|
|
60
|
+
tslib_1.__metadata("design:paramtypes", [String, String, Object]),
|
|
61
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
62
|
+
], GetOrCreateController.prototype, "getOrCreate", null);
|
|
63
|
+
exports.GetOrCreateController = GetOrCreateController = tslib_1.__decorate([
|
|
64
|
+
(0, swagger_1.ApiTags)(api_tags_constants_1.API_TAG_DISMISSIBLE),
|
|
65
|
+
(0, common_1.Controller)('v1/users/:userId/items'),
|
|
66
|
+
tslib_1.__metadata("design:paramtypes", [dismissible_service_1.DismissibleService,
|
|
67
|
+
dismissible_item_mapper_1.DismissibleItemMapper,
|
|
68
|
+
response_service_1.ResponseService])
|
|
69
|
+
], GetOrCreateController);
|
|
70
|
+
//# sourceMappingURL=get-or-create.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-or-create.controller.js","sourceRoot":"","sources":["../../../../../../../libs/dismissible/src/api/use-cases/get-or-create/get-or-create.controller.ts"],"names":[],"mappings":";;;;AAAA,2CAA6D;AAC7D,6CAA+E;AAC/E,2EAAuE;AACvE,2EAAsE;AACtE,wFAA0F;AAC1F,6EAAsE;AACtE,yEAAqE;AACrE,mFAA8E;AAC9E,8DAA4D;AAC5D,iDAAkD;AAElD;;GAEG;AAGI,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,YACmB,kBAAsC,EACtC,MAA6B,EAC7B,eAAgC;QAFhC,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,WAAM,GAAN,MAAM,CAAuB;QAC7B,oBAAe,GAAf,eAAe,CAAiB;IAChD,CAAC;IA4BE,AAAN,KAAK,CAAC,WAAW,CACL,MAAc,EACd,MAAc,EACN,OAAwB;QAE1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAElF,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9E,CAAC;CACF,CAAA;AA1CY,sDAAqB;AAiC1B;IA1BL,IAAA,YAAG,EAAC,SAAS,CAAC;IACd,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,kCAAkC;QAC3C,WAAW,EACT,0FAA0F;KAC7F,CAAC;IACD,IAAA,kBAAQ,EAAC;QACR,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,6CAA6C;QAC1D,OAAO,EAAE,UAAU;KACpB,CAAC;IACD,IAAA,kBAAQ,EAAC;QACR,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,wEAAwE;QACrF,OAAO,EAAE,mBAAmB;KAC7B,CAAC;IACD,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,GAAG;QACX,WAAW,EAAE,6CAA6C;QAC1D,IAAI,EAAE,mDAAsB;KAC7B,CAAC;IACD,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,GAAG;QACX,WAAW,EAAE,qCAAqC;KACnD,CAAC;IACD,IAAA,mBAAU,EAAC,2CAAmB,CAAC;IAE7B,mBAAA,IAAA,mBAAM,GAAE,CAAA;IACR,mBAAA,IAAA,mBAAM,GAAE,CAAA;IACR,mBAAA,IAAA,2CAAc,GAAE,CAAA;;;;wDAKlB;gCAzCU,qBAAqB;IAFjC,IAAA,iBAAO,EAAC,wCAAmB,CAAC;IAC5B,IAAA,mBAAU,EAAC,wBAAwB,CAAC;6CAGI,wCAAkB;QAC9B,+CAAqB;QACZ,kCAAe;GAJxC,qBAAqB,CA0CjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const ts_jest_mocker_1 = require("ts-jest-mocker");
|
|
4
|
+
const get_or_create_controller_1 = require("./get-or-create.controller");
|
|
5
|
+
const dismissible_service_1 = require("../../../core/dismissible.service");
|
|
6
|
+
const dismissible_item_mapper_1 = require("../../dismissible-item.mapper");
|
|
7
|
+
const factories_1 = require("../../../testing/factories");
|
|
8
|
+
const response_1 = require("../../../response");
|
|
9
|
+
describe('GetOrCreateController', () => {
|
|
10
|
+
let controller;
|
|
11
|
+
let mockService;
|
|
12
|
+
let mockResponseService;
|
|
13
|
+
let mapper;
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
mockService = (0, ts_jest_mocker_1.mock)(dismissible_service_1.DismissibleService);
|
|
16
|
+
mockResponseService = (0, ts_jest_mocker_1.mock)(response_1.ResponseService, { failIfMockNotProvided: false });
|
|
17
|
+
mockResponseService.success.mockImplementation((data) => ({ data }));
|
|
18
|
+
mapper = new dismissible_item_mapper_1.DismissibleItemMapper();
|
|
19
|
+
controller = new get_or_create_controller_1.GetOrCreateController(mockService, mapper, mockResponseService);
|
|
20
|
+
});
|
|
21
|
+
describe('getOrCreate', () => {
|
|
22
|
+
it('should return item with created flag wrapped in data', async () => {
|
|
23
|
+
const item = (0, factories_1.createTestItem)({ id: 'test-item' });
|
|
24
|
+
const context = (0, factories_1.createTestContext)();
|
|
25
|
+
mockService.getOrCreate.mockResolvedValue({ item, created: true });
|
|
26
|
+
const result = await controller.getOrCreate('test-user-id', 'test-item', context);
|
|
27
|
+
expect(result.data.itemId).toBe('test-item');
|
|
28
|
+
expect(mockResponseService.success).toHaveBeenCalled();
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=get-or-create.controller.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-or-create.controller.spec.js","sourceRoot":"","sources":["../../../../../../../libs/dismissible/src/api/use-cases/get-or-create/get-or-create.controller.spec.ts"],"names":[],"mappings":";;AAAA,mDAAsC;AACtC,yEAAmE;AACnE,2EAAuE;AACvE,2EAAsE;AACtE,0DAA+E;AAC/E,gDAAoD;AAEpD,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAI,UAAiC,CAAC;IACtC,IAAI,WAA4C,CAAC;IACjD,IAAI,mBAAiD,CAAC;IACtD,IAAI,MAA6B,CAAC;IAElC,UAAU,CAAC,GAAG,EAAE;QACd,WAAW,GAAG,IAAA,qBAAI,EAAC,wCAAkB,CAAC,CAAC;QACvC,mBAAmB,GAAG,IAAA,qBAAI,EAAC,0BAAe,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9E,mBAAmB,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,GAAG,IAAI,+CAAqB,EAAE,CAAC;QAErC,UAAU,GAAG,IAAI,gDAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,IAAI,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,IAAA,6BAAiB,GAAE,CAAC;YAEpC,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAEnE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,cAAc,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YAElF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7C,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DismissibleItemResponseDto } from '../../dismissible-item-response.dto';
|
|
2
|
+
declare const GetOrCreateResponseDto_base: {
|
|
3
|
+
new (): {
|
|
4
|
+
data: DismissibleItemResponseDto;
|
|
5
|
+
};
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Response DTO for the getOrCreate operation.
|
|
9
|
+
*/
|
|
10
|
+
export declare class GetOrCreateResponseDto extends GetOrCreateResponseDto_base {
|
|
11
|
+
}
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GetOrCreateResponseDto = void 0;
|
|
4
|
+
const success_response_dto_1 = require("../../../response/dtos/success-response.dto");
|
|
5
|
+
const dismissible_item_response_dto_1 = require("../../dismissible-item-response.dto");
|
|
6
|
+
/**
|
|
7
|
+
* Response DTO for the getOrCreate operation.
|
|
8
|
+
*/
|
|
9
|
+
class GetOrCreateResponseDto extends (0, success_response_dto_1.SuccessResponseDto)(dismissible_item_response_dto_1.DismissibleItemResponseDto) {
|
|
10
|
+
}
|
|
11
|
+
exports.GetOrCreateResponseDto = GetOrCreateResponseDto;
|
|
12
|
+
//# sourceMappingURL=get-or-create.response.dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-or-create.response.dto.js","sourceRoot":"","sources":["../../../../../../../libs/dismissible/src/api/use-cases/get-or-create/get-or-create.response.dto.ts"],"names":[],"mappings":";;;AAAA,sFAAiF;AACjF,uFAAiF;AAEjF;;GAEG;AACH,MAAa,sBAAuB,SAAQ,IAAA,yCAAkB,EAAC,0DAA0B,CAAC;CAAG;AAA7F,wDAA6F"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./get-or-create.response.dto"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./get-or-create.controller"), exports);
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/dismissible/src/api/use-cases/get-or-create/index.ts"],"names":[],"mappings":";;;AAAA,uEAA6C;AAC7C,qEAA2C"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./get-or-create"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./dismiss"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./restore"), exports);
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/dismissible/src/api/use-cases/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC;AAChC,oDAA0B;AAC1B,oDAA0B"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./restore.response.dto"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./restore.controller"), exports);
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/dismissible/src/api/use-cases/restore/index.ts"],"names":[],"mappings":";;;AAAA,iEAAuC;AACvC,+DAAqC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DismissibleService } from '../../../core/dismissible.service';
|
|
2
|
+
import { DismissibleItemMapper } from '../../dismissible-item.mapper';
|
|
3
|
+
import { IRequestContext } from '@dismissible/nestjs-dismissible-request';
|
|
4
|
+
import { RestoreResponseDto } from './restore.response.dto';
|
|
5
|
+
import { ResponseService } from '../../../response/response.service';
|
|
6
|
+
/**
|
|
7
|
+
* Controller for restore dismissible item operations.
|
|
8
|
+
*/
|
|
9
|
+
export declare class RestoreController {
|
|
10
|
+
private readonly dismissibleService;
|
|
11
|
+
private readonly mapper;
|
|
12
|
+
private readonly responseService;
|
|
13
|
+
constructor(dismissibleService: DismissibleService, mapper: DismissibleItemMapper, responseService: ResponseService);
|
|
14
|
+
restore(userId: string, itemId: string, context: IRequestContext): Promise<RestoreResponseDto>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RestoreController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
7
|
+
const dismissible_service_1 = require("../../../core/dismissible.service");
|
|
8
|
+
const dismissible_item_mapper_1 = require("../../dismissible-item.mapper");
|
|
9
|
+
const nestjs_dismissible_request_1 = require("@dismissible/nestjs-dismissible-request");
|
|
10
|
+
const restore_response_dto_1 = require("./restore.response.dto");
|
|
11
|
+
const response_service_1 = require("../../../response/response.service");
|
|
12
|
+
const http_exception_filter_1 = require("../../../response/http-exception-filter");
|
|
13
|
+
const api_tags_constants_1 = require("../api-tags.constants");
|
|
14
|
+
const validation_1 = require("../../validation");
|
|
15
|
+
/**
|
|
16
|
+
* Controller for restore dismissible item operations.
|
|
17
|
+
*/
|
|
18
|
+
let RestoreController = class RestoreController {
|
|
19
|
+
constructor(dismissibleService, mapper, responseService) {
|
|
20
|
+
this.dismissibleService = dismissibleService;
|
|
21
|
+
this.mapper = mapper;
|
|
22
|
+
this.responseService = responseService;
|
|
23
|
+
}
|
|
24
|
+
async restore(userId, itemId, context) {
|
|
25
|
+
const result = await this.dismissibleService.restore(itemId, userId, context);
|
|
26
|
+
return this.responseService.success(this.mapper.toResponseDto(result.item));
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
exports.RestoreController = RestoreController;
|
|
30
|
+
tslib_1.__decorate([
|
|
31
|
+
(0, common_1.Post)(':itemId'),
|
|
32
|
+
(0, swagger_1.ApiOperation)({
|
|
33
|
+
summary: 'Restore a dismissed item',
|
|
34
|
+
description: 'Restores a previously dismissed item.',
|
|
35
|
+
}),
|
|
36
|
+
(0, swagger_1.ApiParam)({
|
|
37
|
+
name: 'userId',
|
|
38
|
+
description: 'User identifier (max length: 32 characters)',
|
|
39
|
+
example: 'user-123',
|
|
40
|
+
}),
|
|
41
|
+
(0, swagger_1.ApiParam)({
|
|
42
|
+
name: 'itemId',
|
|
43
|
+
description: 'Unique identifier for the dismissible item (max length: 32 characters)',
|
|
44
|
+
example: 'welcome-banner-v2',
|
|
45
|
+
}),
|
|
46
|
+
(0, swagger_1.ApiResponse)({
|
|
47
|
+
status: 200,
|
|
48
|
+
description: 'The restored item',
|
|
49
|
+
type: restore_response_dto_1.RestoreResponseDto,
|
|
50
|
+
}),
|
|
51
|
+
(0, swagger_1.ApiResponse)({
|
|
52
|
+
status: 400,
|
|
53
|
+
description: 'Item not found or not dismissed',
|
|
54
|
+
}),
|
|
55
|
+
(0, swagger_1.ApiResponse)({
|
|
56
|
+
status: 403,
|
|
57
|
+
description: 'Operation blocked by lifecycle hook',
|
|
58
|
+
}),
|
|
59
|
+
(0, common_1.UseFilters)(http_exception_filter_1.HttpExceptionFilter),
|
|
60
|
+
tslib_1.__param(0, (0, validation_1.UserId)()),
|
|
61
|
+
tslib_1.__param(1, (0, validation_1.ItemId)()),
|
|
62
|
+
tslib_1.__param(2, (0, nestjs_dismissible_request_1.RequestContext)()),
|
|
63
|
+
tslib_1.__metadata("design:type", Function),
|
|
64
|
+
tslib_1.__metadata("design:paramtypes", [String, String, Object]),
|
|
65
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
66
|
+
], RestoreController.prototype, "restore", null);
|
|
67
|
+
exports.RestoreController = RestoreController = tslib_1.__decorate([
|
|
68
|
+
(0, swagger_1.ApiTags)(api_tags_constants_1.API_TAG_DISMISSIBLE),
|
|
69
|
+
(0, common_1.Controller)('v1/users/:userId/items'),
|
|
70
|
+
tslib_1.__metadata("design:paramtypes", [dismissible_service_1.DismissibleService,
|
|
71
|
+
dismissible_item_mapper_1.DismissibleItemMapper,
|
|
72
|
+
response_service_1.ResponseService])
|
|
73
|
+
], RestoreController);
|
|
74
|
+
//# sourceMappingURL=restore.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restore.controller.js","sourceRoot":"","sources":["../../../../../../../libs/dismissible/src/api/use-cases/restore/restore.controller.ts"],"names":[],"mappings":";;;;AAAA,2CAA8D;AAC9D,6CAA+E;AAC/E,2EAAuE;AACvE,2EAAsE;AACtE,wFAA0F;AAC1F,iEAA4D;AAC5D,yEAAqE;AACrE,mFAA8E;AAC9E,8DAA4D;AAC5D,iDAAkD;AAElD;;GAEG;AAGI,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,YACmB,kBAAsC,EACtC,MAA6B,EAC7B,eAAgC;QAFhC,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,WAAM,GAAN,MAAM,CAAuB;QAC7B,oBAAe,GAAf,eAAe,CAAiB;IAChD,CAAC;IA+BE,AAAN,KAAK,CAAC,OAAO,CACD,MAAc,EACd,MAAc,EACN,OAAwB;QAE1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAE9E,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9E,CAAC;CACF,CAAA;AA7CY,8CAAiB;AAoCtB;IA7BL,IAAA,aAAI,EAAC,SAAS,CAAC;IACf,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,0BAA0B;QACnC,WAAW,EAAE,uCAAuC;KACrD,CAAC;IACD,IAAA,kBAAQ,EAAC;QACR,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,6CAA6C;QAC1D,OAAO,EAAE,UAAU;KACpB,CAAC;IACD,IAAA,kBAAQ,EAAC;QACR,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,wEAAwE;QACrF,OAAO,EAAE,mBAAmB;KAC7B,CAAC;IACD,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,GAAG;QACX,WAAW,EAAE,mBAAmB;QAChC,IAAI,EAAE,yCAAkB;KACzB,CAAC;IACD,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,GAAG;QACX,WAAW,EAAE,iCAAiC;KAC/C,CAAC;IACD,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,GAAG;QACX,WAAW,EAAE,qCAAqC;KACnD,CAAC;IACD,IAAA,mBAAU,EAAC,2CAAmB,CAAC;IAE7B,mBAAA,IAAA,mBAAM,GAAE,CAAA;IACR,mBAAA,IAAA,mBAAM,GAAE,CAAA;IACR,mBAAA,IAAA,2CAAc,GAAE,CAAA;;;;gDAKlB;4BA5CU,iBAAiB;IAF7B,IAAA,iBAAO,EAAC,wCAAmB,CAAC;IAC5B,IAAA,mBAAU,EAAC,wBAAwB,CAAC;6CAGI,wCAAkB;QAC9B,+CAAqB;QACZ,kCAAe;GAJxC,iBAAiB,CA6C7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const ts_jest_mocker_1 = require("ts-jest-mocker");
|
|
4
|
+
const restore_controller_1 = require("./restore.controller");
|
|
5
|
+
const dismissible_service_1 = require("../../../core/dismissible.service");
|
|
6
|
+
const dismissible_item_mapper_1 = require("../../dismissible-item.mapper");
|
|
7
|
+
const factories_1 = require("../../../testing/factories");
|
|
8
|
+
const response_1 = require("../../../response");
|
|
9
|
+
describe('RestoreController', () => {
|
|
10
|
+
let controller;
|
|
11
|
+
let mockService;
|
|
12
|
+
let mockResponseService;
|
|
13
|
+
let mapper;
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
mockService = (0, ts_jest_mocker_1.mock)(dismissible_service_1.DismissibleService);
|
|
16
|
+
mockResponseService = (0, ts_jest_mocker_1.mock)(response_1.ResponseService, { failIfMockNotProvided: false });
|
|
17
|
+
mockResponseService.success.mockImplementation((data) => ({ data }));
|
|
18
|
+
mapper = new dismissible_item_mapper_1.DismissibleItemMapper();
|
|
19
|
+
controller = new restore_controller_1.RestoreController(mockService, mapper, mockResponseService);
|
|
20
|
+
});
|
|
21
|
+
describe('restore', () => {
|
|
22
|
+
it('should return restored item wrapped in data', async () => {
|
|
23
|
+
const item = (0, factories_1.createTestItem)({ id: 'test-item' });
|
|
24
|
+
const previousItem = (0, factories_1.createTestItem)({
|
|
25
|
+
id: 'test-item',
|
|
26
|
+
dismissedAt: new Date(),
|
|
27
|
+
});
|
|
28
|
+
const context = (0, factories_1.createTestContext)();
|
|
29
|
+
mockService.restore.mockResolvedValue({ item, previousItem });
|
|
30
|
+
const result = await controller.restore('test-user-id', 'test-item', context);
|
|
31
|
+
expect(result.data.itemId).toBe('test-item');
|
|
32
|
+
expect(mockService.restore).toHaveBeenCalledWith('test-item', 'test-user-id', context);
|
|
33
|
+
expect(mockResponseService.success).toHaveBeenCalled();
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=restore.controller.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restore.controller.spec.js","sourceRoot":"","sources":["../../../../../../../libs/dismissible/src/api/use-cases/restore/restore.controller.spec.ts"],"names":[],"mappings":";;AAAA,mDAAsC;AACtC,6DAAyD;AACzD,2EAAuE;AACvE,2EAAsE;AACtE,0DAA+E;AAC/E,gDAAoD;AAEpD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,UAA6B,CAAC;IAClC,IAAI,WAA4C,CAAC;IACjD,IAAI,mBAAiD,CAAC;IACtD,IAAI,MAA6B,CAAC;IAElC,UAAU,CAAC,GAAG,EAAE;QACd,WAAW,GAAG,IAAA,qBAAI,EAAC,wCAAkB,CAAC,CAAC;QACvC,mBAAmB,GAAG,IAAA,qBAAI,EAAC,0BAAe,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9E,mBAAmB,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,GAAG,IAAI,+CAAqB,EAAE,CAAC;QAErC,UAAU,GAAG,IAAI,sCAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,IAAI,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC;gBAClC,EAAE,EAAE,WAAW;gBACf,WAAW,EAAE,IAAI,IAAI,EAAE;aACxB,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,IAAA,6BAAiB,GAAE,CAAC;YAEpC,WAAW,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YAE9D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YAE9E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;YACvF,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DismissibleItemResponseDto } from '../../dismissible-item-response.dto';
|
|
2
|
+
declare const RestoreResponseDto_base: {
|
|
3
|
+
new (): {
|
|
4
|
+
data: DismissibleItemResponseDto;
|
|
5
|
+
};
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Response DTO for the restore operation.
|
|
9
|
+
*/
|
|
10
|
+
export declare class RestoreResponseDto extends RestoreResponseDto_base {
|
|
11
|
+
}
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RestoreResponseDto = void 0;
|
|
4
|
+
const success_response_dto_1 = require("../../../response/dtos/success-response.dto");
|
|
5
|
+
const dismissible_item_response_dto_1 = require("../../dismissible-item-response.dto");
|
|
6
|
+
/**
|
|
7
|
+
* Response DTO for the restore operation.
|
|
8
|
+
*/
|
|
9
|
+
class RestoreResponseDto extends (0, success_response_dto_1.SuccessResponseDto)(dismissible_item_response_dto_1.DismissibleItemResponseDto) {
|
|
10
|
+
}
|
|
11
|
+
exports.RestoreResponseDto = RestoreResponseDto;
|
|
12
|
+
//# sourceMappingURL=restore.response.dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restore.response.dto.js","sourceRoot":"","sources":["../../../../../../../libs/dismissible/src/api/use-cases/restore/restore.response.dto.ts"],"names":[],"mappings":";;;AAAA,sFAAiF;AACjF,uFAAiF;AAEjF;;GAEG;AACH,MAAa,kBAAmB,SAAQ,IAAA,yCAAkB,EAAC,0DAA0B,CAAC;CAAG;AAAzF,gDAAyF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./param-validation.pipe"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./param.decorators"), exports);
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/dismissible/src/api/validation/index.ts"],"names":[],"mappings":";;;AAAA,kEAAwC;AACxC,6DAAmC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PipeTransform, ArgumentMetadata } from '@nestjs/common';
|
|
2
|
+
/**
|
|
3
|
+
* Validation pipe for userId and itemId route parameters.
|
|
4
|
+
* Validates:
|
|
5
|
+
* - Required (non-empty)
|
|
6
|
+
* - Length between 1-64 characters
|
|
7
|
+
* - Contains only alphanumeric characters, dashes, and underscores
|
|
8
|
+
*/
|
|
9
|
+
export declare class ParamValidationPipe implements PipeTransform<string, string> {
|
|
10
|
+
transform(value: string, metadata: ArgumentMetadata): string;
|
|
11
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ParamValidationPipe = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const dismissible_input_dto_1 = require("../../validation/dismissible-input.dto");
|
|
7
|
+
/**
|
|
8
|
+
* Validation pipe for userId and itemId route parameters.
|
|
9
|
+
* Validates:
|
|
10
|
+
* - Required (non-empty)
|
|
11
|
+
* - Length between 1-64 characters
|
|
12
|
+
* - Contains only alphanumeric characters, dashes, and underscores
|
|
13
|
+
*/
|
|
14
|
+
let ParamValidationPipe = class ParamValidationPipe {
|
|
15
|
+
transform(value, metadata) {
|
|
16
|
+
const paramName = metadata.data || 'parameter';
|
|
17
|
+
if (!value || value.trim() === '') {
|
|
18
|
+
throw new common_1.BadRequestException(`${paramName} is required`);
|
|
19
|
+
}
|
|
20
|
+
if (value.length < dismissible_input_dto_1.VALIDATION_CONSTANTS.ID_MIN_LENGTH) {
|
|
21
|
+
throw new common_1.BadRequestException(`${paramName} must be at least ${dismissible_input_dto_1.VALIDATION_CONSTANTS.ID_MIN_LENGTH} character`);
|
|
22
|
+
}
|
|
23
|
+
if (value.length > dismissible_input_dto_1.VALIDATION_CONSTANTS.ID_MAX_LENGTH) {
|
|
24
|
+
throw new common_1.BadRequestException(`${paramName} must be at most ${dismissible_input_dto_1.VALIDATION_CONSTANTS.ID_MAX_LENGTH} characters`);
|
|
25
|
+
}
|
|
26
|
+
if (!dismissible_input_dto_1.VALIDATION_CONSTANTS.ID_PATTERN.test(value)) {
|
|
27
|
+
throw new common_1.BadRequestException(`${paramName} ${dismissible_input_dto_1.VALIDATION_CONSTANTS.ID_PATTERN_MESSAGE}`);
|
|
28
|
+
}
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
exports.ParamValidationPipe = ParamValidationPipe;
|
|
33
|
+
exports.ParamValidationPipe = ParamValidationPipe = tslib_1.__decorate([
|
|
34
|
+
(0, common_1.Injectable)()
|
|
35
|
+
], ParamValidationPipe);
|
|
36
|
+
//# sourceMappingURL=param-validation.pipe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"param-validation.pipe.js","sourceRoot":"","sources":["../../../../../../libs/dismissible/src/api/validation/param-validation.pipe.ts"],"names":[],"mappings":";;;;AAAA,2CAAkG;AAClG,kFAA8E;AAE9E;;;;;;GAMG;AAEI,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAC9B,SAAS,CAAC,KAAa,EAAE,QAA0B;QACjD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,IAAI,WAAW,CAAC;QAE/C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAClC,MAAM,IAAI,4BAAmB,CAAC,GAAG,SAAS,cAAc,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,GAAG,4CAAoB,CAAC,aAAa,EAAE,CAAC;YACtD,MAAM,IAAI,4BAAmB,CAC3B,GAAG,SAAS,qBAAqB,4CAAoB,CAAC,aAAa,YAAY,CAChF,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,GAAG,4CAAoB,CAAC,aAAa,EAAE,CAAC;YACtD,MAAM,IAAI,4BAAmB,CAC3B,GAAG,SAAS,oBAAoB,4CAAoB,CAAC,aAAa,aAAa,CAChF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,4CAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,4BAAmB,CAAC,GAAG,SAAS,IAAI,4CAAoB,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC3F,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAA;AA1BY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;GACA,mBAAmB,CA0B/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|