chore(product): remove decorator where it is not necessary and cleanup (#4731)

* chore(product): remove decorator where it is not necessary and cleanup

* Create twenty-gorillas-exist.md
This commit is contained in:
Adrien de Peretti authored and GitHub committed 2023-08-10 09:57:32 +02:00
1 parent ac866ebb51
commit f8d3d5f91a
17 files changed
+116 -219

No files matched your search

+5
View File
@@ -0,0 +1,5 @@
---
"@medusajs/product": patch
---
chore(product): remove decorator where it is not necessary and cleanup
@@ -1,8 +1,7 @@
import { import {
EmitData,
EventBusTypes, EventBusTypes,
IEventBusModuleService,
Subscriber, Subscriber,
IEventBusModuleService
} from "@medusajs/types" } from "@medusajs/types"
export class EventBusService implements IEventBusModuleService { export class EventBusService implements IEventBusModuleService {
@@ -11,7 +10,9 @@ export class EventBusService implements IEventBusModuleService {
data: T, data: T,
options: Record<string, unknown> options: Record<string, unknown>
): Promise<void> ): Promise<void>
async emit<T>(data: EventBusTypes.EmitData<T>[]): Promise<void> async emit<T>(data: EventBusTypes.EmitData<T>[]): Promise<void>
async emit<T, TInput extends string | EventBusTypes.EmitData<T>[] = string>( async emit<T, TInput extends string | EventBusTypes.EmitData<T>[] = string>(
eventOrData: TInput, eventOrData: TInput,
data?: T, data?: T,
@@ -30,7 +31,5 @@ export class EventBusService implements IEventBusModuleService {
return this return this
} }
withTransaction() { withTransaction() {}
}
} }
@@ -7,7 +7,7 @@ export const productCategoriesData = [
{ {
id: "category-1", id: "category-1",
name: "category 1", name: "category 1",
parent_category_id: "category-0" parent_category_id: "category-0",
}, },
{ {
id: "category-1-a", id: "category-1-a",
@@ -23,7 +23,7 @@ export const productCategoriesData = [
{ {
id: "category-1-b-1", id: "category-1-b-1",
name: "category 1 b 1", name: "category 1 b 1",
parent_category_id: "category-1-b" parent_category_id: "category-1-b",
}, },
] ]
@@ -65,4 +65,3 @@ export const productCategoriesRankData = [
rank: 2, rank: 2,
}, },
] ]
@@ -2,16 +2,16 @@ export const categoriesData = [
{ {
id: "category-0", id: "category-0",
name: "category 0", name: "category 0",
parent_category_id: null parent_category_id: null,
}, },
{ {
id: "category-1", id: "category-1",
name: "category 1", name: "category 1",
parent_category_id: "category-0" parent_category_id: "category-0",
}, },
{ {
id: "category-1-a", id: "category-1-a",
name: "category 1 a", name: "category 1 a",
parent_category_id: "category-1" parent_category_id: "category-1",
}, },
] ]
@@ -8,6 +8,7 @@ import {
ProductType, ProductType,
ProductVariant, ProductVariant,
} from "@models" } from "@models"
import ProductOption from "../../../src/models/product-option" import ProductOption from "../../../src/models/product-option"
export * from "./data/create-product" export * from "./data/create-product"
@@ -7,13 +7,7 @@ import { ProductCategory } from "@models"
import { Context, DAL, ProductCategoryTransformOptions } from "@medusajs/types" import { Context, DAL, ProductCategoryTransformOptions } from "@medusajs/types"
import groupBy from "lodash/groupBy" import groupBy from "lodash/groupBy"
import { SqlEntityManager } from "@mikro-orm/postgresql" import { SqlEntityManager } from "@mikro-orm/postgresql"
import { import { DALUtils, isDefined, MedusaError } from "@medusajs/utils"
DALUtils,
InjectTransactionManager,
isDefined,
MedusaContext,
MedusaError,
} from "@medusajs/utils"
import { ProductCategoryServiceTypes } from "../types" import { ProductCategoryServiceTypes } from "../types"
@@ -30,11 +24,14 @@ export type ReorderConditions = {
} }
export const tempReorderRank = 99999 export const tempReorderRank = 99999
// eslint-disable-next-line max-len
export class ProductCategoryRepository extends DALUtils.MikroOrmBaseTreeRepository { export class ProductCategoryRepository extends DALUtils.MikroOrmBaseTreeRepository {
protected readonly manager_: SqlEntityManager protected readonly manager_: SqlEntityManager
constructor({ manager }: { manager: SqlEntityManager }) { constructor({ manager }: { manager: SqlEntityManager }) {
// @ts-ignore // @ts-ignore
// eslint-disable-next-line prefer-rest-params
super(...arguments) super(...arguments)
this.manager_ = manager this.manager_ = manager
} }
@@ -118,7 +115,7 @@ export class ProductCategoryRepository extends DALUtils.MikroOrmBaseTreeReposito
return category return category
} }
let children = descendantsByParentId[productCategory.id] || [] const children = descendantsByParentId[productCategory.id] || []
productCategory = addChildrenToCategory(productCategory, children) productCategory = addChildrenToCategory(productCategory, children)
} }
@@ -168,12 +165,7 @@ export class ProductCategoryRepository extends DALUtils.MikroOrmBaseTreeReposito
] ]
} }
@InjectTransactionManager() async delete(id: string, context: Context = {}): Promise<void> {
async delete(
id: string,
@MedusaContext()
context: Context = {}
): Promise<void> {
const manager = this.getActiveManager<SqlEntityManager>(context) const manager = this.getActiveManager<SqlEntityManager>(context)
const productCategory = await manager.findOneOrFail( const productCategory = await manager.findOneOrFail(
ProductCategory, ProductCategory,
@@ -207,13 +199,12 @@ export class ProductCategoryRepository extends DALUtils.MikroOrmBaseTreeReposito
) )
} }
@InjectTransactionManager()
async create( async create(
data: ProductCategoryServiceTypes.CreateProductCategoryDTO, data: ProductCategoryServiceTypes.CreateProductCategoryDTO,
@MedusaContext() sharedContext: Context = {} context: Context = {}
): Promise<ProductCategory> { ): Promise<ProductCategory> {
const categoryData = { ...data } const categoryData = { ...data }
const manager = this.getActiveManager<SqlEntityManager>(sharedContext) const manager = this.getActiveManager<SqlEntityManager>(context)
const siblings = await manager.find(ProductCategory, { const siblings = await manager.find(ProductCategory, {
parent_category_id: categoryData?.parent_category_id || null, parent_category_id: categoryData?.parent_category_id || null,
}) })
@@ -224,16 +215,15 @@ export class ProductCategoryRepository extends DALUtils.MikroOrmBaseTreeReposito
const productCategory = manager.create(ProductCategory, categoryData) const productCategory = manager.create(ProductCategory, categoryData)
await manager.persist(productCategory) manager.persist(productCategory)
return productCategory return productCategory
} }
@InjectTransactionManager()
async update( async update(
id: string, id: string,
data: ProductCategoryServiceTypes.UpdateProductCategoryDTO, data: ProductCategoryServiceTypes.UpdateProductCategoryDTO,
@MedusaContext() context: Context = {} context: Context = {}
): Promise<ProductCategory> { ): Promise<ProductCategory> {
const categoryData = { ...data } const categoryData = { ...data }
const manager = this.getActiveManager<SqlEntityManager>(context) const manager = this.getActiveManager<SqlEntityManager>(context)
@@ -267,7 +257,7 @@ export class ProductCategoryRepository extends DALUtils.MikroOrmBaseTreeReposito
protected fetchReorderConditions( protected fetchReorderConditions(
productCategory: ProductCategory, productCategory: ProductCategory,
data: ProductCategoryServiceTypes.UpdateProductCategoryDTO, data: ProductCategoryServiceTypes.UpdateProductCategoryDTO,
shouldDeleteElement: boolean = false shouldDeleteElement = false
): ReorderConditions { ): ReorderConditions {
const originalParentId = productCategory.parent_category_id || null const originalParentId = productCategory.parent_category_id || null
const targetParentId = data.parent_category_id const targetParentId = data.parent_category_id
@@ -405,7 +395,7 @@ export class ProductCategoryRepository extends DALUtils.MikroOrmBaseTreeReposito
} }
if (!isDefined(sibling.rank)) { if (!isDefined(sibling.rank)) {
throw "error" throw new Error("sibling rank is not defined")
} }
const rank = shouldIncrementRank ? ++sibling.rank : --sibling.rank const rank = shouldIncrementRank ? ++sibling.rank : --sibling.rank
@@ -6,18 +6,15 @@ import {
} from "@mikro-orm/core" } from "@mikro-orm/core"
import { Context, DAL, ProductTypes } from "@medusajs/types" import { Context, DAL, ProductTypes } from "@medusajs/types"
import { SqlEntityManager } from "@mikro-orm/postgresql" import { SqlEntityManager } from "@mikro-orm/postgresql"
import { import { DALUtils, MedusaError } from "@medusajs/utils"
DALUtils,
InjectTransactionManager,
MedusaContext,
MedusaError,
} from "@medusajs/utils"
// eslint-disable-next-line max-len
export class ProductCollectionRepository extends DALUtils.MikroOrmBaseRepository { export class ProductCollectionRepository extends DALUtils.MikroOrmBaseRepository {
protected readonly manager_: SqlEntityManager protected readonly manager_: SqlEntityManager
constructor({ manager }: { manager: SqlEntityManager }) { constructor({ manager }: { manager: SqlEntityManager }) {
// @ts-ignore // @ts-ignore
// eslint-disable-next-line prefer-rest-params
super(...arguments) super(...arguments)
this.manager_ = manager this.manager_ = manager
} }
@@ -64,23 +61,17 @@ export class ProductCollectionRepository extends DALUtils.MikroOrmBaseRepository
) )
} }
@InjectTransactionManager() async delete(collectionIds: string[], context: Context = {}): Promise<void> {
async delete( const manager = this.getActiveManager<SqlEntityManager>(context)
collectionIds: string[], await manager.nativeDelete(
@MedusaContext()
{ transactionManager: manager }: Context = {}
): Promise<void> {
await (manager as SqlEntityManager).nativeDelete(
ProductCollection, ProductCollection,
{ id: { $in: collectionIds } }, { id: { $in: collectionIds } },
{} {}
) )
} }
@InjectTransactionManager()
async create( async create(
data: ProductTypes.CreateProductCollectionDTO[], data: ProductTypes.CreateProductCollectionDTO[],
@MedusaContext()
context: Context = {} context: Context = {}
): Promise<ProductCollection[]> { ): Promise<ProductCollection[]> {
const manager = this.getActiveManager<SqlEntityManager>(context) const manager = this.getActiveManager<SqlEntityManager>(context)
@@ -89,15 +80,13 @@ export class ProductCollectionRepository extends DALUtils.MikroOrmBaseRepository
return manager.create(ProductCollection, collectionData) return manager.create(ProductCollection, collectionData)
}) })
await manager.persist(productCollections) manager.persist(productCollections)
return productCollections return productCollections
} }
@InjectTransactionManager()
async update( async update(
data: ProductTypes.UpdateProductCollectionDTO[], data: ProductTypes.UpdateProductCollectionDTO[],
@MedusaContext()
context: Context = {} context: Context = {}
): Promise<ProductCollection[]> { ): Promise<ProductCollection[]> {
const manager = this.getActiveManager<SqlEntityManager>(context) const manager = this.getActiveManager<SqlEntityManager>(context)
@@ -133,7 +122,7 @@ export class ProductCollectionRepository extends DALUtils.MikroOrmBaseRepository
return manager.assign(existingCollection, collectionData) return manager.assign(existingCollection, collectionData)
}) })
await manager.persist(productCollections) manager.persist(productCollections)
return productCollections return productCollections
} }
@@ -6,17 +6,15 @@ import {
import { Context, DAL } from "@medusajs/types" import { Context, DAL } from "@medusajs/types"
import { Image, Product } from "@models" import { Image, Product } from "@models"
import { SqlEntityManager } from "@mikro-orm/postgresql" import { SqlEntityManager } from "@mikro-orm/postgresql"
import { import { DALUtils } from "@medusajs/utils"
DALUtils,
InjectTransactionManager,
MedusaContext,
} from "@medusajs/utils"
// eslint-disable-next-line max-len
export class ProductImageRepository extends DALUtils.MikroOrmAbstractBaseRepository<Image> { export class ProductImageRepository extends DALUtils.MikroOrmAbstractBaseRepository<Image> {
protected readonly manager_: SqlEntityManager protected readonly manager_: SqlEntityManager
constructor({ manager }: { manager: SqlEntityManager }) { constructor({ manager }: { manager: SqlEntityManager }) {
// @ts-ignore // @ts-ignore
// eslint-disable-next-line prefer-rest-params
super(...arguments) super(...arguments)
this.manager_ = manager this.manager_ = manager
} }
@@ -61,13 +59,8 @@ export class ProductImageRepository extends DALUtils.MikroOrmAbstractBaseReposit
) )
} }
@InjectTransactionManager() async upsert(urls: string[], context: Context = {}): Promise<Image[]> {
async upsert( const manager = this.getActiveManager<SqlEntityManager>(context)
urls: string[],
@MedusaContext()
context: Context = {}
): Promise<Image[]> {
const { transactionManager: manager } = context
const existingImages = await this.find( const existingImages = await this.find(
{ {
@@ -98,32 +91,19 @@ export class ProductImageRepository extends DALUtils.MikroOrmAbstractBaseReposit
}) })
if (imageToCreate.length) { if (imageToCreate.length) {
await (manager as SqlEntityManager).persist(imageToCreate) manager.persist(imageToCreate)
upsertedImgs.push(...imageToCreate) upsertedImgs.push(...imageToCreate)
} }
return upsertedImgs return upsertedImgs
} }
@InjectTransactionManager() async delete(ids: string[], context: Context = {}): Promise<void> {
async delete( const manager = this.getActiveManager<SqlEntityManager>(context)
ids: string[], await manager.nativeDelete(Product, { id: { $in: ids } }, {})
@MedusaContext()
{ transactionManager: manager }: Context = {}
): Promise<void> {
await (manager as SqlEntityManager).nativeDelete(
Product,
{ id: { $in: ids } },
{}
)
} }
@InjectTransactionManager() async create(data: unknown[], context: Context = {}): Promise<Image[]> {
async create(
data: unknown[],
@MedusaContext()
{ transactionManager: manager }: Context = {}
): Promise<Image[]> {
throw new Error("Method not implemented.") throw new Error("Method not implemented.")
} }
} }
@@ -6,18 +6,15 @@ import {
import { Product, ProductOption } from "@models" import { Product, ProductOption } from "@models"
import { Context, DAL, ProductTypes } from "@medusajs/types" import { Context, DAL, ProductTypes } from "@medusajs/types"
import { SqlEntityManager } from "@mikro-orm/postgresql" import { SqlEntityManager } from "@mikro-orm/postgresql"
import { import { DALUtils, MedusaError } from "@medusajs/utils"
DALUtils,
InjectTransactionManager,
MedusaContext,
MedusaError,
} from "@medusajs/utils"
// eslint-disable-next-line max-len
export class ProductOptionRepository extends DALUtils.MikroOrmAbstractBaseRepository<ProductOption> { export class ProductOptionRepository extends DALUtils.MikroOrmAbstractBaseRepository<ProductOption> {
protected readonly manager_: SqlEntityManager protected readonly manager_: SqlEntityManager
constructor({ manager }: { manager: SqlEntityManager }) { constructor({ manager }: { manager: SqlEntityManager }) {
// @ts-ignore // @ts-ignore
// eslint-disable-next-line prefer-rest-params
super(...arguments) super(...arguments)
this.manager_ = manager this.manager_ = manager
} }
@@ -62,12 +59,7 @@ export class ProductOptionRepository extends DALUtils.MikroOrmAbstractBaseReposi
) )
} }
@InjectTransactionManager() async delete(ids: string[], context: Context = {}): Promise<void> {
async delete(
ids: string[],
@MedusaContext()
context: Context = {}
): Promise<void> {
const manager = this.getActiveManager<SqlEntityManager>(context) const manager = this.getActiveManager<SqlEntityManager>(context)
await (manager as SqlEntityManager).nativeDelete( await (manager as SqlEntityManager).nativeDelete(
@@ -77,10 +69,8 @@ export class ProductOptionRepository extends DALUtils.MikroOrmAbstractBaseReposi
) )
} }
@InjectTransactionManager()
async create( async create(
data: ProductTypes.CreateProductOptionDTO[], data: ProductTypes.CreateProductOptionDTO[],
@MedusaContext()
context: Context = {} context: Context = {}
): Promise<ProductOption[]> { ): Promise<ProductOption[]> {
const manager = this.getActiveManager<SqlEntityManager>(context) const manager = this.getActiveManager<SqlEntityManager>(context)
@@ -113,15 +103,13 @@ export class ProductOptionRepository extends DALUtils.MikroOrmAbstractBaseReposi
return manager.create(ProductOption, optionData) return manager.create(ProductOption, optionData)
}) })
await manager.persist(productOptions) manager.persist(productOptions)
return productOptions return productOptions
} }
@InjectTransactionManager()
async update( async update(
data: ProductTypes.UpdateProductOptionDTO[], data: ProductTypes.UpdateProductOptionDTO[],
@MedusaContext()
context: Context = {} context: Context = {}
): Promise<ProductOption[]> { ): Promise<ProductOption[]> {
const manager = this.getActiveManager<SqlEntityManager>(context) const manager = this.getActiveManager<SqlEntityManager>(context)
@@ -157,7 +145,7 @@ export class ProductOptionRepository extends DALUtils.MikroOrmAbstractBaseReposi
return manager.assign(existingOption, optionData) return manager.assign(existingOption, optionData)
}) })
await manager.persist(productOptions) manager.persist(productOptions)
return productOptions return productOptions
} }
@@ -13,18 +13,14 @@ import {
UpsertProductTagDTO, UpsertProductTagDTO,
} from "@medusajs/types" } from "@medusajs/types"
import { SqlEntityManager } from "@mikro-orm/postgresql" import { SqlEntityManager } from "@mikro-orm/postgresql"
import { import { DALUtils, MedusaError } from "@medusajs/utils"
DALUtils,
InjectTransactionManager,
MedusaContext,
MedusaError,
} from "@medusajs/utils"
export class ProductTagRepository extends DALUtils.MikroOrmBaseRepository { export class ProductTagRepository extends DALUtils.MikroOrmBaseRepository {
protected readonly manager_: SqlEntityManager protected readonly manager_: SqlEntityManager
constructor({ manager }: { manager: SqlEntityManager }) { constructor({ manager }: { manager: SqlEntityManager }) {
// @ts-ignore // @ts-ignore
// eslint-disable-next-line prefer-rest-params
super(...arguments) super(...arguments)
this.manager_ = manager this.manager_ = manager
} }
@@ -69,10 +65,8 @@ export class ProductTagRepository extends DALUtils.MikroOrmBaseRepository {
) )
} }
@InjectTransactionManager()
async create( async create(
data: CreateProductTagDTO[], data: CreateProductTagDTO[],
@MedusaContext()
context: Context = {} context: Context = {}
): Promise<ProductTag[]> { ): Promise<ProductTag[]> {
const manager = this.getActiveManager<SqlEntityManager>(context) const manager = this.getActiveManager<SqlEntityManager>(context)
@@ -81,15 +75,13 @@ export class ProductTagRepository extends DALUtils.MikroOrmBaseRepository {
return manager.create(ProductTag, tagData) return manager.create(ProductTag, tagData)
}) })
await manager.persist(productTags) manager.persist(productTags)
return productTags return productTags
} }
@InjectTransactionManager()
async update( async update(
data: UpdateProductTagDTO[], data: UpdateProductTagDTO[],
@MedusaContext()
context: Context = {} context: Context = {}
): Promise<ProductTag[]> { ): Promise<ProductTag[]> {
const manager = this.getActiveManager<SqlEntityManager>(context) const manager = this.getActiveManager<SqlEntityManager>(context)
@@ -122,18 +114,16 @@ export class ProductTagRepository extends DALUtils.MikroOrmBaseRepository {
return manager.assign(existingTag, tagData) return manager.assign(existingTag, tagData)
}) })
await manager.persist(productTags) manager.persist(productTags)
return productTags return productTags
} }
@InjectTransactionManager()
async upsert( async upsert(
tags: UpsertProductTagDTO[], tags: UpsertProductTagDTO[],
@MedusaContext()
context: Context = {} context: Context = {}
): Promise<ProductTag[]> { ): Promise<ProductTag[]> {
const { transactionManager: manager } = context const manager = this.getActiveManager<SqlEntityManager>(context)
const tagsValues = tags.map((tag) => tag.value) const tagsValues = tags.map((tag) => tag.value)
const existingTags = await this.find( const existingTags = await this.find(
{ {
@@ -169,19 +159,14 @@ export class ProductTagRepository extends DALUtils.MikroOrmBaseRepository {
newTags.push((manager as SqlEntityManager).create(ProductTag, tag)) newTags.push((manager as SqlEntityManager).create(ProductTag, tag))
}) })
await (manager as SqlEntityManager).persist(newTags) manager.persist(newTags)
upsertedTags.push(...newTags) upsertedTags.push(...newTags)
} }
return upsertedTags return upsertedTags
} }
@InjectTransactionManager() async delete(ids: string[], context: Context = {}): Promise<void> {
async delete(
ids: string[],
@MedusaContext()
context: Context = {}
): Promise<void> {
const manager = this.getActiveManager<SqlEntityManager>(context) const manager = this.getActiveManager<SqlEntityManager>(context)
await manager.nativeDelete(ProductTag, { id: { $in: ids } }, {}) await manager.nativeDelete(ProductTag, { id: { $in: ids } }, {})
@@ -12,18 +12,14 @@ import {
UpdateProductTypeDTO, UpdateProductTypeDTO,
} from "@medusajs/types" } from "@medusajs/types"
import { SqlEntityManager } from "@mikro-orm/postgresql" import { SqlEntityManager } from "@mikro-orm/postgresql"
import { import { DALUtils, MedusaError } from "@medusajs/utils"
DALUtils,
InjectTransactionManager,
MedusaContext,
MedusaError,
} from "@medusajs/utils"
export class ProductTypeRepository extends DALUtils.MikroOrmBaseRepository { export class ProductTypeRepository extends DALUtils.MikroOrmBaseRepository {
protected readonly manager_: SqlEntityManager protected readonly manager_: SqlEntityManager
constructor({ manager }: { manager: SqlEntityManager }) { constructor({ manager }: { manager: SqlEntityManager }) {
// @ts-ignore // @ts-ignore
// eslint-disable-next-line prefer-rest-params
super(...arguments) super(...arguments)
this.manager_ = manager this.manager_ = manager
} }
@@ -68,13 +64,11 @@ export class ProductTypeRepository extends DALUtils.MikroOrmBaseRepository {
) )
} }
@InjectTransactionManager()
async upsert( async upsert(
types: CreateProductTypeDTO[], types: CreateProductTypeDTO[],
@MedusaContext()
context: Context = {} context: Context = {}
): Promise<ProductType[]> { ): Promise<ProductType[]> {
const { transactionManager: manager } = context const manager = this.getActiveManager<SqlEntityManager>(context)
const typesValues = types.map((type) => type.value) const typesValues = types.map((type) => type.value)
const existingTypes = await this.find( const existingTypes = await this.find(
@@ -111,30 +105,20 @@ export class ProductTypeRepository extends DALUtils.MikroOrmBaseRepository {
newTypes.push((manager as SqlEntityManager).create(ProductType, type)) newTypes.push((manager as SqlEntityManager).create(ProductType, type))
}) })
await (manager as SqlEntityManager).persist(newTypes) manager.persist(newTypes)
upsertedTypes.push(...newTypes) upsertedTypes.push(...newTypes)
} }
return upsertedTypes return upsertedTypes
} }
@InjectTransactionManager() async delete(ids: string[], context: Context = {}): Promise<void> {
async delete( const manager = this.getActiveManager<SqlEntityManager>(context)
ids: string[], await manager.nativeDelete(ProductType, { id: { $in: ids } }, {})
@MedusaContext()
{ transactionManager: manager }: Context = {}
): Promise<void> {
await (manager as SqlEntityManager).nativeDelete(
ProductType,
{ id: { $in: ids } },
{}
)
} }
@InjectTransactionManager()
async create( async create(
data: CreateProductTypeDTO[], data: CreateProductTypeDTO[],
@MedusaContext()
context: Context = {} context: Context = {}
): Promise<ProductType[]> { ): Promise<ProductType[]> {
const manager = this.getActiveManager<SqlEntityManager>(context) const manager = this.getActiveManager<SqlEntityManager>(context)
@@ -143,15 +127,13 @@ export class ProductTypeRepository extends DALUtils.MikroOrmBaseRepository {
return manager.create(ProductType, typeData) return manager.create(ProductType, typeData)
}) })
await manager.persist(productTypes) manager.persist(productTypes)
return productTypes return productTypes
} }
@InjectTransactionManager()
async update( async update(
data: UpdateProductTypeDTO[], data: UpdateProductTypeDTO[],
@MedusaContext()
context: Context = {} context: Context = {}
): Promise<ProductType[]> { ): Promise<ProductType[]> {
const manager = this.getActiveManager<SqlEntityManager>(context) const manager = this.getActiveManager<SqlEntityManager>(context)
@@ -184,7 +166,7 @@ export class ProductTypeRepository extends DALUtils.MikroOrmBaseRepository {
return manager.assign(existingType, typeData) return manager.assign(existingType, typeData)
}) })
await manager.persist(productTypes) manager.persist(productTypes)
return productTypes return productTypes
} }
@@ -16,11 +16,13 @@ import {
import { ProductVariantServiceTypes } from "../types/services" import { ProductVariantServiceTypes } from "../types/services"
// eslint-disable-next-line max-len
export class ProductVariantRepository extends DALUtils.MikroOrmAbstractBaseRepository<ProductVariant> { export class ProductVariantRepository extends DALUtils.MikroOrmAbstractBaseRepository<ProductVariant> {
protected readonly manager_: SqlEntityManager protected readonly manager_: SqlEntityManager
constructor({ manager }: { manager: SqlEntityManager }) { constructor({ manager }: { manager: SqlEntityManager }) {
// @ts-ignore // @ts-ignore
// eslint-disable-next-line prefer-rest-params
super(...arguments) super(...arguments)
this.manager_ = manager this.manager_ = manager
} }
@@ -78,17 +80,16 @@ export class ProductVariantRepository extends DALUtils.MikroOrmAbstractBaseRepos
) )
} }
@InjectTransactionManager()
async create( async create(
data: RequiredEntityData<ProductVariant>[], data: RequiredEntityData<ProductVariant>[],
@MedusaContext() context: Context = {}
{ transactionManager: manager }: Context = {}
): Promise<ProductVariant[]> { ): Promise<ProductVariant[]> {
const manager = this.getActiveManager<SqlEntityManager>(context)
const variants = data.map((variant) => { const variants = data.map((variant) => {
return (manager as SqlEntityManager).create(ProductVariant, variant) return (manager as SqlEntityManager).create(ProductVariant, variant)
}) })
await (manager as SqlEntityManager).persist(variants) manager.persist(variants)
return variants return variants
} }
@@ -100,8 +101,7 @@ export class ProductVariantRepository extends DALUtils.MikroOrmAbstractBaseRepos
>[], >[],
context: Context = {} context: Context = {}
): Promise<ProductVariant[]> { ): Promise<ProductVariant[]> {
const manager = (context.transactionManager ?? const manager = this.getActiveManager<SqlEntityManager>(context)
this.manager_) as SqlEntityManager
const productVariantsToUpdate = await manager.find(ProductVariant, { const productVariantsToUpdate = await manager.find(ProductVariant, {
id: data.map((updateData) => updateData.id), id: data.map((updateData) => updateData.id),
@@ -124,7 +124,7 @@ export class ProductVariantRepository extends DALUtils.MikroOrmAbstractBaseRepos
return manager.assign(productVariant, variantData) return manager.assign(productVariant, variantData)
}) })
await manager.persist(variants) manager.persist(variants)
return variants return variants
} }
+19 -33
View File
@@ -19,21 +19,17 @@ import {
WithRequiredProperty, WithRequiredProperty,
} from "@medusajs/types" } from "@medusajs/types"
import { SqlEntityManager } from "@mikro-orm/postgresql" import { SqlEntityManager } from "@mikro-orm/postgresql"
import { import { DALUtils, isDefined, MedusaError } from "@medusajs/utils"
DALUtils,
InjectTransactionManager,
isDefined,
MedusaContext,
MedusaError,
} from "@medusajs/utils"
import { ProductServiceTypes } from "../types/services" import { ProductServiceTypes } from "../types/services"
// eslint-disable-next-line max-len
export class ProductRepository extends DALUtils.MikroOrmAbstractBaseRepository<Product> { export class ProductRepository extends DALUtils.MikroOrmAbstractBaseRepository<Product> {
protected readonly manager_: SqlEntityManager protected readonly manager_: SqlEntityManager
constructor({ manager }: { manager: SqlEntityManager }) { constructor({ manager }: { manager: SqlEntityManager }) {
// @ts-ignore // @ts-ignore
// eslint-disable-next-line prefer-rest-params
super(...arguments) super(...arguments)
this.manager_ = manager this.manager_ = manager
} }
@@ -118,46 +114,36 @@ export class ProductRepository extends DALUtils.MikroOrmAbstractBaseRepository<P
} }
} }
@InjectTransactionManager() async delete(ids: string[], context: Context = {}): Promise<void> {
async delete( const manager = this.getActiveManager<SqlEntityManager>(context)
ids: string[], await manager.nativeDelete(Product, { id: { $in: ids } }, {})
@MedusaContext()
{ transactionManager: manager }: Context = {}
): Promise<void> {
await (manager as SqlEntityManager).nativeDelete(
Product,
{ id: { $in: ids } },
{}
)
} }
@InjectTransactionManager()
async create( async create(
data: WithRequiredProperty<ProductTypes.CreateProductOnlyDTO, "status">[], data: WithRequiredProperty<ProductTypes.CreateProductOnlyDTO, "status">[],
@MedusaContext() context: Context = {}
{ transactionManager: manager }: Context = {}
): Promise<Product[]> { ): Promise<Product[]> {
const manager = this.getActiveManager<SqlEntityManager>(context)
const products = data.map((product) => { const products = data.map((product) => {
return (manager as SqlEntityManager).create(Product, product) return (manager as SqlEntityManager).create(Product, product)
}) })
await (manager as SqlEntityManager).persist(products) manager.persist(products)
return products return products
} }
@InjectTransactionManager()
async update( async update(
data: WithRequiredProperty<ProductServiceTypes.UpdateProductDTO, "id">[], data: WithRequiredProperty<ProductServiceTypes.UpdateProductDTO, "id">[],
@MedusaContext() context: Context = {} context: Context = {}
): Promise<Product[]> { ): Promise<Product[]> {
let categoryIds: string[] = [] let categoryIds: string[] = []
let tagIds: string[] = [] let tagIds: string[] = []
let collectionIds: string[] = [] const collectionIds: string[] = []
let typeIds: string[] = [] const typeIds: string[] = []
// TODO: use the getter method (getActiveManager) // TODO: use the getter method (getActiveManager)
const manager = (context.transactionManager ?? const manager = this.getActiveManager<SqlEntityManager>(context)
this.manager_) as SqlEntityManager
data.forEach((productData) => { data.forEach((productData) => {
categoryIds = categoryIds.concat( categoryIds = categoryIds.concat(
@@ -259,7 +245,7 @@ export class ProductRepository extends DALUtils.MikroOrmAbstractBaseRepository<P
const productCategory = categoriesToAssignMap.get(categoryData.id) const productCategory = categoriesToAssignMap.get(categoryData.id)
if (productCategory) { if (productCategory) {
await product.categories.add(productCategory) product.categories.add(productCategory)
} }
} }
@@ -273,7 +259,7 @@ export class ProductRepository extends DALUtils.MikroOrmAbstractBaseRepository<P
!categoryIdsToAssignSet.has(existingCategory.id) !categoryIdsToAssignSet.has(existingCategory.id)
) )
await product.categories.remove(categoriesToDelete) product.categories.remove(categoriesToDelete)
} }
if (isDefined(tagsData)) { if (isDefined(tagsData)) {
@@ -287,7 +273,7 @@ export class ProductRepository extends DALUtils.MikroOrmAbstractBaseRepository<P
} }
if (productTag) { if (productTag) {
await product.tags.add(productTag) product.tags.add(productTag)
} }
} }
@@ -296,7 +282,7 @@ export class ProductRepository extends DALUtils.MikroOrmAbstractBaseRepository<P
.getItems() .getItems()
.filter((existingTag) => !tagIdsToAssignSet.has(existingTag.id)) .filter((existingTag) => !tagIdsToAssignSet.has(existingTag.id))
await product.tags.remove(tagsToDelete) product.tags.remove(tagsToDelete)
} }
if (isDefined(collectionId)) { if (isDefined(collectionId)) {
@@ -317,7 +303,7 @@ export class ProductRepository extends DALUtils.MikroOrmAbstractBaseRepository<P
}) })
) )
await manager.persist(products) manager.persist(products)
return products return products
} }
+10 -16
View File
@@ -1,10 +1,5 @@
import { ProductOption } from "@models" import { ProductOption } from "@models"
import { import { Context, DAL, FindConfig, ProductTypes } from "@medusajs/types"
Context,
DAL,
FindConfig,
ProductTypes,
} from "@medusajs/types"
import { ProductOptionRepository } from "@repositories" import { ProductOptionRepository } from "@repositories"
import { import {
InjectTransactionManager, InjectTransactionManager,
@@ -36,10 +31,7 @@ export default class ProductOptionService<
config: FindConfig<ProductTypes.ProductOptionDTO> = {}, config: FindConfig<ProductTypes.ProductOptionDTO> = {},
@MedusaContext() sharedContext?: Context @MedusaContext() sharedContext?: Context
): Promise<TEntity> { ): Promise<TEntity> {
return (await retrieveEntity< return (await retrieveEntity<ProductOption, ProductTypes.ProductOptionDTO>({
ProductOption,
ProductTypes.ProductOptionDTO
>({
id: productOptionId, id: productOptionId,
entityName: ProductOption.name, entityName: ProductOption.name,
repository: this.productOptionRepository_, repository: this.productOptionRepository_,
@@ -74,9 +66,12 @@ export default class ProductOptionService<
private buildQueryForList( private buildQueryForList(
filters: ProductTypes.FilterableProductOptionProps = {}, filters: ProductTypes.FilterableProductOptionProps = {},
config: FindConfig<ProductTypes.ProductOptionDTO> = {}, config: FindConfig<ProductTypes.ProductOptionDTO> = {}
) { ) {
const queryOptions = ModulesSdkUtils.buildQuery<ProductOption>(filters, config) const queryOptions = ModulesSdkUtils.buildQuery<ProductOption>(
filters,
config
)
if (filters.title) { if (filters.title) {
queryOptions.where["title"] = { $ilike: filters.title } queryOptions.where["title"] = { $ilike: filters.title }
@@ -102,10 +97,9 @@ export default class ProductOptionService<
data: ProductTypes.UpdateProductOptionDTO[], data: ProductTypes.UpdateProductOptionDTO[],
@MedusaContext() sharedContext: Context = {} @MedusaContext() sharedContext: Context = {}
): Promise<TEntity[]> { ): Promise<TEntity[]> {
return (await (this.productOptionRepository_ as ProductOptionRepository).update( return (await (
data, this.productOptionRepository_ as ProductOptionRepository
sharedContext ).update(data, sharedContext)) as TEntity[]
)) as TEntity[]
} }
@InjectTransactionManager(doNotForceTransaction, "productOptionRepository_") @InjectTransactionManager(doNotForceTransaction, "productOptionRepository_")
+2 -5
View File
@@ -38,10 +38,7 @@ export default class ProductTagService<
config: FindConfig<ProductTypes.ProductTagDTO> = {}, config: FindConfig<ProductTypes.ProductTagDTO> = {},
@MedusaContext() sharedContext: Context = {} @MedusaContext() sharedContext: Context = {}
): Promise<TEntity> { ): Promise<TEntity> {
return (await retrieveEntity< return (await retrieveEntity<ProductTag, ProductTypes.ProductTagDTO>({
ProductTag,
ProductTypes.ProductTagDTO
>({
id: productTagId, id: productTagId,
entityName: ProductTag.name, entityName: ProductTag.name,
repository: this.productTagRepository_, repository: this.productTagRepository_,
@@ -76,7 +73,7 @@ export default class ProductTagService<
private buildQueryForList( private buildQueryForList(
filters: ProductTypes.FilterableProductTagProps = {}, filters: ProductTypes.FilterableProductTagProps = {},
config: FindConfig<ProductTypes.ProductTagDTO> = {}, config: FindConfig<ProductTypes.ProductTagDTO> = {}
) { ) {
const queryOptions = ModulesSdkUtils.buildQuery<ProductTag>(filters, config) const queryOptions = ModulesSdkUtils.buildQuery<ProductTag>(filters, config)
@@ -6,7 +6,7 @@ import {
UpdateProductTypeDTO, UpdateProductTypeDTO,
DAL, DAL,
FindConfig, FindConfig,
ProductTypes ProductTypes,
} from "@medusajs/types" } from "@medusajs/types"
import { ProductTypeRepository } from "@repositories" import { ProductTypeRepository } from "@repositories"
import { import {
@@ -38,10 +38,7 @@ export default class ProductTypeService<
config: FindConfig<ProductTypes.ProductTypeDTO> = {}, config: FindConfig<ProductTypes.ProductTypeDTO> = {},
@MedusaContext() sharedContext: Context = {} @MedusaContext() sharedContext: Context = {}
): Promise<TEntity> { ): Promise<TEntity> {
return (await retrieveEntity< return (await retrieveEntity<ProductType, ProductTypes.ProductTypeDTO>({
ProductType,
ProductTypes.ProductTypeDTO
>({
id: productTypeId, id: productTypeId,
entityName: ProductType.name, entityName: ProductType.name,
repository: this.productTypeRepository_, repository: this.productTypeRepository_,
@@ -76,9 +73,12 @@ export default class ProductTypeService<
private buildQueryForList( private buildQueryForList(
filters: ProductTypes.FilterableProductTypeProps = {}, filters: ProductTypes.FilterableProductTypeProps = {},
config: FindConfig<ProductTypes.ProductTypeDTO> = {}, config: FindConfig<ProductTypes.ProductTypeDTO> = {}
) { ) {
const queryOptions = ModulesSdkUtils.buildQuery<ProductType>(filters, config) const queryOptions = ModulesSdkUtils.buildQuery<ProductType>(
filters,
config
)
if (filters.value) { if (filters.value) {
queryOptions.where["value"] = { $ilike: filters.value } queryOptions.where["value"] = { $ilike: filters.value }
@@ -138,9 +138,11 @@ export default class ProductVariantService<
const variantsData = [...data] const variantsData = [...data]
variantsData.forEach((variant) => Object.assign(variant, { product })) variantsData.forEach((variant) => Object.assign(variant, { product }))
return await (this.productVariantRepository_ as ProductVariantRepository).update(variantsData, { return (await (
this.productVariantRepository_ as ProductVariantRepository
).update(variantsData, {
transactionManager: sharedContext.transactionManager, transactionManager: sharedContext.transactionManager,
}) as TEntity[] })) as TEntity[]
} }
@InjectTransactionManager(doNotForceTransaction, "productVariantRepository_") @InjectTransactionManager(doNotForceTransaction, "productVariantRepository_")