@buunguyen3589/collections-module 1.0.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/dist/app/index.d.ts +1 -0
- package/dist/app/index.js +17 -0
- package/dist/app/usecases/command/create-collection.usecase.d.ts +16 -0
- package/dist/app/usecases/command/create-collection.usecase.js +66 -0
- package/dist/app/usecases/command/delete-collection.usecase.d.ts +13 -0
- package/dist/app/usecases/command/delete-collection.usecase.js +57 -0
- package/dist/app/usecases/command/index.d.ts +5 -0
- package/dist/app/usecases/command/index.js +21 -0
- package/dist/app/usecases/command/post-collection/index.d.ts +1 -0
- package/dist/app/usecases/command/post-collection/index.js +17 -0
- package/dist/app/usecases/command/post-collection/upsert-post-collection.usecase.d.ts +14 -0
- package/dist/app/usecases/command/post-collection/upsert-post-collection.usecase.js +63 -0
- package/dist/app/usecases/command/product-collection/add-all-products-collection.usecase.d.ts +24 -0
- package/dist/app/usecases/command/product-collection/add-all-products-collection.usecase.js +93 -0
- package/dist/app/usecases/command/product-collection/create-product-collection.usecase.d.ts +24 -0
- package/dist/app/usecases/command/product-collection/create-product-collection.usecase.js +94 -0
- package/dist/app/usecases/command/product-collection/delete-product-collection.usecase.d.ts +14 -0
- package/dist/app/usecases/command/product-collection/delete-product-collection.usecase.js +56 -0
- package/dist/app/usecases/command/product-collection/index.d.ts +3 -0
- package/dist/app/usecases/command/product-collection/index.js +19 -0
- package/dist/app/usecases/command/update-collection.usecase.d.ts +15 -0
- package/dist/app/usecases/command/update-collection.usecase.js +73 -0
- package/dist/app/usecases/index.d.ts +2 -0
- package/dist/app/usecases/index.js +18 -0
- package/dist/app/usecases/query/get-detail-collection.usecase.d.ts +36 -0
- package/dist/app/usecases/query/get-detail-collection.usecase.js +216 -0
- package/dist/app/usecases/query/get-list-collection.usecase.d.ts +23 -0
- package/dist/app/usecases/query/get-list-collection.usecase.js +96 -0
- package/dist/app/usecases/query/get-products-by-collections-internal.usecase.d.ts +19 -0
- package/dist/app/usecases/query/get-products-by-collections-internal.usecase.js +65 -0
- package/dist/app/usecases/query/get-products-by-collections.usecase.d.ts +44 -0
- package/dist/app/usecases/query/get-products-by-collections.usecase.js +130 -0
- package/dist/app/usecases/query/index.d.ts +4 -0
- package/dist/app/usecases/query/index.js +20 -0
- package/dist/collection.module.d.ts +2 -0
- package/dist/collection.module.js +62 -0
- package/dist/domain/aggregates/enums/collection.enum.d.ts +5 -0
- package/dist/domain/aggregates/enums/collection.enum.js +9 -0
- package/dist/domain/aggregates/enums/index.d.ts +1 -0
- package/dist/domain/aggregates/enums/index.js +17 -0
- package/dist/domain/aggregates/index.d.ts +2 -0
- package/dist/domain/aggregates/index.js +18 -0
- package/dist/domain/aggregates/types/collection.type.d.ts +14 -0
- package/dist/domain/aggregates/types/collection.type.js +2 -0
- package/dist/domain/aggregates/types/index.d.ts +3 -0
- package/dist/domain/aggregates/types/index.js +19 -0
- package/dist/domain/aggregates/types/post-collection.type.d.ts +12 -0
- package/dist/domain/aggregates/types/post-collection.type.js +2 -0
- package/dist/domain/aggregates/types/product-collection.type.d.ts +11 -0
- package/dist/domain/aggregates/types/product-collection.type.js +2 -0
- package/dist/domain/builders/collection.builder.d.ts +8 -0
- package/dist/domain/builders/collection.builder.js +38 -0
- package/dist/domain/builders/index.d.ts +3 -0
- package/dist/domain/builders/index.js +19 -0
- package/dist/domain/builders/post-collection.builder.d.ts +8 -0
- package/dist/domain/builders/post-collection.builder.js +38 -0
- package/dist/domain/builders/product-collection.builder.d.ts +8 -0
- package/dist/domain/builders/product-collection.builder.js +38 -0
- package/dist/domain/consts/event-collection.name.const.d.ts +5 -0
- package/dist/domain/consts/event-collection.name.const.js +8 -0
- package/dist/domain/consts/event-post-collection.name.const.d.ts +6 -0
- package/dist/domain/consts/event-post-collection.name.const.js +9 -0
- package/dist/domain/consts/event-product-collection.name.const.d.ts +5 -0
- package/dist/domain/consts/event-product-collection.name.const.js +8 -0
- package/dist/domain/consts/index.d.ts +3 -0
- package/dist/domain/consts/index.js +19 -0
- package/dist/domain/dtos/collection.dto.d.ts +4 -0
- package/dist/domain/dtos/collection.dto.js +2 -0
- package/dist/domain/dtos/index.d.ts +3 -0
- package/dist/domain/dtos/index.js +19 -0
- package/dist/domain/dtos/post-collection.dto.d.ts +4 -0
- package/dist/domain/dtos/post-collection.dto.js +2 -0
- package/dist/domain/dtos/product-collection.dto.d.ts +4 -0
- package/dist/domain/dtos/product-collection.dto.js +2 -0
- package/dist/domain/entities/collection.entity.d.ts +40 -0
- package/dist/domain/entities/collection.entity.js +87 -0
- package/dist/domain/entities/index.d.ts +3 -0
- package/dist/domain/entities/index.js +19 -0
- package/dist/domain/entities/post-collection.entity.d.ts +33 -0
- package/dist/domain/entities/post-collection.entity.js +70 -0
- package/dist/domain/entities/product-collection.entity.d.ts +30 -0
- package/dist/domain/entities/product-collection.entity.js +55 -0
- package/dist/domain/index.d.ts +6 -0
- package/dist/domain/index.js +22 -0
- package/dist/domain/mappers/collection.mapper.d.ts +11 -0
- package/dist/domain/mappers/collection.mapper.js +56 -0
- package/dist/domain/mappers/index.d.ts +3 -0
- package/dist/domain/mappers/index.js +19 -0
- package/dist/domain/mappers/post-collection.mapper.d.ts +11 -0
- package/dist/domain/mappers/post-collection.mapper.js +50 -0
- package/dist/domain/mappers/product-collection.mapper.d.ts +11 -0
- package/dist/domain/mappers/product-collection.mapper.js +48 -0
- package/dist/domain/repositories/collection.repository.d.ts +21 -0
- package/dist/domain/repositories/collection.repository.js +93 -0
- package/dist/domain/repositories/index.d.ts +3 -0
- package/dist/domain/repositories/index.js +19 -0
- package/dist/domain/repositories/post-collection.repository.d.ts +21 -0
- package/dist/domain/repositories/post-collection.repository.js +107 -0
- package/dist/domain/repositories/product-collection.repository.d.ts +21 -0
- package/dist/domain/repositories/product-collection.repository.js +98 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +23 -0
- package/dist/infra/daos/collection.dao.d.ts +7 -0
- package/dist/infra/daos/collection.dao.js +36 -0
- package/dist/infra/daos/index.d.ts +3 -0
- package/dist/infra/daos/index.js +19 -0
- package/dist/infra/daos/post-collection.dao.d.ts +10 -0
- package/dist/infra/daos/post-collection.dao.js +70 -0
- package/dist/infra/daos/product-collection.dao.d.ts +9 -0
- package/dist/infra/daos/product-collection.dao.js +69 -0
- package/dist/infra/event-handlers/collection.event-emitter.d.ts +6 -0
- package/dist/infra/event-handlers/collection.event-emitter.js +27 -0
- package/dist/infra/event-handlers/index.d.ts +3 -0
- package/dist/infra/event-handlers/index.js +19 -0
- package/dist/infra/event-handlers/post-collection.event-emitter.d.ts +6 -0
- package/dist/infra/event-handlers/post-collection.event-emitter.js +27 -0
- package/dist/infra/event-handlers/product-collection.event-emitter.d.ts +6 -0
- package/dist/infra/event-handlers/product-collection.event-emitter.js +27 -0
- package/dist/infra/filters/collection.filter.d.ts +25 -0
- package/dist/infra/filters/collection.filter.js +84 -0
- package/dist/infra/filters/index.d.ts +3 -0
- package/dist/infra/filters/index.js +19 -0
- package/dist/infra/filters/post-collection.filter.d.ts +16 -0
- package/dist/infra/filters/post-collection.filter.js +54 -0
- package/dist/infra/filters/product-collection.filter.d.ts +13 -0
- package/dist/infra/filters/product-collection.filter.js +44 -0
- package/dist/infra/index.d.ts +6 -0
- package/dist/infra/index.js +22 -0
- package/dist/infra/mappers/collection.mapper.d.ts +8 -0
- package/dist/infra/mappers/collection.mapper.js +31 -0
- package/dist/infra/mappers/index.d.ts +3 -0
- package/dist/infra/mappers/index.js +19 -0
- package/dist/infra/mappers/post-collection.mapper.d.ts +8 -0
- package/dist/infra/mappers/post-collection.mapper.js +25 -0
- package/dist/infra/mappers/product-collection.mapper.d.ts +8 -0
- package/dist/infra/mappers/product-collection.mapper.js +24 -0
- package/dist/infra/query-configs/collection.query-config.d.ts +3 -0
- package/dist/infra/query-configs/collection.query-config.js +46 -0
- package/dist/infra/query-configs/index.d.ts +3 -0
- package/dist/infra/query-configs/index.js +19 -0
- package/dist/infra/query-configs/post-collection.query-config.d.ts +3 -0
- package/dist/infra/query-configs/post-collection.query-config.js +31 -0
- package/dist/infra/query-configs/product-collection.query-config.d.ts +3 -0
- package/dist/infra/query-configs/product-collection.query-config.js +26 -0
- package/dist/infra/records/collection.record.d.ts +11 -0
- package/dist/infra/records/collection.record.js +2 -0
- package/dist/infra/records/index.d.ts +3 -0
- package/dist/infra/records/index.js +19 -0
- package/dist/infra/records/post-collection.record.d.ts +7 -0
- package/dist/infra/records/post-collection.record.js +2 -0
- package/dist/infra/records/product-collection.record.d.ts +7 -0
- package/dist/infra/records/product-collection.record.js +2 -0
- package/dist/presentation/controllers/index.d.ts +2 -0
- package/dist/presentation/controllers/index.js +18 -0
- package/dist/presentation/controllers/internals/index.d.ts +1 -0
- package/dist/presentation/controllers/internals/index.js +17 -0
- package/dist/presentation/controllers/internals/product-collection.internal.rest.d.ts +8 -0
- package/dist/presentation/controllers/internals/product-collection.internal.rest.js +45 -0
- package/dist/presentation/controllers/storefront/collection.storefront.rest.d.ts +26 -0
- package/dist/presentation/controllers/storefront/collection.storefront.rest.js +155 -0
- package/dist/presentation/controllers/storefront/index.d.ts +3 -0
- package/dist/presentation/controllers/storefront/index.js +19 -0
- package/dist/presentation/controllers/storefront/post-collection.storefront.d.ts +7 -0
- package/dist/presentation/controllers/storefront/post-collection.storefront.js +37 -0
- package/dist/presentation/controllers/storefront/product-collection.storefront.rest.d.ts +5 -0
- package/dist/presentation/controllers/storefront/product-collection.storefront.rest.js +50 -0
- package/dist/presentation/index.d.ts +1 -0
- package/dist/presentation/index.js +17 -0
- package/dist/shared/configs/index.d.ts +1 -0
- package/dist/shared/configs/index.js +17 -0
- package/dist/shared/configs/pagination.config.d.ts +4 -0
- package/dist/shared/configs/pagination.config.js +7 -0
- package/dist/shared/constants/collection-inject-tokens.const.d.ts +56 -0
- package/dist/shared/constants/collection-inject-tokens.const.js +61 -0
- package/dist/shared/constants/collection-table-names.const.d.ts +12 -0
- package/dist/shared/constants/collection-table-names.const.js +16 -0
- package/dist/shared/constants/component-inject-tokens.const.d.ts +7 -0
- package/dist/shared/constants/component-inject-tokens.const.js +11 -0
- package/dist/shared/constants/error-codes.const.d.ts +6 -0
- package/dist/shared/constants/error-codes.const.js +10 -0
- package/dist/shared/constants/index.d.ts +4 -0
- package/dist/shared/constants/index.js +21 -0
- package/dist/shared/core/filter.d.ts +80 -0
- package/dist/shared/core/filter.js +554 -0
- package/dist/shared/core/index.d.ts +1 -0
- package/dist/shared/core/index.js +17 -0
- package/dist/shared/index.d.ts +5 -0
- package/dist/shared/index.js +21 -0
- package/dist/shared/interfaces/ambassador-dao.interface.d.ts +5 -0
- package/dist/shared/interfaces/ambassador-dao.interface.js +2 -0
- package/dist/shared/interfaces/ambassador-usecase.interface.d.ts +16 -0
- package/dist/shared/interfaces/ambassador-usecase.interface.js +2 -0
- package/dist/shared/interfaces/campaign-service.interface.d.ts +3 -0
- package/dist/shared/interfaces/campaign-service.interface.js +4 -0
- package/dist/shared/interfaces/index.d.ts +6 -0
- package/dist/shared/interfaces/index.js +22 -0
- package/dist/shared/interfaces/post-product-dao.interface.d.ts +8 -0
- package/dist/shared/interfaces/post-product-dao.interface.js +2 -0
- package/dist/shared/interfaces/product-service.interface.d.ts +6 -0
- package/dist/shared/interfaces/product-service.interface.js +2 -0
- package/dist/shared/interfaces/ugc-management-service.interface.d.ts +11 -0
- package/dist/shared/interfaces/ugc-management-service.interface.js +2 -0
- package/dist/shared/types/common.type.d.ts +4 -0
- package/dist/shared/types/common.type.js +2 -0
- package/dist/shared/types/discount.enum.d.ts +4 -0
- package/dist/shared/types/discount.enum.js +8 -0
- package/dist/shared/types/index.d.ts +4 -0
- package/dist/shared/types/index.js +20 -0
- package/dist/shared/types/shopify.type.d.ts +28 -0
- package/dist/shared/types/shopify.type.js +2 -0
- package/dist/shared/types/ugc.type.d.ts +41 -0
- package/dist/shared/types/ugc.type.js +2 -0
- package/package.json +56 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './usecases';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./usecases"), exports);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { IUseCase, UseCase, UseCaseContext } from '@cbidigital/aqua-ddd';
|
|
2
|
+
import { CollectionBuilder, CollectionRepository, CreateCollectionInput } from '../../../domain';
|
|
3
|
+
export type CreateCollectionUseCaseInput = CreateCollectionInput;
|
|
4
|
+
export type CreateCollectionUseCaseOutput = {
|
|
5
|
+
id: string;
|
|
6
|
+
};
|
|
7
|
+
export type ICreateCollectionUseCase = IUseCase<CreateCollectionUseCaseInput, CreateCollectionUseCaseOutput, UseCaseContext>;
|
|
8
|
+
export declare class CollectionCreateUseCase<I extends CreateCollectionUseCaseInput = CreateCollectionUseCaseInput, O extends CreateCollectionUseCaseOutput = CreateCollectionUseCaseOutput, C extends UseCaseContext = UseCaseContext> extends UseCase<I, O, C> implements ICreateCollectionUseCase {
|
|
9
|
+
protected readonly collectionBuilder: CollectionBuilder;
|
|
10
|
+
protected readonly collectionRepository: CollectionRepository;
|
|
11
|
+
private readonly logger;
|
|
12
|
+
constructor(collectionBuilder: CollectionBuilder, collectionRepository: CollectionRepository);
|
|
13
|
+
processing: (input: CreateCollectionUseCaseInput) => Promise<{
|
|
14
|
+
id: string;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.CollectionCreateUseCase = void 0;
|
|
16
|
+
const aqua_ddd_1 = require("@cbidigital/aqua-ddd");
|
|
17
|
+
const common_1 = require("@heronjs/common");
|
|
18
|
+
const shared_1 = require("../../../shared");
|
|
19
|
+
const domain_1 = require("../../../domain");
|
|
20
|
+
const zod_1 = require("zod");
|
|
21
|
+
const CreateCollectionUseCaseInputSchema = zod_1.z.object({
|
|
22
|
+
ambassadorId: zod_1.z.string().uuid(),
|
|
23
|
+
collectionName: zod_1.z.string().min(1),
|
|
24
|
+
description: zod_1.z.string().optional(),
|
|
25
|
+
isFavorite: zod_1.z.boolean().default(false),
|
|
26
|
+
});
|
|
27
|
+
let CollectionCreateUseCase = class CollectionCreateUseCase extends aqua_ddd_1.UseCase {
|
|
28
|
+
constructor(collectionBuilder, collectionRepository) {
|
|
29
|
+
super();
|
|
30
|
+
this.collectionBuilder = collectionBuilder;
|
|
31
|
+
this.collectionRepository = collectionRepository;
|
|
32
|
+
this.processing = async (input) => {
|
|
33
|
+
input.collectionType = domain_1.CollectionTypeEnum.OTHERS;
|
|
34
|
+
const model = CreateCollectionUseCaseInputSchema.parse(input);
|
|
35
|
+
try {
|
|
36
|
+
const entity = await this.collectionBuilder.build();
|
|
37
|
+
await entity.create(model);
|
|
38
|
+
await this.collectionRepository.create(entity, {
|
|
39
|
+
tenantId: this.context.tenantId,
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
id: entity.id,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if (error?.code === '23505') {
|
|
47
|
+
throw new common_1.RuntimeError('CREATE_COLLECTION', shared_1.ERROR_CODES.CODE_ALREADY_EXIST, `Collection already exists.`);
|
|
48
|
+
}
|
|
49
|
+
throw new common_1.RuntimeError('CREATE_COLLECTION', shared_1.ERROR_CODES.BAD_REQUEST, error);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
this.logger = new common_1.Logger(this.constructor.name);
|
|
53
|
+
this.setMethods(this.processing);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
CollectionCreateUseCase = __decorate([
|
|
57
|
+
(0, common_1.Provider)({
|
|
58
|
+
token: shared_1.COLLECTION_INJECT_TOKENS.USECASE.COLLECTION_CREATE,
|
|
59
|
+
scope: common_1.Lifecycle.Transient,
|
|
60
|
+
}),
|
|
61
|
+
__param(0, (0, common_1.Inject)(shared_1.COLLECTION_INJECT_TOKENS.BUILDER.COLLECTION)),
|
|
62
|
+
__param(1, (0, common_1.Inject)(shared_1.COLLECTION_INJECT_TOKENS.REPOSITORY.COLLECTION)),
|
|
63
|
+
__metadata("design:paramtypes", [domain_1.CollectionBuilder,
|
|
64
|
+
domain_1.CollectionRepository])
|
|
65
|
+
], CollectionCreateUseCase);
|
|
66
|
+
exports.CollectionCreateUseCase = CollectionCreateUseCase;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IUseCase, UseCase, UseCaseContext } from '@cbidigital/aqua-ddd';
|
|
2
|
+
import { CollectionRepository, DeleteCollectionInput } from '../../../domain';
|
|
3
|
+
type DeleteCollectionUseCaseInput = DeleteCollectionInput & {
|
|
4
|
+
ambassadorId: string;
|
|
5
|
+
};
|
|
6
|
+
type DeleteCollectionUseCaseOutput = void;
|
|
7
|
+
export type IDeleteCollectionUseCase = IUseCase<DeleteCollectionUseCaseInput, DeleteCollectionUseCaseOutput, UseCaseContext>;
|
|
8
|
+
export declare class CollectionDeleteUsecase extends UseCase<DeleteCollectionUseCaseInput, DeleteCollectionUseCaseOutput, UseCaseContext> implements IDeleteCollectionUseCase {
|
|
9
|
+
protected readonly collectionRepo: CollectionRepository;
|
|
10
|
+
constructor(collectionRepo: CollectionRepository);
|
|
11
|
+
processing: (input: DeleteCollectionUseCaseInput) => Promise<DeleteCollectionUseCaseOutput>;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.CollectionDeleteUsecase = void 0;
|
|
16
|
+
const aqua_ddd_1 = require("@cbidigital/aqua-ddd");
|
|
17
|
+
const common_1 = require("@heronjs/common");
|
|
18
|
+
const zod_1 = require("zod");
|
|
19
|
+
const domain_1 = require("../../../domain");
|
|
20
|
+
const shared_1 = require("../../../shared");
|
|
21
|
+
const DeleteCollectionUseCaseInputSchema = zod_1.z.object({
|
|
22
|
+
id: zod_1.z.string(),
|
|
23
|
+
ambassadorId: zod_1.z.string(),
|
|
24
|
+
});
|
|
25
|
+
let CollectionDeleteUsecase = class CollectionDeleteUsecase extends aqua_ddd_1.UseCase {
|
|
26
|
+
constructor(collectionRepo) {
|
|
27
|
+
super();
|
|
28
|
+
this.collectionRepo = collectionRepo;
|
|
29
|
+
this.processing = async (input) => {
|
|
30
|
+
const model = DeleteCollectionUseCaseInputSchema.parse(input);
|
|
31
|
+
const entity = await this.collectionRepo.findOne({
|
|
32
|
+
filter: {
|
|
33
|
+
id: { $eq: model.id },
|
|
34
|
+
ambassadorId: { $eq: model.ambassadorId },
|
|
35
|
+
},
|
|
36
|
+
}, {
|
|
37
|
+
tenantId: this.context.tenantId,
|
|
38
|
+
});
|
|
39
|
+
if (!entity) {
|
|
40
|
+
throw new common_1.RuntimeError('DELETE_COLLECTION', shared_1.ERROR_CODES.NOT_FOUND, 'Collection not found');
|
|
41
|
+
}
|
|
42
|
+
if (entity.collectionType !== domain_1.CollectionTypeEnum.OTHERS) {
|
|
43
|
+
throw new common_1.RuntimeError('DELETE_COLLECTION', shared_1.ERROR_CODES.NOT_FOUND, 'Cannot delete default collections');
|
|
44
|
+
}
|
|
45
|
+
await this.collectionRepo.delete(entity, {
|
|
46
|
+
tenantId: this.context.tenantId,
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
this.setMethods(this.processing);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
CollectionDeleteUsecase = __decorate([
|
|
53
|
+
(0, common_1.Provider)({ token: shared_1.COLLECTION_INJECT_TOKENS.USECASE.COLLECTION_DELETE, scope: common_1.Lifecycle.Transient }),
|
|
54
|
+
__param(0, (0, common_1.Inject)(shared_1.COLLECTION_INJECT_TOKENS.REPOSITORY.COLLECTION)),
|
|
55
|
+
__metadata("design:paramtypes", [domain_1.CollectionRepository])
|
|
56
|
+
], CollectionDeleteUsecase);
|
|
57
|
+
exports.CollectionDeleteUsecase = CollectionDeleteUsecase;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./create-collection.usecase"), exports);
|
|
18
|
+
__exportStar(require("./update-collection.usecase"), exports);
|
|
19
|
+
__exportStar(require("./delete-collection.usecase"), exports);
|
|
20
|
+
__exportStar(require("./product-collection"), exports);
|
|
21
|
+
__exportStar(require("./post-collection"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './upsert-post-collection.usecase';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./upsert-post-collection.usecase"), exports);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IUseCase, UseCase, UseCaseContext } from '@cbidigital/aqua-ddd';
|
|
2
|
+
import { PostCollectionBuilder, PostCollectionRepository, UpdatePostCollectionInput } from '../../../../domain';
|
|
3
|
+
type UpsertPostCollectionUseCaseInput = UpdatePostCollectionInput;
|
|
4
|
+
type UpsertPostCollectionUseCaseOutput = {
|
|
5
|
+
id: string;
|
|
6
|
+
};
|
|
7
|
+
export type IUpsertPostCollectionUseCase = IUseCase<UpsertPostCollectionUseCaseInput, UpsertPostCollectionUseCaseOutput, UseCaseContext>;
|
|
8
|
+
export declare class UpsertPostCollectionUseCase extends UseCase<UpsertPostCollectionUseCaseInput, UpsertPostCollectionUseCaseOutput, UseCaseContext> implements IUpsertPostCollectionUseCase {
|
|
9
|
+
protected readonly postCollectionBuilder: PostCollectionBuilder;
|
|
10
|
+
protected readonly postCollectionRepository: PostCollectionRepository;
|
|
11
|
+
constructor(postCollectionBuilder: PostCollectionBuilder, postCollectionRepository: PostCollectionRepository);
|
|
12
|
+
processing: (input: UpsertPostCollectionUseCaseInput) => Promise<UpsertPostCollectionUseCaseOutput>;
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.UpsertPostCollectionUseCase = void 0;
|
|
16
|
+
const aqua_ddd_1 = require("@cbidigital/aqua-ddd");
|
|
17
|
+
const common_1 = require("@heronjs/common");
|
|
18
|
+
const zod_1 = require("zod");
|
|
19
|
+
const shared_1 = require("../../../../shared");
|
|
20
|
+
const domain_1 = require("../../../../domain");
|
|
21
|
+
const UpsertPostCollectionUseCaseInputSchema = zod_1.z.object({
|
|
22
|
+
id: zod_1.z.string().optional(),
|
|
23
|
+
collectionId: zod_1.z.string().uuid(),
|
|
24
|
+
postId: zod_1.z.string().uuid(),
|
|
25
|
+
hidden: zod_1.z.boolean(),
|
|
26
|
+
ambassadorId: zod_1.z.string().uuid(),
|
|
27
|
+
});
|
|
28
|
+
let UpsertPostCollectionUseCase = class UpsertPostCollectionUseCase extends aqua_ddd_1.UseCase {
|
|
29
|
+
constructor(postCollectionBuilder, postCollectionRepository) {
|
|
30
|
+
super();
|
|
31
|
+
this.postCollectionBuilder = postCollectionBuilder;
|
|
32
|
+
this.postCollectionRepository = postCollectionRepository;
|
|
33
|
+
this.processing = async (input) => {
|
|
34
|
+
let model;
|
|
35
|
+
try {
|
|
36
|
+
model = UpsertPostCollectionUseCaseInputSchema.parse(input);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
throw new common_1.RuntimeError(common_1.Errors.VALIDATION_ERR, 10000, 'Validate failed', error);
|
|
40
|
+
}
|
|
41
|
+
const entity = await this.postCollectionBuilder.build();
|
|
42
|
+
await entity.upsert(model);
|
|
43
|
+
try {
|
|
44
|
+
await this.postCollectionRepository.upsert(entity, {
|
|
45
|
+
tenantId: this.context.tenantId,
|
|
46
|
+
});
|
|
47
|
+
return { id: entity.id };
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
throw new common_1.RuntimeError('UPDATE_POST_COLLECTION', shared_1.ERROR_CODES.BAD_REQUEST, error);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
this.setMethods(this.processing);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
UpsertPostCollectionUseCase = __decorate([
|
|
57
|
+
(0, common_1.Provider)({ token: shared_1.COLLECTION_INJECT_TOKENS.USECASE.POST_COLLECTION_UPSERT, scope: common_1.Lifecycle.Transient }),
|
|
58
|
+
__param(0, (0, common_1.Inject)(shared_1.COLLECTION_INJECT_TOKENS.BUILDER.POST_COLLECTION)),
|
|
59
|
+
__param(1, (0, common_1.Inject)(shared_1.COLLECTION_INJECT_TOKENS.REPOSITORY.POST_COLLECTION)),
|
|
60
|
+
__metadata("design:paramtypes", [domain_1.PostCollectionBuilder,
|
|
61
|
+
domain_1.PostCollectionRepository])
|
|
62
|
+
], UpsertPostCollectionUseCase);
|
|
63
|
+
exports.UpsertPostCollectionUseCase = UpsertPostCollectionUseCase;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { IUseCase, UseCase, UseCaseContext } from '@cbidigital/aqua-ddd';
|
|
2
|
+
import type { IAmbassadorDao, ICampaignService, IProductService } from '../../../../shared';
|
|
3
|
+
import { ProductCollectionBuilder, ProductCollectionRepository } from '../../../../domain';
|
|
4
|
+
export type AddAllProductCollectionUseCaseInput = {
|
|
5
|
+
shopifyCollectionId: string;
|
|
6
|
+
collectionIds: string[];
|
|
7
|
+
ambassadorId: string;
|
|
8
|
+
};
|
|
9
|
+
export type AddAllProductCollectionUseCaseOutput = {
|
|
10
|
+
ids: string[];
|
|
11
|
+
};
|
|
12
|
+
export type IAddAllProductCollectionUseCase = IUseCase<AddAllProductCollectionUseCaseInput, AddAllProductCollectionUseCaseOutput, UseCaseContext>;
|
|
13
|
+
export declare class ProductCollectionAddAllUseCase<I extends AddAllProductCollectionUseCaseInput = AddAllProductCollectionUseCaseInput, O extends AddAllProductCollectionUseCaseOutput = AddAllProductCollectionUseCaseOutput, C extends UseCaseContext = UseCaseContext> extends UseCase<I, O, C> implements IAddAllProductCollectionUseCase {
|
|
14
|
+
protected readonly productCollectionBuilder: ProductCollectionBuilder;
|
|
15
|
+
protected readonly productCollectionRepository: ProductCollectionRepository;
|
|
16
|
+
protected readonly ambassadorDao: IAmbassadorDao;
|
|
17
|
+
protected readonly campaignService: ICampaignService;
|
|
18
|
+
protected readonly productService: IProductService;
|
|
19
|
+
private readonly logger;
|
|
20
|
+
constructor(productCollectionBuilder: ProductCollectionBuilder, productCollectionRepository: ProductCollectionRepository, ambassadorDao: IAmbassadorDao, campaignService: ICampaignService, productService: IProductService);
|
|
21
|
+
processing: (input: AddAllProductCollectionUseCaseInput) => Promise<{
|
|
22
|
+
ids: string[];
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.ProductCollectionAddAllUseCase = void 0;
|
|
16
|
+
const aqua_ddd_1 = require("@cbidigital/aqua-ddd");
|
|
17
|
+
const common_1 = require("@heronjs/common");
|
|
18
|
+
const shared_1 = require("../../../../shared");
|
|
19
|
+
const domain_1 = require("../../../../domain");
|
|
20
|
+
const zod_1 = require("zod");
|
|
21
|
+
const AddAllProductCollectionUseCaseInputSchema = zod_1.z.object({
|
|
22
|
+
shopifyCollectionId: zod_1.z.string(),
|
|
23
|
+
collectionIds: zod_1.z.array(zod_1.z.string().uuid()),
|
|
24
|
+
ambassadorId: zod_1.z.string().uuid(),
|
|
25
|
+
});
|
|
26
|
+
let ProductCollectionAddAllUseCase = class ProductCollectionAddAllUseCase extends aqua_ddd_1.UseCase {
|
|
27
|
+
constructor(productCollectionBuilder, productCollectionRepository, ambassadorDao, campaignService, productService) {
|
|
28
|
+
super();
|
|
29
|
+
this.productCollectionBuilder = productCollectionBuilder;
|
|
30
|
+
this.productCollectionRepository = productCollectionRepository;
|
|
31
|
+
this.ambassadorDao = ambassadorDao;
|
|
32
|
+
this.campaignService = campaignService;
|
|
33
|
+
this.productService = productService;
|
|
34
|
+
this.processing = async (input) => {
|
|
35
|
+
try {
|
|
36
|
+
const model = AddAllProductCollectionUseCaseInputSchema.parse(input);
|
|
37
|
+
const { ambassadorId, shopifyCollectionId, collectionIds } = model;
|
|
38
|
+
const ambassador = await this.ambassadorDao.findOne({
|
|
39
|
+
filter: {
|
|
40
|
+
id: { $eq: ambassadorId },
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
if (!ambassador) {
|
|
44
|
+
throw new common_1.RuntimeError('ADD_ALL_COLLECTION_PRODUCTS', shared_1.ERROR_CODES.NOT_FOUND, 'Ambassador not found');
|
|
45
|
+
}
|
|
46
|
+
const { items } = await this.productService.getProducts({
|
|
47
|
+
filter: {
|
|
48
|
+
collectionId: { $in: [shopifyCollectionId] },
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
const entities = [];
|
|
52
|
+
for (const product of items) {
|
|
53
|
+
for (const collectionId of collectionIds) {
|
|
54
|
+
const entity = await this.productCollectionBuilder.build();
|
|
55
|
+
await entity.create({
|
|
56
|
+
collectionId,
|
|
57
|
+
productId: product.id,
|
|
58
|
+
ambassadorId,
|
|
59
|
+
});
|
|
60
|
+
entities.push(entity);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
await this.productCollectionRepository.createList(entities, {
|
|
64
|
+
tenantId: this.context.tenantId,
|
|
65
|
+
});
|
|
66
|
+
return { ids: entities.map((entity) => entity.id) };
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
this.logger.error('Error creating product collections:', error);
|
|
70
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
71
|
+
throw new common_1.RuntimeError('ADD_ALL_COLLECTION_PRODUCTS', shared_1.ERROR_CODES.BAD_REQUEST, 'Invalid input format', error);
|
|
72
|
+
}
|
|
73
|
+
throw new common_1.RuntimeError('ADD_ALL_COLLECTION_PRODUCTS', shared_1.ERROR_CODES.BAD_REQUEST, error);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
this.logger = new common_1.Logger(this.constructor.name);
|
|
77
|
+
this.setMethods(this.processing);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
ProductCollectionAddAllUseCase = __decorate([
|
|
81
|
+
(0, common_1.Provider)({
|
|
82
|
+
token: shared_1.COLLECTION_INJECT_TOKENS.USECASE.PRODUCT_COLLECTION_ADD_ALL,
|
|
83
|
+
scope: common_1.Lifecycle.Transient,
|
|
84
|
+
}),
|
|
85
|
+
__param(0, (0, common_1.Inject)(shared_1.COLLECTION_INJECT_TOKENS.BUILDER.PRODUCT_COLLECTION)),
|
|
86
|
+
__param(1, (0, common_1.Inject)(shared_1.COLLECTION_INJECT_TOKENS.REPOSITORY.PRODUCT_COLLECTION)),
|
|
87
|
+
__param(2, (0, common_1.Inject)(shared_1.COLLECTION_INJECT_TOKENS.DAO.AMBASSADOR)),
|
|
88
|
+
__param(3, (0, common_1.Inject)(shared_1.COMPONENT_INJECT_TOKENS.SERVICE.CAMPAIGN_SERVICE)),
|
|
89
|
+
__param(4, (0, common_1.Inject)(shared_1.COMPONENT_INJECT_TOKENS.SERVICE.PRODUCT_SERVICE)),
|
|
90
|
+
__metadata("design:paramtypes", [domain_1.ProductCollectionBuilder,
|
|
91
|
+
domain_1.ProductCollectionRepository, Object, Object, Object])
|
|
92
|
+
], ProductCollectionAddAllUseCase);
|
|
93
|
+
exports.ProductCollectionAddAllUseCase = ProductCollectionAddAllUseCase;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { IUseCase, UseCase, UseCaseContext } from '@cbidigital/aqua-ddd';
|
|
2
|
+
import type { IAmbassadorDao, ICampaignService, IProductService } from '../../../../shared';
|
|
3
|
+
import { ProductCollectionBuilder, ProductCollectionRepository } from '../../../../domain';
|
|
4
|
+
export type CreateProductCollectionUseCaseInput = {
|
|
5
|
+
productIds: string[];
|
|
6
|
+
collectionIds: string[];
|
|
7
|
+
ambassadorId: string;
|
|
8
|
+
};
|
|
9
|
+
export type CreateProductCollectionUseCaseOutput = {
|
|
10
|
+
ids: string[];
|
|
11
|
+
};
|
|
12
|
+
export type ICreateProductCollectionUseCase = IUseCase<CreateProductCollectionUseCaseInput, CreateProductCollectionUseCaseOutput, UseCaseContext>;
|
|
13
|
+
export declare class ProductCollectionCreateUseCase<I extends CreateProductCollectionUseCaseInput = CreateProductCollectionUseCaseInput, O extends CreateProductCollectionUseCaseOutput = CreateProductCollectionUseCaseOutput, C extends UseCaseContext = UseCaseContext> extends UseCase<I, O, C> implements ICreateProductCollectionUseCase {
|
|
14
|
+
protected readonly productCollectionBuilder: ProductCollectionBuilder;
|
|
15
|
+
protected readonly productCollectionRepository: ProductCollectionRepository;
|
|
16
|
+
protected readonly ambassadorDao: IAmbassadorDao;
|
|
17
|
+
protected readonly campaignService: ICampaignService;
|
|
18
|
+
protected readonly productService: IProductService;
|
|
19
|
+
private readonly logger;
|
|
20
|
+
constructor(productCollectionBuilder: ProductCollectionBuilder, productCollectionRepository: ProductCollectionRepository, ambassadorDao: IAmbassadorDao, campaignService: ICampaignService, productService: IProductService);
|
|
21
|
+
processing: (input: CreateProductCollectionUseCaseInput) => Promise<{
|
|
22
|
+
ids: string[];
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.ProductCollectionCreateUseCase = void 0;
|
|
16
|
+
const aqua_ddd_1 = require("@cbidigital/aqua-ddd");
|
|
17
|
+
const common_1 = require("@heronjs/common");
|
|
18
|
+
const shared_1 = require("../../../../shared");
|
|
19
|
+
const domain_1 = require("../../../../domain");
|
|
20
|
+
const zod_1 = require("zod");
|
|
21
|
+
const CreateProductCollectionUseCaseInputSchema = zod_1.z.object({
|
|
22
|
+
productIds: zod_1.z.array(zod_1.z.string().uuid()),
|
|
23
|
+
collectionIds: zod_1.z.array(zod_1.z.string().uuid()),
|
|
24
|
+
ambassadorId: zod_1.z.string().uuid(),
|
|
25
|
+
});
|
|
26
|
+
let ProductCollectionCreateUseCase = class ProductCollectionCreateUseCase extends aqua_ddd_1.UseCase {
|
|
27
|
+
constructor(productCollectionBuilder, productCollectionRepository, ambassadorDao, campaignService, productService) {
|
|
28
|
+
super();
|
|
29
|
+
this.productCollectionBuilder = productCollectionBuilder;
|
|
30
|
+
this.productCollectionRepository = productCollectionRepository;
|
|
31
|
+
this.ambassadorDao = ambassadorDao;
|
|
32
|
+
this.campaignService = campaignService;
|
|
33
|
+
this.productService = productService;
|
|
34
|
+
this.processing = async (input) => {
|
|
35
|
+
try {
|
|
36
|
+
if (!input) {
|
|
37
|
+
throw new common_1.RuntimeError('CREATE_COLLECTION_PRODUCTS', shared_1.ERROR_CODES.BAD_REQUEST, 'Invalid payload');
|
|
38
|
+
}
|
|
39
|
+
const model = CreateProductCollectionUseCaseInputSchema.parse(input);
|
|
40
|
+
const { ambassadorId, productIds, collectionIds } = model;
|
|
41
|
+
const ambassador = await this.ambassadorDao.findOne({
|
|
42
|
+
filter: {
|
|
43
|
+
id: { $eq: ambassadorId },
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
if (!ambassador) {
|
|
47
|
+
throw new common_1.RuntimeError('CREATE_COLLECTION_PRODUCTS', shared_1.ERROR_CODES.NOT_FOUND, 'Ambassador not found');
|
|
48
|
+
}
|
|
49
|
+
const entities = [];
|
|
50
|
+
for (const productId of productIds) {
|
|
51
|
+
for (const collectionId of collectionIds) {
|
|
52
|
+
const entity = await this.productCollectionBuilder.build();
|
|
53
|
+
await entity.create({
|
|
54
|
+
collectionId,
|
|
55
|
+
productId,
|
|
56
|
+
ambassadorId,
|
|
57
|
+
});
|
|
58
|
+
entities.push(entity);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
await this.productCollectionRepository.createList(entities, {
|
|
62
|
+
tenantId: this.context.tenantId,
|
|
63
|
+
});
|
|
64
|
+
return { ids: entities.map((entity) => entity.id) };
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
this.logger.error('Error creating product collections:', error);
|
|
68
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
69
|
+
throw new common_1.RuntimeError('CREATE_COLLECTION_PRODUCTS', shared_1.ERROR_CODES.BAD_REQUEST, 'Invalid input format', error);
|
|
70
|
+
}
|
|
71
|
+
if (error?.code === '23505') {
|
|
72
|
+
throw new common_1.RuntimeError('CREATE_COLLECTION_PRODUCTS', shared_1.ERROR_CODES.CODE_ALREADY_EXIST, `Products already existed in collection`);
|
|
73
|
+
}
|
|
74
|
+
throw new common_1.RuntimeError('CREATE_COLLECTION_PRODUCTS', shared_1.ERROR_CODES.BAD_REQUEST, error);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
this.logger = new common_1.Logger(this.constructor.name);
|
|
78
|
+
this.setMethods(this.processing);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
ProductCollectionCreateUseCase = __decorate([
|
|
82
|
+
(0, common_1.Provider)({
|
|
83
|
+
token: shared_1.COLLECTION_INJECT_TOKENS.USECASE.PRODUCT_COLLECTION_CREATE,
|
|
84
|
+
scope: common_1.Lifecycle.Transient,
|
|
85
|
+
}),
|
|
86
|
+
__param(0, (0, common_1.Inject)(shared_1.COLLECTION_INJECT_TOKENS.BUILDER.PRODUCT_COLLECTION)),
|
|
87
|
+
__param(1, (0, common_1.Inject)(shared_1.COLLECTION_INJECT_TOKENS.REPOSITORY.PRODUCT_COLLECTION)),
|
|
88
|
+
__param(2, (0, common_1.Inject)(shared_1.COLLECTION_INJECT_TOKENS.DAO.AMBASSADOR)),
|
|
89
|
+
__param(3, (0, common_1.Inject)(shared_1.COMPONENT_INJECT_TOKENS.SERVICE.CAMPAIGN_SERVICE)),
|
|
90
|
+
__param(4, (0, common_1.Inject)(shared_1.COMPONENT_INJECT_TOKENS.SERVICE.PRODUCT_SERVICE)),
|
|
91
|
+
__metadata("design:paramtypes", [domain_1.ProductCollectionBuilder,
|
|
92
|
+
domain_1.ProductCollectionRepository, Object, Object, Object])
|
|
93
|
+
], ProductCollectionCreateUseCase);
|
|
94
|
+
exports.ProductCollectionCreateUseCase = ProductCollectionCreateUseCase;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IUseCase, UseCase, UseCaseContext } from '@cbidigital/aqua-ddd';
|
|
2
|
+
import { ProductCollectionRepository } from '../../../../domain';
|
|
3
|
+
export type DeleteProductCollectionUseCaseInput = {
|
|
4
|
+
ids: string[];
|
|
5
|
+
ambassadorId: string;
|
|
6
|
+
};
|
|
7
|
+
type DeleteProductCollectionUseCaseOutput = void;
|
|
8
|
+
export type IDeleteProductCollectionUseCase = IUseCase<DeleteProductCollectionUseCaseInput, DeleteProductCollectionUseCaseOutput, UseCaseContext>;
|
|
9
|
+
export declare class ProductCollectionDeleteUsecase extends UseCase<DeleteProductCollectionUseCaseInput, DeleteProductCollectionUseCaseOutput, UseCaseContext> implements IDeleteProductCollectionUseCase {
|
|
10
|
+
protected readonly productCollectionRepo: ProductCollectionRepository;
|
|
11
|
+
constructor(productCollectionRepo: ProductCollectionRepository);
|
|
12
|
+
processing: (input: DeleteProductCollectionUseCaseInput) => Promise<DeleteProductCollectionUseCaseOutput>;
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.ProductCollectionDeleteUsecase = void 0;
|
|
16
|
+
const aqua_ddd_1 = require("@cbidigital/aqua-ddd");
|
|
17
|
+
const common_1 = require("@heronjs/common");
|
|
18
|
+
const zod_1 = require("zod");
|
|
19
|
+
const domain_1 = require("../../../../domain");
|
|
20
|
+
const shared_1 = require("../../../../shared");
|
|
21
|
+
const DeleteProductCollectionUseCaseInputSchema = zod_1.z.object({
|
|
22
|
+
ids: zod_1.z.array(zod_1.z.string()),
|
|
23
|
+
ambassadorId: zod_1.z.string().uuid(),
|
|
24
|
+
});
|
|
25
|
+
let ProductCollectionDeleteUsecase = class ProductCollectionDeleteUsecase extends aqua_ddd_1.UseCase {
|
|
26
|
+
constructor(productCollectionRepo) {
|
|
27
|
+
super();
|
|
28
|
+
this.productCollectionRepo = productCollectionRepo;
|
|
29
|
+
this.processing = async (input) => {
|
|
30
|
+
try {
|
|
31
|
+
const model = DeleteProductCollectionUseCaseInputSchema.parse(input);
|
|
32
|
+
const entities = await this.productCollectionRepo.find({
|
|
33
|
+
filter: {
|
|
34
|
+
id: { $in: model.ids },
|
|
35
|
+
ambassadorId: { $eq: model.ambassadorId },
|
|
36
|
+
},
|
|
37
|
+
}, {
|
|
38
|
+
tenantId: this.context.tenantId,
|
|
39
|
+
});
|
|
40
|
+
await this.productCollectionRepo.deleteList(entities, {
|
|
41
|
+
tenantId: this.context.tenantId,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
throw new common_1.RuntimeError('DELETE_PRODUCT_COLLECTION', shared_1.ERROR_CODES.BAD_REQUEST, 'Cannot delete products collections', error);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
this.setMethods(this.processing);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
ProductCollectionDeleteUsecase = __decorate([
|
|
52
|
+
(0, common_1.Provider)({ token: shared_1.COLLECTION_INJECT_TOKENS.USECASE.PRODUCT_COLLECTION_DELETE, scope: common_1.Lifecycle.Transient }),
|
|
53
|
+
__param(0, (0, common_1.Inject)(shared_1.COLLECTION_INJECT_TOKENS.REPOSITORY.PRODUCT_COLLECTION)),
|
|
54
|
+
__metadata("design:paramtypes", [domain_1.ProductCollectionRepository])
|
|
55
|
+
], ProductCollectionDeleteUsecase);
|
|
56
|
+
exports.ProductCollectionDeleteUsecase = ProductCollectionDeleteUsecase;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./create-product-collection.usecase"), exports);
|
|
18
|
+
__exportStar(require("./delete-product-collection.usecase"), exports);
|
|
19
|
+
__exportStar(require("./add-all-products-collection.usecase"), exports);
|