chore(medusa): Add transaction on mutation actions (2) (#1855)
**What** Wrap all actions that require the usage of an atomic phase into a transaction from the handler **Info** The following end points have been removed since that they rely on non existing stuff and can't be used and are not used admin - create-order admin - delete order metadata admin - set region metadata admin - remove region metadata Fixes CORE-358
This commit is contained in:
@@ -8,7 +8,6 @@ import {
|
||||
AdminPostRegionsRegionCountriesReq,
|
||||
AdminPostRegionsRegionFulfillmentProvidersReq,
|
||||
AdminPostRegionsRegionPaymentProvidersReq,
|
||||
AdminPostRegionsRegionMetadata,
|
||||
AdminGetRegionsRegionFulfillmentOptionsRes,
|
||||
} from "@medusajs/medusa"
|
||||
import qs from "qs"
|
||||
@@ -94,38 +93,6 @@ class AdminRegionsResource extends BaseResource {
|
||||
return this.client.request("GET", path, undefined, {}, customHeaders)
|
||||
}
|
||||
|
||||
/**
|
||||
* @description adds metadata to a region
|
||||
* @param id region id
|
||||
* @param payload metadata
|
||||
* @param customHeaders
|
||||
* @returns updated region
|
||||
*/
|
||||
setMetadata(
|
||||
id: string,
|
||||
payload: AdminPostRegionsRegionMetadata,
|
||||
customHeaders: Record<string, any> = {}
|
||||
): ResponsePromise<AdminRegionsRes> {
|
||||
const path = `/admin/regions/${id}/metadata`
|
||||
return this.client.request("POST", path, payload, {}, customHeaders)
|
||||
}
|
||||
|
||||
/**
|
||||
* @description delete a region's metadata key value pair
|
||||
* @param id region id
|
||||
* @param key metadata key
|
||||
* @param customHeaders
|
||||
* @returns updated region
|
||||
*/
|
||||
deleteMetadata(
|
||||
id: string,
|
||||
key: string,
|
||||
customHeaders: Record<string, any> = {}
|
||||
): ResponsePromise<AdminRegionsRes> {
|
||||
const path = `/admin/regions/${id}/metadata/${key}`
|
||||
return this.client.request("DELETE", path, undefined, {}, customHeaders)
|
||||
}
|
||||
|
||||
/**
|
||||
* @description adds a country to the list of countries in a region
|
||||
* @param id region id
|
||||
|
||||
@@ -4,7 +4,6 @@ import {
|
||||
AdminRegionsRes,
|
||||
AdminPostRegionsRegionReq,
|
||||
AdminPostRegionsReq,
|
||||
AdminPostRegionsRegionMetadata,
|
||||
AdminPostRegionsRegionCountriesReq,
|
||||
AdminPostRegionsRegionFulfillmentProvidersReq,
|
||||
AdminPostRegionsRegionPaymentProvidersReq,
|
||||
@@ -69,37 +68,6 @@ export const useAdminDeleteRegion = (
|
||||
)
|
||||
}
|
||||
|
||||
export const useAdminSetRegionMetadata = (
|
||||
id: string,
|
||||
options?: UseMutationOptions<
|
||||
Response<AdminRegionsRes>,
|
||||
Error,
|
||||
AdminPostRegionsRegionMetadata
|
||||
>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
return useMutation(
|
||||
(metadata: AdminPostRegionsRegionMetadata) =>
|
||||
client.admin.regions.setMetadata(id, metadata),
|
||||
buildOptions(queryClient, adminRegionKeys.detail(id), options)
|
||||
)
|
||||
}
|
||||
|
||||
export const useAdminDeleteRegionMetadata = (
|
||||
id: string,
|
||||
options?: UseMutationOptions<Response<AdminRegionsRes>, Error, string>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
return useMutation(
|
||||
(key: string) => client.admin.regions.deleteMetadata(id, key),
|
||||
buildOptions(queryClient, adminRegionKeys.detail(id), options)
|
||||
)
|
||||
}
|
||||
|
||||
export const useAdminRegionAddCountry = (
|
||||
id: string,
|
||||
options?: UseMutationOptions<
|
||||
|
||||
@@ -2,8 +2,6 @@ import {
|
||||
useAdminCreateRegion,
|
||||
useAdminUpdateRegion,
|
||||
useAdminDeleteRegion,
|
||||
useAdminSetRegionMetadata,
|
||||
useAdminDeleteRegionMetadata,
|
||||
useAdminRegionAddFulfillmentProvider,
|
||||
useAdminRegionDeleteFulfillmentProvider,
|
||||
useAdminRegionAddPaymentProvider,
|
||||
@@ -89,50 +87,6 @@ describe("useAdminDeleteRegion hook", () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe("useAdminSetRegionMetadata hook", () => {
|
||||
test("updates a region's metadata", async () => {
|
||||
const metadata = {
|
||||
key: "some_key",
|
||||
value: "some_value",
|
||||
}
|
||||
const id = fixtures.get("region").id
|
||||
|
||||
const { result, waitFor } = renderHook(
|
||||
() => useAdminSetRegionMetadata(id),
|
||||
{
|
||||
wrapper: createWrapper(),
|
||||
}
|
||||
)
|
||||
|
||||
result.current.mutate(metadata)
|
||||
|
||||
await waitFor(() => result.current.isSuccess)
|
||||
|
||||
expect(result.current.data.response.status).toEqual(200)
|
||||
expect(result.current.data.region).toEqual(fixtures.get("region"))
|
||||
})
|
||||
})
|
||||
|
||||
describe("useAdminDeleteRegionMetadata hook", () => {
|
||||
test("deletes a region's metadata", async () => {
|
||||
const id = fixtures.get("region").id
|
||||
|
||||
const { result, waitFor } = renderHook(
|
||||
() => useAdminDeleteRegionMetadata(id),
|
||||
{
|
||||
wrapper: createWrapper(),
|
||||
}
|
||||
)
|
||||
|
||||
result.current.mutate("some_key")
|
||||
|
||||
await waitFor(() => result.current.isSuccess)
|
||||
|
||||
expect(result.current.data.response.status).toEqual(200)
|
||||
expect(result.current.data.region).toEqual(fixtures.get("region"))
|
||||
})
|
||||
})
|
||||
|
||||
describe("useAdminRegionAddFulfillmentProvider hook", () => {
|
||||
test("adds a fulfillment provider to a region", async () => {
|
||||
const payload = {
|
||||
|
||||
@@ -5,6 +5,7 @@ import { PriceList } from "../../../.."
|
||||
import PriceListService from "../../../../services/price-list"
|
||||
import { AdminPriceListPricesUpdateReq } from "../../../../types/price-list"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /price-lists/{id}/prices/batch
|
||||
@@ -77,7 +78,12 @@ export default async (req, res) => {
|
||||
const priceListService: PriceListService =
|
||||
req.scope.resolve("priceListService")
|
||||
|
||||
await priceListService.addPrices(id, validated.prices, validated.override)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await priceListService
|
||||
.withTransaction(transactionManager)
|
||||
.addPrices(id, validated.prices, validated.override)
|
||||
})
|
||||
|
||||
const priceList = await priceListService.retrieve(id, {
|
||||
select: defaultAdminPriceListFields as (keyof PriceList)[],
|
||||
|
||||
@@ -14,6 +14,7 @@ import {
|
||||
PriceListType,
|
||||
} from "../../../../types/price-list"
|
||||
import { Request } from "express"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /price_lists
|
||||
@@ -90,9 +91,12 @@ export default async (req: Request, res) => {
|
||||
const priceListService: PriceListService =
|
||||
req.scope.resolve("priceListService")
|
||||
|
||||
const priceList = await priceListService.create(
|
||||
req.validatedBody as CreatePriceListInput
|
||||
)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
const priceList = await manager.transaction(async (transactionManager) => {
|
||||
return await priceListService
|
||||
.withTransaction(transactionManager)
|
||||
.create(req.validatedBody as CreatePriceListInput)
|
||||
})
|
||||
|
||||
res.json({ price_list: priceList })
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import PriceListService from "../../../../services/price-list"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /price-lists/{id}
|
||||
@@ -31,7 +32,10 @@ export default async (req, res) => {
|
||||
|
||||
const priceListService: PriceListService =
|
||||
req.scope.resolve("priceListService")
|
||||
await priceListService.delete(id)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await priceListService.withTransaction(transactionManager).delete(id)
|
||||
})
|
||||
|
||||
res.json({
|
||||
id,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { ArrayNotEmpty, IsString } from "class-validator"
|
||||
import PriceListService from "../../../../services/price-list"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /price-lists/{id}/prices/batch
|
||||
@@ -51,7 +52,12 @@ export default async (req, res) => {
|
||||
const priceListService: PriceListService =
|
||||
req.scope.resolve("priceListService")
|
||||
|
||||
await priceListService.deletePrices(id, validated.price_ids)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await priceListService
|
||||
.withTransaction(transactionManager)
|
||||
.deletePrices(id, validated.price_ids)
|
||||
})
|
||||
|
||||
res.json({ ids: validated.price_ids, object: "money-amount", deleted: true })
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import PriceListService from "../../../../services/price-list"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /price-lists/{id}/products/{product_id}/prices
|
||||
@@ -36,9 +37,14 @@ export default async (req, res) => {
|
||||
const priceListService: PriceListService =
|
||||
req.scope.resolve("priceListService")
|
||||
|
||||
const [deletedPriceIds] = await priceListService.deleteProductPrices(id, [
|
||||
product_id,
|
||||
])
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
const [deletedPriceIds] = await manager.transaction(
|
||||
async (transactionManager) => {
|
||||
return await priceListService
|
||||
.withTransaction(transactionManager)
|
||||
.deleteProductPrices(id, [product_id])
|
||||
}
|
||||
)
|
||||
|
||||
return res.json({
|
||||
ids: deletedPriceIds,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import PriceListService from "../../../../services/price-list"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /price-lists/{id}/variants/{variant_id}/prices
|
||||
@@ -36,9 +37,14 @@ export default async (req, res) => {
|
||||
const priceListService: PriceListService =
|
||||
req.scope.resolve("priceListService")
|
||||
|
||||
const [deletedPriceIds] = await priceListService.deleteVariantPrices(id, [
|
||||
variant_id,
|
||||
])
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
const [deletedPriceIds] = await manager.transaction(
|
||||
async (transactionManager) => {
|
||||
return await priceListService
|
||||
.withTransaction(transactionManager)
|
||||
.deleteVariantPrices(id, [variant_id])
|
||||
}
|
||||
)
|
||||
|
||||
return res.json({
|
||||
ids: deletedPriceIds,
|
||||
|
||||
@@ -15,6 +15,7 @@ import {
|
||||
PriceListType,
|
||||
} from "../../../../types/price-list"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /price_lists/{id}
|
||||
@@ -103,7 +104,12 @@ export default async (req, res) => {
|
||||
const priceListService: PriceListService =
|
||||
req.scope.resolve("priceListService")
|
||||
|
||||
await priceListService.update(id, validated)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await priceListService
|
||||
.withTransaction(transactionManager)
|
||||
.update(id, validated)
|
||||
})
|
||||
|
||||
const priceList = await priceListService.retrieve(id, {
|
||||
select: defaultAdminPriceListFields as (keyof PriceList)[],
|
||||
|
||||
@@ -2,6 +2,7 @@ import { IsString } from "class-validator"
|
||||
import { defaultAdminProductFields, defaultAdminProductRelations } from "."
|
||||
import { ProductService, PricingService } from "../../../../services"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /products/{id}/options
|
||||
@@ -44,7 +45,13 @@ export default async (req, res) => {
|
||||
const productService: ProductService = req.scope.resolve("productService")
|
||||
const pricingService: PricingService = req.scope.resolve("pricingService")
|
||||
|
||||
await productService.addOption(id, validated.title)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await productService
|
||||
.withTransaction(transactionManager)
|
||||
.addOption(id, validated.title)
|
||||
})
|
||||
|
||||
const rawProduct = await productService.retrieve(id, {
|
||||
select: defaultAdminProductFields,
|
||||
relations: defaultAdminProductRelations,
|
||||
|
||||
@@ -24,8 +24,11 @@ import {
|
||||
ProductTagReq,
|
||||
ProductTypeReq,
|
||||
} from "../../../../types/product"
|
||||
import { ProductVariantPricesCreateReq } from "../../../../types/product-variant"
|
||||
import { FeatureFlagDecorators } from "../../../../utils/feature-flag-decorators"
|
||||
import {
|
||||
CreateProductVariantInput,
|
||||
ProductVariantPricesCreateReq,
|
||||
} from "../../../../types/product-variant"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
|
||||
/**
|
||||
@@ -237,8 +240,7 @@ export default async (req, res) => {
|
||||
|
||||
const entityManager: EntityManager = req.scope.resolve("manager")
|
||||
|
||||
let newProduct
|
||||
await entityManager.transaction(async (manager) => {
|
||||
const newProduct = await entityManager.transaction(async (manager) => {
|
||||
const { variants } = validated
|
||||
delete validated.variants
|
||||
|
||||
@@ -249,12 +251,16 @@ export default async (req, res) => {
|
||||
let shippingProfile
|
||||
// Get default shipping profile
|
||||
if (validated.is_giftcard) {
|
||||
shippingProfile = await shippingProfileService.retrieveGiftCardDefault()
|
||||
shippingProfile = await shippingProfileService
|
||||
.withTransaction(manager)
|
||||
.retrieveGiftCardDefault()
|
||||
} else {
|
||||
shippingProfile = await shippingProfileService.retrieveDefault()
|
||||
shippingProfile = await shippingProfileService
|
||||
.withTransaction(manager)
|
||||
.retrieveDefault()
|
||||
}
|
||||
|
||||
newProduct = await productService
|
||||
const newProduct = await productService
|
||||
.withTransaction(manager)
|
||||
.create({ ...validated, profile_id: shippingProfile.id })
|
||||
|
||||
@@ -265,7 +271,7 @@ export default async (req, res) => {
|
||||
|
||||
const optionIds =
|
||||
validated?.options?.map(
|
||||
(o) => newProduct.options.find((newO) => newO.title === o.title).id
|
||||
(o) => newProduct.options.find((newO) => newO.title === o.title)?.id
|
||||
) || []
|
||||
|
||||
await Promise.all(
|
||||
@@ -281,10 +287,12 @@ export default async (req, res) => {
|
||||
|
||||
await productVariantService
|
||||
.withTransaction(manager)
|
||||
.create(newProduct.id, variant)
|
||||
.create(newProduct.id, variant as CreateProductVariantInput)
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
return newProduct
|
||||
})
|
||||
|
||||
const rawProduct = await productService.retrieve(newProduct.id, {
|
||||
|
||||
@@ -12,6 +12,7 @@ import { defaultAdminProductFields, defaultAdminProductRelations } from "."
|
||||
import { ProductService, ProductVariantService } from "../../../../services"
|
||||
import { ProductVariantPricesCreateReq } from "../../../../types/product-variant"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /products/{id}/variants
|
||||
@@ -135,7 +136,12 @@ export default async (req, res) => {
|
||||
)
|
||||
const productService: ProductService = req.scope.resolve("productService")
|
||||
|
||||
await productVariantService.create(id, validated)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await productVariantService
|
||||
.withTransaction(transactionManager)
|
||||
.create(id, validated)
|
||||
})
|
||||
|
||||
const product = await productService.retrieve(id, {
|
||||
select: defaultAdminProductFields,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { defaultAdminProductFields, defaultAdminProductRelations } from "."
|
||||
import { ProductService } from "../../../../services"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /products/{id}/options/{option_id}
|
||||
@@ -35,7 +36,12 @@ export default async (req, res) => {
|
||||
|
||||
const productService: ProductService = req.scope.resolve("productService")
|
||||
|
||||
await productService.deleteOption(id, option_id)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await productService
|
||||
.withTransaction(transactionManager)
|
||||
.deleteOption(id, option_id)
|
||||
})
|
||||
|
||||
const data = await productService.retrieve(id, {
|
||||
select: defaultAdminProductFields,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { ProductService } from "../../../../services"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /products/{id}
|
||||
@@ -30,7 +31,11 @@ export default async (req, res) => {
|
||||
const { id } = req.params
|
||||
|
||||
const productService: ProductService = req.scope.resolve("productService")
|
||||
await productService.delete(id)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await productService.withTransaction(transactionManager).delete(id)
|
||||
})
|
||||
|
||||
res.json({
|
||||
id,
|
||||
object: "product",
|
||||
|
||||
@@ -4,6 +4,7 @@ import {
|
||||
PricingService,
|
||||
ProductVariantService,
|
||||
} from "../../../../services"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /products/{id}/variants/{variant_id}
|
||||
@@ -41,12 +42,18 @@ export default async (req, res) => {
|
||||
const productService: ProductService = req.scope.resolve("productService")
|
||||
const pricingService: PricingService = req.scope.resolve("pricingService")
|
||||
|
||||
await productVariantService.delete(variant_id)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
await productVariantService
|
||||
.withTransaction(transactionManager)
|
||||
.delete(variant_id)
|
||||
})
|
||||
|
||||
const data = await productService.retrieve(id, {
|
||||
select: defaultAdminProductFields,
|
||||
relations: defaultAdminProductRelations,
|
||||
})
|
||||
|
||||
const [product] = await pricingService.setProductPrices([data])
|
||||
|
||||
res.json({
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { IsString } from "class-validator"
|
||||
import { defaultAdminProductFields, defaultAdminProductRelations } from "."
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /products/{id}/metadata
|
||||
@@ -45,8 +46,11 @@ export default async (req, res) => {
|
||||
)
|
||||
|
||||
const productService = req.scope.resolve("productService")
|
||||
await productService.update(id, {
|
||||
metadata: { [validated.key]: validated.value },
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await productService.withTransaction(transactionManager).update(id, {
|
||||
metadata: { [validated.key]: validated.value },
|
||||
})
|
||||
})
|
||||
|
||||
const product = await productService.retrieve(id, {
|
||||
|
||||
@@ -2,6 +2,7 @@ import { IsString } from "class-validator"
|
||||
import { defaultAdminProductFields, defaultAdminProductRelations } from "."
|
||||
import { ProductService } from "../../../../services"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /products/{id}/options/{option_id}
|
||||
@@ -44,7 +45,12 @@ export default async (req, res) => {
|
||||
|
||||
const productService: ProductService = req.scope.resolve("productService")
|
||||
|
||||
await productService.updateOption(id, option_id, validated)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await productService
|
||||
.withTransaction(transactionManager)
|
||||
.updateOption(id, option_id, validated)
|
||||
})
|
||||
|
||||
const product = await productService.retrieve(id, {
|
||||
select: defaultAdminProductFields,
|
||||
|
||||
@@ -24,6 +24,7 @@ import {
|
||||
import { ProductVariantPricesUpdateReq } from "../../../../types/product-variant"
|
||||
import { FeatureFlagDecorators } from "../../../../utils/feature-flag-decorators"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /products/{id}
|
||||
@@ -224,12 +225,18 @@ export default async (req, res) => {
|
||||
const productService: ProductService = req.scope.resolve("productService")
|
||||
const pricingService: PricingService = req.scope.resolve("pricingService")
|
||||
|
||||
await productService.update(id, validated)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
await productService
|
||||
.withTransaction(transactionManager)
|
||||
.update(id, validated)
|
||||
})
|
||||
|
||||
const rawProduct = await productService.retrieve(id, {
|
||||
select: defaultAdminProductFields,
|
||||
relations: defaultAdminProductRelations,
|
||||
})
|
||||
|
||||
const [product] = await pricingService.setProductPrices([rawProduct])
|
||||
|
||||
res.json({ product })
|
||||
|
||||
@@ -17,6 +17,7 @@ import {
|
||||
import { PriceSelectionParams } from "../../../../types/price-selection"
|
||||
import { ProductVariantPricesUpdateReq } from "../../../../types/product-variant"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /products/{id}/variants/{variant_id}
|
||||
@@ -143,9 +144,14 @@ export default async (req, res) => {
|
||||
"productVariantService"
|
||||
)
|
||||
|
||||
await productVariantService.update(variant_id, {
|
||||
product_id: id,
|
||||
...validated,
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
await productVariantService
|
||||
.withTransaction(transactionManager)
|
||||
.update(variant_id, {
|
||||
product_id: id,
|
||||
...validated,
|
||||
})
|
||||
})
|
||||
|
||||
const rawProduct = await productService.retrieve(id, {
|
||||
|
||||
@@ -3,6 +3,7 @@ import { defaultAdminRegionRelations, defaultAdminRegionFields } from "."
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { Region } from "../../../.."
|
||||
import RegionService from "../../../../services/region"
|
||||
import { EntityManager } from "typeorm"
|
||||
/**
|
||||
* @oas [post] /regions/{id}/countries
|
||||
* operationId: "PostRegionsRegionCountries"
|
||||
@@ -41,7 +42,12 @@ export default async (req, res) => {
|
||||
)
|
||||
|
||||
const regionService: RegionService = req.scope.resolve("regionService")
|
||||
await regionService.addCountry(region_id, validated.country_code)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await regionService
|
||||
.withTransaction(transactionManager)
|
||||
.addCountry(region_id, validated.country_code)
|
||||
})
|
||||
|
||||
const region: Region = await regionService.retrieve(region_id, {
|
||||
select: defaultAdminRegionFields,
|
||||
|
||||
@@ -3,6 +3,7 @@ import { defaultAdminRegionRelations, defaultAdminRegionFields } from "."
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { Region } from "../../../.."
|
||||
import RegionService from "../../../../services/region"
|
||||
import { EntityManager } from "typeorm"
|
||||
/**
|
||||
* @oas [post] /regions/{id}/fulfillment-providers
|
||||
* operationId: "PostRegionsRegionFulfillmentProviders"
|
||||
@@ -41,7 +42,12 @@ export default async (req, res) => {
|
||||
)
|
||||
|
||||
const regionService: RegionService = req.scope.resolve("regionService")
|
||||
await regionService.addFulfillmentProvider(region_id, validated.provider_id)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await regionService
|
||||
.withTransaction(transactionManager)
|
||||
.addFulfillmentProvider(region_id, validated.provider_id)
|
||||
})
|
||||
|
||||
const region: Region = await regionService.retrieve(region_id, {
|
||||
select: defaultAdminRegionFields,
|
||||
|
||||
@@ -3,6 +3,7 @@ import { defaultAdminRegionRelations, defaultAdminRegionFields } from "."
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { Region } from "../../../.."
|
||||
import RegionService from "../../../../services/region"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /regions/{id}/payment-providers
|
||||
@@ -42,7 +43,12 @@ export default async (req, res) => {
|
||||
)
|
||||
|
||||
const regionService: RegionService = req.scope.resolve("regionService")
|
||||
await regionService.addPaymentProvider(region_id, validated.provider_id)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await regionService
|
||||
.withTransaction(transactionManager)
|
||||
.addPaymentProvider(region_id, validated.provider_id)
|
||||
})
|
||||
|
||||
const region: Region = await regionService.retrieve(region_id, {
|
||||
select: defaultAdminRegionFields,
|
||||
|
||||
@@ -3,6 +3,7 @@ import { defaultAdminRegionRelations, defaultAdminRegionFields } from "."
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { Region } from "../../../.."
|
||||
import RegionService from "../../../../services/region"
|
||||
import { EntityManager } from "typeorm"
|
||||
/**
|
||||
* @oas [post] /regions
|
||||
* operationId: "PostRegions"
|
||||
@@ -61,7 +62,14 @@ export default async (req, res) => {
|
||||
const validated = await validator(AdminPostRegionsReq, req.body)
|
||||
|
||||
const regionService: RegionService = req.scope.resolve("regionService")
|
||||
const result: Region = await regionService.create(validated)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
const result: Region = await manager.transaction(
|
||||
async (transactionManager) => {
|
||||
return await regionService
|
||||
.withTransaction(transactionManager)
|
||||
.create(validated)
|
||||
}
|
||||
)
|
||||
|
||||
const region: Region = await regionService.retrieve(result.id, {
|
||||
select: defaultAdminRegionFields,
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
import { defaultAdminRegionRelations, defaultAdminRegionFields } from "."
|
||||
import { Region } from "../../../.."
|
||||
import RegionService from "../../../../services/region"
|
||||
|
||||
/**
|
||||
* @oas [delete] /regions/{id}/metadata/{key}
|
||||
* operationId: "DeleteRegionsRegionMetadataKey"
|
||||
* summary: "Delete Metadata"
|
||||
* description: "Deletes a metadata key."
|
||||
* x-authenticated: true
|
||||
* parameters:
|
||||
* - (path) id=* {string} The id of the Region.
|
||||
* - (path) key=* {string} The metadata key.
|
||||
* tags:
|
||||
* - Region
|
||||
* responses:
|
||||
* 200:
|
||||
* description: OK
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* properties:
|
||||
* region:
|
||||
* $ref: "#/components/schemas/region"
|
||||
*/
|
||||
export default async (req, res) => {
|
||||
const { id, key } = req.params
|
||||
|
||||
const regionService: RegionService = req.scope.resolve("regionService")
|
||||
await regionService.deleteMetadata(id, key)
|
||||
|
||||
const region: Region = await regionService.retrieve(id, {
|
||||
select: defaultAdminRegionFields,
|
||||
relations: defaultAdminRegionRelations,
|
||||
})
|
||||
|
||||
res.status(200).json({ region })
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
import RegionService from "../../../../services/region"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /regions/{id}
|
||||
@@ -31,7 +32,12 @@ export default async (req, res) => {
|
||||
|
||||
const regionService: RegionService = req.scope.resolve("regionService")
|
||||
|
||||
await regionService.delete(region_id)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await regionService
|
||||
.withTransaction(transactionManager)
|
||||
.delete(region_id)
|
||||
})
|
||||
|
||||
res.status(200).json({
|
||||
id: region_id,
|
||||
|
||||
@@ -55,22 +55,6 @@ export default (app) => {
|
||||
middlewares.wrap(require("./remove-fulfillment-provider").default)
|
||||
)
|
||||
|
||||
/**
|
||||
* Set metadata key / value pair.
|
||||
*/
|
||||
route.post(
|
||||
"/:id/metadata",
|
||||
middlewares.wrap(require("./set-metadata").default)
|
||||
)
|
||||
|
||||
/**
|
||||
* Delete metadata key / value pair.
|
||||
*/
|
||||
route.delete(
|
||||
"/:id/metadata/:key",
|
||||
middlewares.wrap(require("./delete-metadata").default)
|
||||
)
|
||||
|
||||
return app
|
||||
}
|
||||
|
||||
@@ -120,4 +104,3 @@ export * from "./create-region"
|
||||
export * from "./add-country"
|
||||
export * from "./add-payment-provider"
|
||||
export * from "./add-fulfillment-provider"
|
||||
export * from "./set-metadata"
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import RegionService from "../../../../services/region"
|
||||
import { defaultAdminRegionRelations, defaultAdminRegionFields } from "."
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /regions/{id}/countries/{country_code}
|
||||
@@ -26,7 +27,12 @@ export default async (req, res) => {
|
||||
const { region_id, country_code } = req.params
|
||||
|
||||
const regionService: RegionService = req.scope.resolve("regionService")
|
||||
await regionService.removeCountry(region_id, country_code)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await regionService
|
||||
.withTransaction(transactionManager)
|
||||
.removeCountry(region_id, country_code)
|
||||
})
|
||||
|
||||
const region = await regionService.retrieve(region_id, {
|
||||
select: defaultAdminRegionFields,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import RegionService from "../../../../services/region"
|
||||
import { defaultAdminRegionRelations, defaultAdminRegionFields } from "."
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /regions/{id}/fulfillment-providers/{provider_id}
|
||||
@@ -26,7 +27,12 @@ export default async (req, res) => {
|
||||
const { region_id, provider_id } = req.params
|
||||
const regionService: RegionService = req.scope.resolve("regionService")
|
||||
|
||||
await regionService.removeFulfillmentProvider(region_id, provider_id)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await regionService
|
||||
.withTransaction(transactionManager)
|
||||
.removeFulfillmentProvider(region_id, provider_id)
|
||||
})
|
||||
|
||||
const region = await regionService.retrieve(region_id, {
|
||||
select: defaultAdminRegionFields,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import RegionService from "../../../../services/region"
|
||||
import { defaultAdminRegionRelations, defaultAdminRegionFields } from "."
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /regions/{id}/payment-providers/{provider_id}
|
||||
@@ -26,7 +27,12 @@ export default async (req, res) => {
|
||||
const { region_id, provider_id } = req.params
|
||||
|
||||
const regionService: RegionService = req.scope.resolve("regionService")
|
||||
await regionService.removePaymentProvider(region_id, provider_id)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await regionService
|
||||
.withTransaction(transactionManager)
|
||||
.removePaymentProvider(region_id, provider_id)
|
||||
})
|
||||
|
||||
const region = await regionService.retrieve(region_id, {
|
||||
select: defaultAdminRegionFields,
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
import { IsString } from "class-validator"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import RegionService from "../../../../services/region"
|
||||
import { defaultAdminRegionFields, defaultAdminRegionRelations } from "."
|
||||
|
||||
/**
|
||||
* @oas [post] /regions/{id}/metadata
|
||||
* operationId: "PostRegionsRegionMetadata"
|
||||
* summary: "Set the metadata of a Region"
|
||||
* description: "Sets the metadata of a Region"
|
||||
* x-authenticated: true
|
||||
* parameters:
|
||||
* - (path) id=* {string} The id of the Region.
|
||||
* - (body) key=* {string} Key for the metadata value.
|
||||
* - (body) value=* {string} The value that the key relates to.
|
||||
* tags:
|
||||
* - Region
|
||||
* responses:
|
||||
* 200:
|
||||
* description: OK
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* properties:
|
||||
* region:
|
||||
* $ref: "#/components/schemas/region"
|
||||
*/
|
||||
export default async (req, res) => {
|
||||
const { id } = req.params
|
||||
|
||||
const validated = await validator(AdminPostRegionsRegionMetadata, req.body)
|
||||
|
||||
const regionService: RegionService = req.scope.resolve("regionService")
|
||||
await regionService.setMetadata(id, validated.key, validated.value)
|
||||
|
||||
const region = await regionService.retrieve(id, {
|
||||
select: defaultAdminRegionFields,
|
||||
relations: defaultAdminRegionRelations,
|
||||
})
|
||||
|
||||
res.status(200).json({ region })
|
||||
}
|
||||
|
||||
export class AdminPostRegionsRegionMetadata {
|
||||
@IsString()
|
||||
key: string
|
||||
|
||||
@IsString()
|
||||
value: string
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import {
|
||||
import { defaultAdminRegionRelations, defaultAdminRegionFields } from "."
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import RegionService from "../../../../services/region"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /regions/{id}
|
||||
@@ -75,7 +76,13 @@ export default async (req, res) => {
|
||||
const validated = await validator(AdminPostRegionsRegionReq, req.body)
|
||||
|
||||
const regionService: RegionService = req.scope.resolve("regionService")
|
||||
await regionService.update(region_id, validated)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await regionService
|
||||
.withTransaction(transactionManager)
|
||||
.update(region_id, validated)
|
||||
})
|
||||
|
||||
const region = await regionService.retrieve(region_id, {
|
||||
select: defaultAdminRegionFields,
|
||||
relations: defaultAdminRegionRelations,
|
||||
|
||||
@@ -5,6 +5,7 @@ import {
|
||||
} from "."
|
||||
import { ReturnReasonService } from "../../../../services"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /return-reasons
|
||||
@@ -53,7 +54,12 @@ export default async (req, res) => {
|
||||
const returnReasonService: ReturnReasonService = req.scope.resolve(
|
||||
"returnReasonService"
|
||||
)
|
||||
const result = await returnReasonService.create(validated)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
const result = await manager.transaction(async (transactionManager) => {
|
||||
return await returnReasonService
|
||||
.withTransaction(transactionManager)
|
||||
.create(validated)
|
||||
})
|
||||
|
||||
const reason = await returnReasonService.retrieve(result.id, {
|
||||
select: defaultAdminReturnReasonsFields,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { ReturnReasonService } from "../../../../services"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /return-reasons/{id}
|
||||
@@ -32,7 +33,12 @@ export default async (req, res) => {
|
||||
const returnReasonService: ReturnReasonService = req.scope.resolve(
|
||||
"returnReasonService"
|
||||
)
|
||||
await returnReasonService.delete(id)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await returnReasonService
|
||||
.withTransaction(transactionManager)
|
||||
.delete(id)
|
||||
})
|
||||
|
||||
res.json({
|
||||
id: id,
|
||||
|
||||
@@ -5,6 +5,7 @@ import {
|
||||
} from "."
|
||||
import { ReturnReasonService } from "../../../../services"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /return-reasons/{id}
|
||||
@@ -49,7 +50,12 @@ export default async (req, res) => {
|
||||
"returnReasonService"
|
||||
)
|
||||
|
||||
await returnReasonService.update(id, validated)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await returnReasonService
|
||||
.withTransaction(transactionManager)
|
||||
.update(id, validated)
|
||||
})
|
||||
|
||||
const reason = await returnReasonService.retrieve(id, {
|
||||
select: defaultAdminReturnReasonsFields,
|
||||
|
||||
@@ -3,6 +3,7 @@ import {
|
||||
defaultAdminOrdersFields,
|
||||
defaultAdminOrdersRelations,
|
||||
} from "../orders"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /returns/{id}/cancel
|
||||
@@ -29,7 +30,10 @@ export default async (req, res) => {
|
||||
const returnService: ReturnService = req.scope.resolve("returnService")
|
||||
const orderService: OrderService = req.scope.resolve("orderService")
|
||||
|
||||
let result = await returnService.cancel(id)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
let result = await manager.transaction(async (transactionManager) => {
|
||||
return await returnService.withTransaction(transactionManager).cancel(id)
|
||||
})
|
||||
|
||||
if (result.swap_id) {
|
||||
const swapService = req.scope.resolve("swapService")
|
||||
|
||||
@@ -3,6 +3,7 @@ import { SalesChannelService } from "../../../../services"
|
||||
import { IsArray, ValidateNested } from "class-validator"
|
||||
import { Type } from "class-transformer"
|
||||
import { ProductBatchSalesChannel } from "../../../../types/sales-channels"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /sales-channels/{id}/products/batch
|
||||
@@ -26,18 +27,25 @@ import { ProductBatchSalesChannel } from "../../../../types/sales-channels"
|
||||
* $ref: "#/components/schemas/sales_channel"
|
||||
*/
|
||||
export default async (req: Request, res: Response): Promise<void> => {
|
||||
const validatedBody =
|
||||
req.validatedBody as AdminPostSalesChannelsChannelProductsBatchReq
|
||||
|
||||
const { id } = req.params
|
||||
|
||||
const salesChannelService: SalesChannelService = req.scope.resolve(
|
||||
"salesChannelService"
|
||||
)
|
||||
|
||||
const validatedBody =
|
||||
req.validatedBody as AdminPostSalesChannelsChannelProductsBatchReq
|
||||
const salesChannel = await salesChannelService.addProducts(
|
||||
id,
|
||||
validatedBody.product_ids.map((p) => p.id)
|
||||
)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
const salesChannel = await manager.transaction(async (transactionManager) => {
|
||||
return await salesChannelService
|
||||
.withTransaction(transactionManager)
|
||||
.addProducts(
|
||||
id,
|
||||
validatedBody.product_ids.map((p) => p.id)
|
||||
)
|
||||
})
|
||||
|
||||
res.status(200).json({ sales_channel: salesChannel })
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import { IsBoolean, IsOptional, IsString } from "class-validator"
|
||||
|
||||
import SalesChannelService from "../../../../services/sales-channel"
|
||||
import { CreateSalesChannelInput } from "../../../../types/sales-channels"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /sales-channels
|
||||
@@ -27,13 +28,18 @@ import { CreateSalesChannelInput } from "../../../../types/sales-channels"
|
||||
*/
|
||||
|
||||
export default async (req: Request, res: Response) => {
|
||||
const validatedBody = req.validatedBody as CreateSalesChannelInput
|
||||
const salesChannelService: SalesChannelService = req.scope.resolve(
|
||||
"salesChannelService"
|
||||
)
|
||||
|
||||
const salesChannel = await salesChannelService.create(
|
||||
req.validatedBody as CreateSalesChannelInput
|
||||
)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
const salesChannel = await manager.transaction(async (transactionManager) => {
|
||||
return await salesChannelService
|
||||
.withTransaction(transactionManager)
|
||||
.create(validatedBody)
|
||||
})
|
||||
|
||||
res.status(200).json({ sales_channel: salesChannel })
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import { IsArray, ValidateNested } from "class-validator"
|
||||
import { SalesChannelService } from "../../../../services"
|
||||
import { Request, Response } from "express"
|
||||
import { ProductBatchSalesChannel } from "../../../../types/sales-channels"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /sales-channels/{id}/products/batch
|
||||
@@ -27,18 +28,24 @@ import { ProductBatchSalesChannel } from "../../../../types/sales-channels"
|
||||
*/
|
||||
|
||||
export default async (req: Request, res: Response) => {
|
||||
const validatedBody =
|
||||
req.validatedBody as AdminDeleteSalesChannelsChannelProductsBatchReq
|
||||
const { id } = req.params
|
||||
|
||||
const salesChannelService: SalesChannelService = req.scope.resolve(
|
||||
"salesChannelService"
|
||||
)
|
||||
|
||||
const validatedBody =
|
||||
req.validatedBody as AdminDeleteSalesChannelsChannelProductsBatchReq
|
||||
const salesChannel = await salesChannelService.removeProducts(
|
||||
id,
|
||||
validatedBody.product_ids.map((p) => p.id)
|
||||
)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
const salesChannel = await manager.transaction(async (transactionManager) => {
|
||||
return await salesChannelService
|
||||
.withTransaction(transactionManager)
|
||||
.removeProducts(
|
||||
id,
|
||||
validatedBody.product_ids.map((p) => p.id)
|
||||
)
|
||||
})
|
||||
|
||||
res.status(200).json({ sales_channel: salesChannel })
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { Request, Response } from "express"
|
||||
import { SalesChannelService } from "../../../../services/"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /sales-channels/{id}
|
||||
@@ -33,7 +34,13 @@ export default async (req: Request, res: Response): Promise<void> => {
|
||||
const salesChannelService: SalesChannelService = req.scope.resolve(
|
||||
"salesChannelService"
|
||||
)
|
||||
await salesChannelService.delete(id)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await salesChannelService
|
||||
.withTransaction(transactionManager)
|
||||
.delete(id)
|
||||
})
|
||||
|
||||
res.json({
|
||||
id,
|
||||
object: "sales-channel",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { IsBoolean, IsOptional, IsString } from "class-validator"
|
||||
import { Request, Response } from "express"
|
||||
import { SalesChannelService } from "../../../../services"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /sales-channels/{id}
|
||||
@@ -45,7 +46,15 @@ export default async (req: Request, res: Response) => {
|
||||
const salesChannelService: SalesChannelService = req.scope.resolve(
|
||||
"salesChannelService"
|
||||
)
|
||||
const sales_channel = await salesChannelService.update(id, validatedBody)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
const sales_channel = await manager.transaction(
|
||||
async (transactionManager) => {
|
||||
return await salesChannelService
|
||||
.withTransaction(transactionManager)
|
||||
.update(id, validatedBody)
|
||||
}
|
||||
)
|
||||
|
||||
res.status(200).json({ sales_channel })
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import {
|
||||
} from "class-validator"
|
||||
import { defaultFields, defaultRelations } from "."
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /shipping-options
|
||||
@@ -92,7 +93,13 @@ export default async (req, res) => {
|
||||
validated.profile_id = id
|
||||
}
|
||||
|
||||
const result = await optionService.create(validated)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
const result = await manager.transaction(async (transactionManager) => {
|
||||
return await optionService
|
||||
.withTransaction(transactionManager)
|
||||
.create(validated)
|
||||
})
|
||||
|
||||
const data = await optionService.retrieve(result.id, {
|
||||
select: defaultFields,
|
||||
relations: defaultRelations,
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /shipping-options/{id}
|
||||
* operationId: "DeleteShippingOptionsOption"
|
||||
@@ -28,7 +30,12 @@ export default async (req, res) => {
|
||||
const { option_id } = req.params
|
||||
const optionService = req.scope.resolve("shippingOptionService")
|
||||
|
||||
await optionService.delete(option_id)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await optionService
|
||||
.withTransaction(transactionManager)
|
||||
.delete(option_id)
|
||||
})
|
||||
|
||||
res.json({
|
||||
id: option_id,
|
||||
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
} from "class-validator"
|
||||
import { defaultFields, defaultRelations } from "."
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /shipping-options/{id}
|
||||
@@ -69,7 +70,12 @@ export default async (req, res) => {
|
||||
|
||||
const optionService = req.scope.resolve("shippingOptionService")
|
||||
|
||||
await optionService.update(option_id, validated)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await optionService
|
||||
.withTransaction(transactionManager)
|
||||
.update(option_id, validated)
|
||||
})
|
||||
|
||||
const data = await optionService.retrieve(option_id, {
|
||||
select: defaultFields,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { IsString } from "class-validator"
|
||||
import { ShippingProfileService } from "../../../../services"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /shipping-profiles
|
||||
@@ -36,7 +37,12 @@ export default async (req, res) => {
|
||||
const profileService: ShippingProfileService = req.scope.resolve(
|
||||
"shippingProfileService"
|
||||
)
|
||||
const data = await profileService.create(validated)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
const data = await manager.transaction(async (transactionManager) => {
|
||||
return await profileService
|
||||
.withTransaction(transactionManager)
|
||||
.create(validated)
|
||||
})
|
||||
|
||||
res.status(200).json({ shipping_profile: data })
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { ShippingProfileService } from "../../../../services"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /shipping-profiles/{id}
|
||||
@@ -32,7 +33,12 @@ export default async (req, res) => {
|
||||
"shippingProfileService"
|
||||
)
|
||||
|
||||
await profileService.delete(profile_id)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await profileService
|
||||
.withTransaction(transactionManager)
|
||||
.delete(profile_id)
|
||||
})
|
||||
|
||||
res.status(200).json({
|
||||
id: profile_id,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { IsOptional, IsString } from "class-validator"
|
||||
import { ShippingProfileService } from "../../../../services"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /shipping-profiles/{id}
|
||||
@@ -41,7 +42,12 @@ export default async (req, res) => {
|
||||
"shippingProfileService"
|
||||
)
|
||||
|
||||
await profileService.update(profile_id, validated)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await profileService
|
||||
.withTransaction(transactionManager)
|
||||
.update(profile_id, validated)
|
||||
})
|
||||
|
||||
const data = await profileService.retrieve(profile_id)
|
||||
res.status(200).json({ shipping_profile: data })
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { StoreService } from "../../../../services"
|
||||
import { EntityManager } from "typeorm"
|
||||
/**
|
||||
* @oas [post] /store/currencies/{code}
|
||||
* operationId: "PostStoreCurrenciesCode"
|
||||
@@ -23,6 +24,12 @@ export default async (req, res) => {
|
||||
const { currency_code } = req.params
|
||||
|
||||
const storeService: StoreService = req.scope.resolve("storeService")
|
||||
const data = await storeService.addCurrency(currency_code)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
const data = await manager.transaction(async (transactionManager) => {
|
||||
return await storeService
|
||||
.withTransaction(transactionManager)
|
||||
.addCurrency(currency_code)
|
||||
})
|
||||
|
||||
res.status(200).json({ store: data })
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { StoreService } from "../../../../services"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /store/currencies/{code}
|
||||
@@ -24,6 +25,12 @@ export default async (req, res) => {
|
||||
const { currency_code } = req.params
|
||||
|
||||
const storeService: StoreService = req.scope.resolve("storeService")
|
||||
const data = await storeService.removeCurrency(currency_code)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
const data = await manager.transaction(async (transactionManager) => {
|
||||
return await storeService
|
||||
.withTransaction(transactionManager)
|
||||
.removeCurrency(currency_code)
|
||||
})
|
||||
|
||||
res.status(200).json({ store: data })
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { IsArray, IsOptional, IsString, IsObject } from "class-validator"
|
||||
import { StoreService } from "../../../../services"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /store
|
||||
@@ -45,7 +46,12 @@ export default async (req, res) => {
|
||||
|
||||
const storeService: StoreService = req.scope.resolve("storeService")
|
||||
|
||||
const store = await storeService.update(validatedBody)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
const store = await manager.transaction(async (transactionManager) => {
|
||||
return await storeService
|
||||
.withTransaction(transactionManager)
|
||||
.update(validatedBody)
|
||||
})
|
||||
|
||||
res.status(200).json({ store })
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import { IsArray, IsOptional } from "class-validator"
|
||||
import { TaxRate } from "../../../.."
|
||||
import { TaxRateService } from "../../../../services"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /tax-rates/:id/product-types/batch
|
||||
@@ -38,7 +39,12 @@ export default async (req, res) => {
|
||||
|
||||
const rateService: TaxRateService = req.scope.resolve("taxRateService")
|
||||
|
||||
await rateService.addToProductType(req.params.id, value.product_types)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await rateService
|
||||
.withTransaction(transactionManager)
|
||||
.addToProductType(req.params.id, value.product_types)
|
||||
})
|
||||
|
||||
const config = getRetrieveConfig(
|
||||
query.fields as (keyof TaxRate)[],
|
||||
|
||||
@@ -4,6 +4,7 @@ import { IsArray, IsOptional } from "class-validator"
|
||||
import { TaxRate } from "../../../.."
|
||||
import { TaxRateService } from "../../../../services"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /tax-rates/:id/products/batch
|
||||
@@ -35,7 +36,12 @@ export default async (req, res) => {
|
||||
|
||||
const rateService: TaxRateService = req.scope.resolve("taxRateService")
|
||||
|
||||
await rateService.addToProduct(req.params.id, value.products)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await rateService
|
||||
.withTransaction(transactionManager)
|
||||
.addToProduct(req.params.id, value.products)
|
||||
})
|
||||
|
||||
const config = getRetrieveConfig(
|
||||
query.fields as (keyof TaxRate)[],
|
||||
|
||||
@@ -4,6 +4,7 @@ import { IsArray, IsOptional } from "class-validator"
|
||||
import { TaxRate } from "../../../.."
|
||||
import { TaxRateService } from "../../../../services"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /tax-rates/:id/shipping-options/batch
|
||||
@@ -37,7 +38,12 @@ export default async (req, res) => {
|
||||
)
|
||||
|
||||
const rateService: TaxRateService = req.scope.resolve("taxRateService")
|
||||
await rateService.addToShippingOption(req.params.id, value.shipping_options)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await rateService
|
||||
.withTransaction(transactionManager)
|
||||
.addToShippingOption(req.params.id, value.shipping_options)
|
||||
})
|
||||
|
||||
const config = getRetrieveConfig(
|
||||
query.fields as (keyof TaxRate)[],
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { TaxRateService } from "../../../../services"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /tax-rates/{id}
|
||||
@@ -30,7 +31,10 @@ export default async (req, res) => {
|
||||
const { id } = req.params
|
||||
const taxRateService: TaxRateService = req.scope.resolve("taxRateService")
|
||||
|
||||
await taxRateService.delete(id)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await taxRateService.withTransaction(transactionManager).delete(id)
|
||||
})
|
||||
|
||||
res.json({
|
||||
id: id,
|
||||
|
||||
@@ -4,6 +4,7 @@ import { IsArray, IsOptional } from "class-validator"
|
||||
import { TaxRate } from "../../../.."
|
||||
import { TaxRateService } from "../../../../services"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /tax-rates/:id/product-types/batch
|
||||
@@ -38,7 +39,12 @@ export default async (req, res) => {
|
||||
|
||||
const rateService: TaxRateService = req.scope.resolve("taxRateService")
|
||||
|
||||
await rateService.removeFromProductType(req.params.id, value.product_types)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await rateService
|
||||
.withTransaction(transactionManager)
|
||||
.removeFromProductType(req.params.id, value.product_types)
|
||||
})
|
||||
|
||||
const config = getRetrieveConfig(
|
||||
query.fields as (keyof TaxRate)[],
|
||||
|
||||
@@ -4,6 +4,7 @@ import { IsArray, IsOptional } from "class-validator"
|
||||
import { TaxRate } from "../../../.."
|
||||
import { TaxRateService } from "../../../../services"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /tax-rates/:id/products/batch
|
||||
@@ -35,7 +36,12 @@ export default async (req, res) => {
|
||||
|
||||
const rateService: TaxRateService = req.scope.resolve("taxRateService")
|
||||
|
||||
await rateService.removeFromProduct(req.params.id, value.products)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await rateService
|
||||
.withTransaction(transactionManager)
|
||||
.removeFromProduct(req.params.id, value.products)
|
||||
})
|
||||
|
||||
const config = getRetrieveConfig(
|
||||
query.fields as (keyof TaxRate)[],
|
||||
|
||||
@@ -4,6 +4,7 @@ import { IsArray, IsOptional } from "class-validator"
|
||||
import { TaxRate } from "../../../.."
|
||||
import { TaxRateService } from "../../../../services"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /tax-rates/:id/shipping-options/batch
|
||||
@@ -38,10 +39,12 @@ export default async (req, res) => {
|
||||
|
||||
const rateService: TaxRateService = req.scope.resolve("taxRateService")
|
||||
|
||||
await rateService.removeFromShippingOption(
|
||||
req.params.id,
|
||||
value.shipping_options
|
||||
)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await rateService
|
||||
.withTransaction(transactionManager)
|
||||
.removeFromShippingOption(req.params.id, value.shipping_options)
|
||||
})
|
||||
|
||||
const config = getRetrieveConfig(
|
||||
query.fields as (keyof TaxRate)[],
|
||||
|
||||
@@ -3,6 +3,7 @@ import _ from "lodash"
|
||||
import { UserRoles } from "../../../../models/user"
|
||||
import UserService from "../../../../services/user"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /users
|
||||
@@ -51,7 +52,12 @@ export default async (req, res) => {
|
||||
const userService: UserService = req.scope.resolve("userService")
|
||||
const data = _.omit(validated, ["password"])
|
||||
|
||||
const user = await userService.create(data, validated.password)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
const user = await manager.transaction(async (transactionManager) => {
|
||||
return await userService
|
||||
.withTransaction(transactionManager)
|
||||
.create(data, validated.password)
|
||||
})
|
||||
|
||||
res.status(200).json({ user: _.omit(user, ["password_hash"]) })
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import UserService from "../../../../services/user"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [delete] /users/{user_id}
|
||||
@@ -30,7 +31,10 @@ export default async (req, res) => {
|
||||
const { user_id } = req.params
|
||||
|
||||
const userService: UserService = req.scope.resolve("userService")
|
||||
await userService.delete(user_id)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await userService.withTransaction(transactionManager).delete(user_id)
|
||||
})
|
||||
|
||||
res.status(200).send({
|
||||
id: user_id,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { IsEmail } from "class-validator"
|
||||
import UserService from "../../../../services/user"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /users/password-token
|
||||
@@ -31,7 +32,12 @@ export default async (req, res) => {
|
||||
const user = await userService.retrieveByEmail(validated.email)
|
||||
|
||||
// Should call a email service provider that sends the token to the user
|
||||
await userService.generateResetPasswordToken(user.id)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
await manager.transaction(async (transactionManager) => {
|
||||
return await userService
|
||||
.withTransaction(transactionManager)
|
||||
.generateResetPasswordToken(user.id)
|
||||
})
|
||||
|
||||
res.sendStatus(204)
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import { MedusaError } from "medusa-core-utils"
|
||||
import { User } from "../../../.."
|
||||
import UserService from "../../../../services/user"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /users/password-token
|
||||
@@ -71,10 +72,12 @@ export default async (req, res) => {
|
||||
return
|
||||
}
|
||||
|
||||
const userResult = await userService.setPassword_(
|
||||
user.id,
|
||||
validated.password
|
||||
)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
const userResult = await manager.transaction(async (transactionManager) => {
|
||||
return await userService
|
||||
.withTransaction(transactionManager)
|
||||
.setPassword_(user.id, validated.password)
|
||||
})
|
||||
|
||||
res.status(200).json({ user: _.omit(userResult, ["password_hash"]) })
|
||||
} catch (error) {
|
||||
|
||||
@@ -2,6 +2,7 @@ import { IsEnum, IsObject, IsOptional, IsString } from "class-validator"
|
||||
import { UserRoles } from "../../../../models/user"
|
||||
import UserService from "../../../../services/user"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
/**
|
||||
* @oas [post] /users/{user_id}
|
||||
@@ -33,7 +34,13 @@ export default async (req, res) => {
|
||||
const validated = await validator(AdminUpdateUserRequest, req.body)
|
||||
|
||||
const userService: UserService = req.scope.resolve("userService")
|
||||
const data = await userService.update(user_id, validated)
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
const data = await manager.transaction(async (transactionManager) => {
|
||||
return await userService
|
||||
.withTransaction(transactionManager)
|
||||
.update(user_id, validated)
|
||||
})
|
||||
|
||||
res.status(200).json({ user: data })
|
||||
}
|
||||
|
||||
|
||||
@@ -43,6 +43,9 @@ export const regions = {
|
||||
}
|
||||
|
||||
export const RegionServiceMock = {
|
||||
withTransaction: function () {
|
||||
return this
|
||||
},
|
||||
retrieve: jest.fn().mockImplementation(regionId => {
|
||||
if (regionId === IdMap.getId("testRegion")) {
|
||||
return Promise.resolve(regions.testRegion)
|
||||
|
||||
@@ -67,6 +67,9 @@ export const shippingOptions = {
|
||||
}
|
||||
|
||||
export const ShippingOptionServiceMock = {
|
||||
withTransaction: function () {
|
||||
return this
|
||||
},
|
||||
retrieve: jest.fn().mockImplementation((optionId) => {
|
||||
if (optionId === IdMap.getId("return-shipping")) {
|
||||
return Promise.resolve(shippingOptions.returnShipping)
|
||||
|
||||
Reference in New Issue
Block a user