@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.
- package/README.md +490 -0
- package/package.json +68 -0
- 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.d.ts +4 -0
- package/src/api/index.js +8 -0
- package/src/api/index.js.map +1 -0
- package/src/api/use-cases/api-tags.constants.d.ts +4 -0
- 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.d.ts +2 -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.d.ts +2 -0
- 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.d.ts +3 -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.d.ts +2 -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.d.ts +5 -0
- 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.d.ts +2 -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.d.ts +1 -0
- package/src/exceptions/index.js +5 -0
- package/src/exceptions/index.js.map +1 -0
- package/src/index.d.ts +8 -0
- 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.d.ts +3 -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.d.ts +28 -0
- 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.d.ts +4 -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.d.ts +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.d.ts +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.d.ts +3 -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
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const dismissible_item_mapper_1 = require("./dismissible-item.mapper");
|
|
4
|
+
const factories_1 = require("../testing/factories");
|
|
5
|
+
describe('DismissibleItemMapper', () => {
|
|
6
|
+
let mapper;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
mapper = new dismissible_item_mapper_1.DismissibleItemMapper();
|
|
9
|
+
});
|
|
10
|
+
describe('toResponseDto', () => {
|
|
11
|
+
it('should convert basic item to DTO', () => {
|
|
12
|
+
const item = (0, factories_1.createTestItem)({
|
|
13
|
+
id: 'test-item',
|
|
14
|
+
userId: 'test-user-id',
|
|
15
|
+
createdAt: new Date('2024-01-15T10:00:00.000Z'),
|
|
16
|
+
});
|
|
17
|
+
const dto = mapper.toResponseDto(item);
|
|
18
|
+
expect(dto.itemId).toBe('test-item');
|
|
19
|
+
expect(dto.userId).toBe('test-user-id');
|
|
20
|
+
expect(dto.createdAt).toBe('2024-01-15T10:00:00.000Z');
|
|
21
|
+
expect(dto.dismissedAt).toBeUndefined();
|
|
22
|
+
});
|
|
23
|
+
it('should convert dates to ISO strings', () => {
|
|
24
|
+
const item = (0, factories_1.createDismissedTestItem)({
|
|
25
|
+
id: 'test-item',
|
|
26
|
+
createdAt: new Date('2024-01-15T10:00:00.000Z'),
|
|
27
|
+
dismissedAt: new Date('2024-01-15T12:00:00.000Z'),
|
|
28
|
+
});
|
|
29
|
+
const dto = mapper.toResponseDto(item);
|
|
30
|
+
expect(dto.createdAt).toBe('2024-01-15T10:00:00.000Z');
|
|
31
|
+
expect(dto.dismissedAt).toBe('2024-01-15T12:00:00.000Z');
|
|
32
|
+
});
|
|
33
|
+
it('should include userId in DTO', () => {
|
|
34
|
+
const item = (0, factories_1.createTestItem)({
|
|
35
|
+
id: 'test-item',
|
|
36
|
+
userId: 'user-123',
|
|
37
|
+
});
|
|
38
|
+
const dto = mapper.toResponseDto(item);
|
|
39
|
+
expect(dto.userId).toBe('user-123');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=dismissible-item.mapper.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dismissible-item.mapper.spec.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/api/dismissible-item.mapper.spec.ts"],"names":[],"mappings":";;AAAA,uEAAkE;AAClE,oDAA+E;AAE/E,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAI,MAA6B,CAAC;IAElC,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,+CAAqB,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,IAAI,GAAG,IAAA,0BAAc,EAAC;gBAC1B,EAAE,EAAE,WAAW;gBACf,MAAM,EAAE,cAAc;gBACtB,SAAS,EAAE,IAAI,IAAI,CAAC,0BAA0B,CAAC;aAChD,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAEvC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACxC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACvD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,IAAI,GAAG,IAAA,mCAAuB,EAAC;gBACnC,EAAE,EAAE,WAAW;gBACf,SAAS,EAAE,IAAI,IAAI,CAAC,0BAA0B,CAAC;gBAC/C,WAAW,EAAE,IAAI,IAAI,CAAC,0BAA0B,CAAC;aAClD,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAEvC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACvD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,IAAI,GAAG,IAAA,0BAAc,EAAC;gBAC1B,EAAE,EAAE,WAAW;gBACf,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAEvC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/src/api/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./use-cases"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./validation"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./dismissible-item.mapper"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./dismissible-item-response.dto"), exports);
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/api/index.ts"],"names":[],"mappings":";;;AAAA,sDAA4B;AAE5B,uDAA6B;AAE7B,oEAA0C;AAC1C,0EAAgD"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.API_TAG_DISMISSIBLE = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* API tag constants for Swagger/OpenAPI documentation.
|
|
6
|
+
*/
|
|
7
|
+
exports.API_TAG_DISMISSIBLE = 'Dismissible';
|
|
8
|
+
//# sourceMappingURL=api-tags.constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-tags.constants.js","sourceRoot":"","sources":["../../../../../../libs/dismissible/src/api/use-cases/api-tags.constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,mBAAmB,GAAG,aAAa,CAAC"}
|
|
@@ -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 { DismissResponseDto } from './dismiss.response.dto';
|
|
5
|
+
import { ResponseService } from '../../../response/response.service';
|
|
6
|
+
/**
|
|
7
|
+
* Controller for dismiss dismissible item operations.
|
|
8
|
+
*/
|
|
9
|
+
export declare class DismissController {
|
|
10
|
+
private readonly dismissibleService;
|
|
11
|
+
private readonly mapper;
|
|
12
|
+
private readonly responseService;
|
|
13
|
+
constructor(dismissibleService: DismissibleService, mapper: DismissibleItemMapper, responseService: ResponseService);
|
|
14
|
+
dismiss(userId: string, itemId: string, context: IRequestContext): Promise<DismissResponseDto>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DismissController = 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 dismiss_response_dto_1 = require("./dismiss.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 dismiss dismissible item operations.
|
|
17
|
+
*/
|
|
18
|
+
let DismissController = class DismissController {
|
|
19
|
+
constructor(dismissibleService, mapper, responseService) {
|
|
20
|
+
this.dismissibleService = dismissibleService;
|
|
21
|
+
this.mapper = mapper;
|
|
22
|
+
this.responseService = responseService;
|
|
23
|
+
}
|
|
24
|
+
async dismiss(userId, itemId, context) {
|
|
25
|
+
const result = await this.dismissibleService.dismiss(itemId, userId, context);
|
|
26
|
+
return this.responseService.success(this.mapper.toResponseDto(result.item));
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
exports.DismissController = DismissController;
|
|
30
|
+
tslib_1.__decorate([
|
|
31
|
+
(0, common_1.Delete)(':itemId'),
|
|
32
|
+
(0, swagger_1.ApiOperation)({
|
|
33
|
+
summary: 'Dismiss an item',
|
|
34
|
+
description: 'Marks a dismissible item as dismissed.',
|
|
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 dismissed item',
|
|
49
|
+
type: dismiss_response_dto_1.DismissResponseDto,
|
|
50
|
+
}),
|
|
51
|
+
(0, swagger_1.ApiResponse)({
|
|
52
|
+
status: 400,
|
|
53
|
+
description: 'Item not found or already 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
|
+
], DismissController.prototype, "dismiss", null);
|
|
67
|
+
exports.DismissController = DismissController = 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
|
+
], DismissController);
|
|
74
|
+
//# sourceMappingURL=dismiss.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dismiss.controller.js","sourceRoot":"","sources":["../../../../../../../libs/dismissible/src/api/use-cases/dismiss/dismiss.controller.ts"],"names":[],"mappings":";;;;AAAA,2CAAgE;AAChE,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,eAAM,EAAC,SAAS,CAAC;IACjB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EAAE,wCAAwC;KACtD,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,oBAAoB;QACjC,IAAI,EAAE,yCAAkB;KACzB,CAAC;IACD,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,GAAG;QACX,WAAW,EAAE,qCAAqC;KACnD,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 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 {};
|