import { Context, DAL, FilterableProductOptionValueProps, FindConfig, IEventBusModuleService, InferEntityType, InternalModuleDeclaration, ModuleJoinerConfig, ModulesSdkTypes, ProductTypes } from "@medusajs/framework/types"; import { Product, ProductCategory, ProductCollection, ProductImage, ProductOption, ProductOptionValue, ProductTag, ProductType, ProductVariant, ProductVariantProductImage } from "../models"; import { ProductCategoryService } from "."; import { Modules } from "@medusajs/framework/utils"; import { ProductRepository } from "../repositories"; import { UpdateCollectionInput, UpdateProductInput, UpdateProductOptionInput, UpdateProductVariantInput, VariantImageInputArray } from "../types"; type InjectedDependencies = { baseRepository: DAL.RepositoryService; productRepository: ProductRepository; productService: ModulesSdkTypes.IMedusaInternalService; productVariantService: ModulesSdkTypes.IMedusaInternalService; productTagService: ModulesSdkTypes.IMedusaInternalService; productCategoryService: ProductCategoryService; productCollectionService: ModulesSdkTypes.IMedusaInternalService; productImageService: ModulesSdkTypes.IMedusaInternalService; productImageProductService: ModulesSdkTypes.IMedusaInternalService; productTypeService: ModulesSdkTypes.IMedusaInternalService; productOptionService: ModulesSdkTypes.IMedusaInternalService; productOptionValueService: ModulesSdkTypes.IMedusaInternalService; productVariantProductImageService: ModulesSdkTypes.IMedusaInternalService; [Modules.EVENT_BUS]?: IEventBusModuleService; }; declare const ProductModuleService_base: import("@medusajs/framework/utils").MedusaServiceReturnType<{ Product: { dto: ProductTypes.ProductDTO; }; ProductCategory: { dto: ProductTypes.ProductCategoryDTO; }; ProductCollection: { dto: ProductTypes.ProductCollectionDTO; }; ProductOption: { dto: ProductTypes.ProductOptionDTO; }; ProductOptionValue: { dto: ProductTypes.ProductOptionValueDTO; }; ProductTag: { dto: ProductTypes.ProductTagDTO; }; ProductType: { dto: ProductTypes.ProductTypeDTO; }; ProductVariant: { dto: ProductTypes.ProductVariantDTO; }; ProductImage: { dto: ProductTypes.ProductImageDTO; }; }>; export default class ProductModuleService extends ProductModuleService_base implements ProductTypes.IProductModuleService { protected readonly moduleDeclaration: InternalModuleDeclaration; protected baseRepository_: DAL.RepositoryService; protected readonly productRepository_: ProductRepository; protected readonly productService_: ModulesSdkTypes.IMedusaInternalService>; protected readonly productVariantService_: ModulesSdkTypes.IMedusaInternalService>; protected readonly productCategoryService_: ProductCategoryService; protected readonly productTagService_: ModulesSdkTypes.IMedusaInternalService>; protected readonly productCollectionService_: ModulesSdkTypes.IMedusaInternalService>; protected readonly productImageService_: ModulesSdkTypes.IMedusaInternalService>; protected readonly productTypeService_: ModulesSdkTypes.IMedusaInternalService>; protected readonly productOptionService_: ModulesSdkTypes.IMedusaInternalService>; protected readonly productOptionValueService_: ModulesSdkTypes.IMedusaInternalService>; protected readonly productVariantProductImageService_: ModulesSdkTypes.IMedusaInternalService>; protected readonly eventBusModuleService_?: IEventBusModuleService; constructor({ baseRepository, productRepository, productService, productVariantService, productTagService, productCategoryService, productCollectionService, productImageService, productTypeService, productOptionService, productOptionValueService, productVariantProductImageService, [Modules.EVENT_BUS]: eventBusModuleService, }: InjectedDependencies, moduleDeclaration: InternalModuleDeclaration); __joinerConfig(): ModuleJoinerConfig; retrieveProduct(productId: string, config?: FindConfig, sharedContext?: Context): Promise; listProducts(filters?: ProductTypes.FilterableProductProps, config?: FindConfig, sharedContext?: Context): Promise; listAndCountProducts(filters?: ProductTypes.FilterableProductProps, config?: FindConfig, sharedContext?: Context): Promise<[ProductTypes.ProductDTO[], number]>; protected getProductFindConfig_(config?: FindConfig): FindConfig; createProductVariants(data: ProductTypes.CreateProductVariantDTO[], sharedContext?: Context): Promise; createProductVariants(data: ProductTypes.CreateProductVariantDTO, sharedContext?: Context): Promise; protected createVariants_(data: ProductTypes.CreateProductVariantDTO[], sharedContext?: Context): Promise[]>; upsertProductVariants(data: ProductTypes.UpsertProductVariantDTO[], sharedContext?: Context): Promise; upsertProductVariants(data: ProductTypes.UpsertProductVariantDTO, sharedContext?: Context): Promise; updateProductVariants(id: string, data: ProductTypes.UpdateProductVariantDTO, sharedContext?: Context): Promise; updateProductVariants(selector: ProductTypes.FilterableProductVariantProps, data: ProductTypes.UpdateProductVariantDTO, sharedContext?: Context): Promise; protected updateVariants_(data: UpdateProductVariantInput[], sharedContext?: Context): Promise[]>; createProductTags(data: ProductTypes.CreateProductTagDTO[], sharedContext?: Context): Promise; createProductTags(data: ProductTypes.CreateProductTagDTO, sharedContext?: Context): Promise; upsertProductTags(data: ProductTypes.UpsertProductTagDTO[], sharedContext?: Context): Promise; upsertProductTags(data: ProductTypes.UpsertProductTagDTO, sharedContext?: Context): Promise; protected upsertProductTags_(data: ProductTypes.UpsertProductTagDTO[] | ProductTypes.UpsertProductTagDTO, sharedContext?: Context): Promise[]>; updateProductTags(id: string, data: ProductTypes.UpdateProductTagDTO, sharedContext?: Context): Promise; updateProductTags(selector: ProductTypes.FilterableProductTagProps, data: ProductTypes.UpdateProductTagDTO, sharedContext?: Context): Promise; createProductTypes(data: ProductTypes.CreateProductTypeDTO[], sharedContext?: Context): Promise; createProductTypes(data: ProductTypes.CreateProductTypeDTO, sharedContext?: Context): Promise; upsertProductTypes(data: ProductTypes.UpsertProductTypeDTO[], sharedContext?: Context): Promise; upsertProductTypes(data: ProductTypes.UpsertProductTypeDTO, sharedContext?: Context): Promise; protected upsertProductTypes_(data: ProductTypes.UpsertProductTypeDTO | ProductTypes.UpsertProductTypeDTO[], sharedContext?: Context): Promise[]>; updateProductTypes(id: string, data: ProductTypes.UpdateProductTypeDTO, sharedContext?: Context): Promise; updateProductTypes(selector: ProductTypes.FilterableProductTypeProps, data: ProductTypes.UpdateProductTypeDTO, sharedContext?: Context): Promise; createProductOptions(data: ProductTypes.CreateProductOptionDTO[], sharedContext?: Context): Promise; createProductOptions(data: ProductTypes.CreateProductOptionDTO, sharedContext?: Context): Promise; protected createOptions_(data: ProductTypes.CreateProductOptionDTO[], sharedContext?: Context): Promise[]>; upsertProductOptions(data: ProductTypes.UpsertProductOptionDTO[], sharedContext?: Context): Promise; upsertProductOptions(data: ProductTypes.UpsertProductOptionDTO, sharedContext?: Context): Promise; updateProductOptions(id: string, data: ProductTypes.UpdateProductOptionDTO, sharedContext?: Context): Promise; updateProductOptions(selector: ProductTypes.FilterableProductOptionProps, data: ProductTypes.UpdateProductOptionDTO, sharedContext?: Context): Promise; protected updateOptions_(data: UpdateProductOptionInput[], sharedContext?: Context): Promise[]>; createProductCollections(data: ProductTypes.CreateProductCollectionDTO[], sharedContext?: Context): Promise; createProductCollections(data: ProductTypes.CreateProductCollectionDTO, sharedContext?: Context): Promise; createCollections_(data: ProductTypes.CreateProductCollectionDTO[], sharedContext?: Context): Promise[]>; upsertProductCollections(data: ProductTypes.UpsertProductCollectionDTO[], sharedContext?: Context): Promise; upsertProductCollections(data: ProductTypes.UpsertProductCollectionDTO, sharedContext?: Context): Promise; protected upsertCollections_(data: ProductTypes.UpsertProductCollectionDTO[] | ProductTypes.UpsertProductCollectionDTO, sharedContext?: Context): Promise[]>; updateProductCollections(id: string, data: ProductTypes.UpdateProductCollectionDTO, sharedContext?: Context): Promise; updateProductCollections(selector: ProductTypes.FilterableProductCollectionProps, data: ProductTypes.UpdateProductCollectionDTO, sharedContext?: Context): Promise; protected updateCollections_(data: UpdateCollectionInput[], sharedContext?: Context): Promise[]>; createProductCategories(data: ProductTypes.CreateProductCategoryDTO[], sharedContext?: Context): Promise; createProductCategories(data: ProductTypes.CreateProductCategoryDTO, sharedContext?: Context): Promise; upsertProductCategories(data: ProductTypes.UpsertProductCategoryDTO[], sharedContext?: Context): Promise; upsertProductCategories(data: ProductTypes.UpsertProductCategoryDTO, sharedContext?: Context): Promise; protected upsertProductCategories_(data: ProductTypes.UpsertProductCategoryDTO[] | ProductTypes.UpsertProductCategoryDTO, sharedContext?: Context): Promise[]>; updateProductCategories(id: string, data: ProductTypes.UpdateProductCategoryDTO, sharedContext?: Context): Promise; updateProductCategories(selector: ProductTypes.FilterableProductTypeProps, data: ProductTypes.UpdateProductCategoryDTO, sharedContext?: Context): Promise; protected updateProductCategories_(idOrSelector: string | ProductTypes.FilterableProductTypeProps, data: ProductTypes.UpdateProductCategoryDTO, sharedContext?: Context): Promise[]>; createProducts(data: ProductTypes.CreateProductDTO[], sharedContext?: Context): Promise; createProducts(data: ProductTypes.CreateProductDTO, sharedContext?: Context): Promise; upsertProducts(data: ProductTypes.UpsertProductDTO[], sharedContext?: Context): Promise; upsertProducts(data: ProductTypes.UpsertProductDTO, sharedContext?: Context): Promise; updateProducts(id: string, data: ProductTypes.UpdateProductDTO, sharedContext?: Context): Promise; updateProducts(selector: ProductTypes.FilterableProductProps, data: ProductTypes.UpdateProductDTO, sharedContext?: Context): Promise; protected createProducts_(data: ProductTypes.CreateProductDTO[], sharedContext?: Context): Promise[]>; protected updateProducts_(data: UpdateProductInput[], sharedContext?: Context): Promise[]>; updateProductOptionValues(idOrSelector: string, data: ProductTypes.UpdateProductOptionValueDTO, sharedContext?: Context): Promise; updateProductOptionValues(selector: FilterableProductOptionValueProps, data: ProductTypes.UpdateProductOptionValueDTO, sharedContext?: Context): Promise; protected updateProductOptionValues_(normalizedInput: ({ id: string; } & ProductTypes.UpdateProductOptionValueDTO)[], sharedContext?: Context): Promise[]>; /** * Validates the manually provided handle value of the product * to be URL-safe */ protected validateProductPayload(productData: UpdateProductInput | ProductTypes.CreateProductDTO): void; protected validateProductCreatePayload(productData: ProductTypes.CreateProductDTO): void; protected validateProductUpdatePayload(productData: UpdateProductInput): void; protected normalizeCreateProductInput(products: T, sharedContext?: Context): Promise; /** * Normalizes the input for the update product input * @param products - The products to normalize * @param originalProducts - The original products to use for the normalization (must include options and option values relations) * @returns The normalized products */ protected normalizeUpdateProductInput(products: T, originalProducts?: InferEntityType[]): Promise; protected static normalizeCreateProductCollectionInput(collection: ProductTypes.CreateProductCollectionDTO): ProductTypes.CreateProductCollectionDTO; protected static normalizeUpdateProductCollectionInput(collection: ProductTypes.CreateProductCollectionDTO | UpdateCollectionInput): ProductTypes.CreateProductCollectionDTO | UpdateCollectionInput; protected static validateVariantOptions(variants: ProductTypes.CreateProductVariantDTO[] | ProductTypes.UpdateProductVariantDTO[], options: InferEntityType[]): void; protected static assignOptionsToVariants(variants: ProductTypes.CreateProductVariantDTO[] | ProductTypes.UpdateProductVariantDTO[], options: InferEntityType[]): ProductTypes.CreateProductVariantDTO[] | ProductTypes.UpdateProductVariantDTO[]; /** * Validate that `data` doesn't create or update a variant to have same options combination * as an existing variant on the product. * @param data - create / update payloads * @param variants - existing variants * @protected */ protected static checkIfVariantWithOptionsAlreadyExists(data: ((ProductTypes.CreateProductVariantDTO | UpdateProductVariantInput) & { options: { id: string; }[]; product_id: string; })[], variants: InferEntityType[]): void; /** * Validate that array of variants that we are upserting doesn't have variants with the same options. * @param variants - * @protected */ protected static checkIfVariantsHaveUniqueOptionsCombinations(variants: (ProductTypes.UpdateProductVariantDTO & { options: { id: string; }[]; })[]): void; listProductVariants(filters?: ProductTypes.FilterableProductVariantProps, config?: FindConfig, sharedContext?: Context): Promise; listAndCountProductVariants(filters?: ProductTypes.FilterableProductVariantProps, config?: FindConfig, sharedContext?: Context): Promise<[ProductTypes.ProductVariantDTO[], number]>; retrieveProductVariant(id: string, config?: FindConfig, sharedContext?: Context): Promise; addImageToVariant(data: VariantImageInputArray, sharedContext?: Context): Promise<{ id: string; }[]>; protected addImageToVariant_(data: VariantImageInputArray, sharedContext?: Context): Promise<{ id: string; } | { id: string; }[]>; removeImageFromVariant(data: VariantImageInputArray, sharedContext?: Context): Promise; protected removeImageFromVariant_(data: VariantImageInputArray, sharedContext?: Context): Promise; private getVariantImages; private buildVariantImagesFromProduct; } export {}; //# sourceMappingURL=product-module-service.d.ts.map