@things-factory/operato-hub 4.3.188 → 4.3.190

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/client/pages/api/home.js +2 -4
  2. package/config.development.js +8 -23
  3. package/dist-server/routers/api/restful-apis/v1/company/index.js +0 -6
  4. package/dist-server/routers/api/restful-apis/v1/company/index.js.map +1 -1
  5. package/dist-server/routers/api/restful-apis/v1/index.js +1 -0
  6. package/dist-server/routers/api/restful-apis/v1/index.js.map +1 -1
  7. package/dist-server/routers/api/restful-apis/v1/{company → marketplace}/add-marketplace-order.js +4 -4
  8. package/dist-server/routers/api/restful-apis/v1/marketplace/add-marketplace-order.js.map +1 -0
  9. package/dist-server/routers/api/restful-apis/v1/marketplace/add-marketplace-products.js +78 -0
  10. package/dist-server/routers/api/restful-apis/v1/marketplace/add-marketplace-products.js.map +1 -0
  11. package/dist-server/routers/api/restful-apis/v1/{company → marketplace}/cancel-marketplace-order.js +5 -5
  12. package/dist-server/routers/api/restful-apis/v1/marketplace/cancel-marketplace-order.js.map +1 -0
  13. package/dist-server/routers/api/restful-apis/v1/{company → marketplace}/get-marketplace-order-shipping-list.js +3 -3
  14. package/dist-server/routers/api/restful-apis/v1/marketplace/get-marketplace-order-shipping-list.js.map +1 -0
  15. package/dist-server/routers/api/restful-apis/v1/{company → marketplace}/get-marketplace-store-list.js +2 -2
  16. package/dist-server/routers/api/restful-apis/v1/marketplace/get-marketplace-store-list.js.map +1 -0
  17. package/dist-server/routers/api/restful-apis/v1/marketplace/index.js +11 -0
  18. package/dist-server/routers/api/restful-apis/v1/marketplace/index.js.map +1 -0
  19. package/dist-server/routers/api/restful-apis/v1/{company → marketplace}/update-marketplace-order-delivered.js +3 -3
  20. package/dist-server/routers/api/restful-apis/v1/marketplace/update-marketplace-order-delivered.js.map +1 -0
  21. package/dist-server/routers/api/restful-apis/v1/marketplace/update-marketplace-product.js +76 -0
  22. package/dist-server/routers/api/restful-apis/v1/marketplace/update-marketplace-product.js.map +1 -0
  23. package/dist-server/routers/api/restful-apis/v1/{company → marketplace}/update-marketplace-shipping-order.js +2 -2
  24. package/dist-server/routers/api/restful-apis/v1/marketplace/update-marketplace-shipping-order.js.map +1 -0
  25. package/dist-server/routers/api/restful-apis/v1/utils/params.js +153 -0
  26. package/dist-server/routers/api/restful-apis/v1/utils/params.js.map +1 -1
  27. package/openapi/v1/marketplace.yaml +414 -0
  28. package/package.json +14 -13
  29. package/server/routers/api/restful-apis/v1/company/index.ts +0 -6
  30. package/server/routers/api/restful-apis/v1/index.ts +1 -0
  31. package/server/routers/api/restful-apis/v1/{company → marketplace}/add-marketplace-order.ts +7 -6
  32. package/server/routers/api/restful-apis/v1/marketplace/add-marketplace-products.ts +106 -0
  33. package/server/routers/api/restful-apis/v1/marketplace/cancel-marketplace-order.ts +100 -0
  34. package/server/routers/api/restful-apis/v1/{company → marketplace}/get-marketplace-order-shipping-list.ts +4 -4
  35. package/server/routers/api/restful-apis/v1/{company → marketplace}/get-marketplace-store-list.ts +2 -2
  36. package/server/routers/api/restful-apis/v1/marketplace/index.ts +8 -0
  37. package/server/routers/api/restful-apis/v1/{company → marketplace}/update-marketplace-order-delivered.ts +4 -4
  38. package/server/routers/api/restful-apis/v1/marketplace/update-marketplace-product.ts +109 -0
  39. package/server/routers/api/restful-apis/v1/{company → marketplace}/update-marketplace-shipping-order.ts +6 -4
  40. package/server/routers/api/restful-apis/v1/utils/params.ts +153 -0
  41. package/dist-server/routers/api/restful-apis/v1/company/add-marketplace-order.js.map +0 -1
  42. package/dist-server/routers/api/restful-apis/v1/company/cancel-marketplace-order.js.map +0 -1
  43. package/dist-server/routers/api/restful-apis/v1/company/get-marketplace-order-shipping-list.js.map +0 -1
  44. package/dist-server/routers/api/restful-apis/v1/company/get-marketplace-store-list.js.map +0 -1
  45. package/dist-server/routers/api/restful-apis/v1/company/update-marketplace-order-delivered.js.map +0 -1
  46. package/dist-server/routers/api/restful-apis/v1/company/update-marketplace-shipping-order.js.map +0 -1
  47. package/server/routers/api/restful-apis/v1/company/cancel-marketplace-order.ts +0 -94
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/operato-hub",
3
- "version": "4.3.188",
3
+ "version": "4.3.190",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -55,7 +55,7 @@
55
55
  "@operato/scene-tab": "^0.1.8",
56
56
  "@operato/scene-table": "^0.1.8",
57
57
  "@operato/scene-wheel-sorter": "^0.1.8",
58
- "@things-factory/api": "^4.3.179",
58
+ "@things-factory/api": "^4.3.190",
59
59
  "@things-factory/apptool-ui": "^4.3.179",
60
60
  "@things-factory/attachment-base": "^4.3.179",
61
61
  "@things-factory/auth-base": "^4.3.179",
@@ -77,20 +77,21 @@
77
77
  "@things-factory/i18n-base": "^4.3.179",
78
78
  "@things-factory/import-ui": "^4.3.179",
79
79
  "@things-factory/import-ui-excel": "^4.3.179",
80
- "@things-factory/integration-accounting": "^4.3.186",
81
- "@things-factory/integration-fulfillment": "^4.3.186",
82
- "@things-factory/integration-lmd": "^4.3.186",
83
- "@things-factory/integration-marketplace": "^4.3.186",
84
- "@things-factory/integration-pos": "^4.3.186",
85
- "@things-factory/integration-sellercraft": "^4.3.186",
86
- "@things-factory/integration-sftp": "^4.3.186",
80
+ "@things-factory/integration-accounting": "^4.3.190",
81
+ "@things-factory/integration-fulfillment": "^4.3.190",
82
+ "@things-factory/integration-lmd": "^4.3.190",
83
+ "@things-factory/integration-marketplace": "^4.3.190",
84
+ "@things-factory/integration-pos": "^4.3.190",
85
+ "@things-factory/integration-sellercraft": "^4.3.190",
86
+ "@things-factory/integration-sftp": "^4.3.190",
87
87
  "@things-factory/lite-menu": "^4.3.186",
88
+ "@things-factory/marketplace-base": "^4.3.190",
88
89
  "@things-factory/more-ui": "^4.3.179",
89
90
  "@things-factory/notification": "^4.3.186",
90
91
  "@things-factory/pdf": "^4.3.159",
91
92
  "@things-factory/product-ui": "^4.3.187",
92
93
  "@things-factory/resource-ui": "^4.3.179",
93
- "@things-factory/sales-base": "^4.3.188",
94
+ "@things-factory/sales-base": "^4.3.190",
94
95
  "@things-factory/scene-data-transform": "^4.3.159",
95
96
  "@things-factory/scene-excel": "^4.3.159",
96
97
  "@things-factory/scene-firebase": "^4.3.159",
@@ -105,8 +106,8 @@
105
106
  "@things-factory/setting-ui": "^4.3.186",
106
107
  "@things-factory/shell": "^4.3.179",
107
108
  "@things-factory/system-ui": "^4.3.179",
108
- "@things-factory/warehouse-base": "^4.3.187",
109
- "@things-factory/worksheet-base": "^4.3.188",
109
+ "@things-factory/warehouse-base": "^4.3.190",
110
+ "@things-factory/worksheet-base": "^4.3.190",
110
111
  "cron-parser": "^4.7.0",
111
112
  "koa2-swagger-ui": "^5.0.2",
112
113
  "swagger-jsdoc": "^5.0.0",
@@ -118,5 +119,5 @@
118
119
  "resolutions": {
119
120
  "core-js": "^3.16.0"
120
121
  },
121
- "gitHead": "e302836bb0f2a765c54e5cac96e82b7c7ace86fe"
122
+ "gitHead": "9fc85f3d95eeddd2191d156d99fc77bcc81b5071"
122
123
  }
@@ -1,12 +1,6 @@
1
1
  import './add-contact-points'
2
- import './add-marketplace-order'
3
2
  import './add-products'
4
- import './cancel-marketplace-order'
5
3
  import './get-bizplace-list'
6
4
  import './get-contact-point-list'
7
- import './get-marketplace-order-shipping-list'
8
- import './get-marketplace-store-list'
9
5
  import './get-partner-list'
10
6
  import './get-product-list'
11
- import './update-marketplace-order-delivered'
12
- import './update-marketplace-shipping-order'
@@ -1,2 +1,3 @@
1
1
  import './company'
2
2
  import './warehouse'
3
+ import './marketplace'
@@ -1,10 +1,8 @@
1
- import { getConnection, EntityManager, IsNull, SelectQueryBuilder } from 'typeorm'
1
+ import { EntityManager, getConnection, IsNull, SelectQueryBuilder } from 'typeorm'
2
+ import { v4 as uuidv4 } from 'uuid'
2
3
 
3
4
  import { restfulApiRouter as router } from '@things-factory/api'
4
- import { ApiError, ApiErrorHandler, throwInternalServerError } from '../utils/error-util'
5
- import { v4 as uuidv4 } from 'uuid'
6
5
  import { MarketplaceStore } from '@things-factory/integration-marketplace'
7
- import { Product, ProductBundle, ProductBundleSetting } from '@things-factory/product-base'
8
6
  import {
9
7
  MarketplaceOrder as MarketplaceOrderEntity,
10
8
  MarketplaceOrderItem as MarketplaceOrderItemEntity,
@@ -13,10 +11,13 @@ import {
13
11
  MarketplaceProductVariation as MarketplaceProductVariationEntity,
14
12
  NoGenerator
15
13
  } from '@things-factory/marketplace-base'
16
- import { businessMiddleware, validationMiddleware, loggingMiddleware } from '../middlewares'
14
+ import { Product, ProductBundle, ProductBundleSetting } from '@things-factory/product-base'
15
+
16
+ import { businessMiddleware, loggingMiddleware, validationMiddleware } from '../middlewares'
17
+ import { ApiError, ApiErrorHandler, throwInternalServerError } from '../utils/error-util'
17
18
 
18
19
  router.post(
19
- '/v1/company/add-marketplace-order',
20
+ '/v1/marketplace/add-marketplace-order',
20
21
  businessMiddleware,
21
22
  validationMiddleware,
22
23
  loggingMiddleware,
@@ -0,0 +1,106 @@
1
+ import _ from 'lodash'
2
+ import { EntityManager, getConnection, In } from 'typeorm'
3
+ import { v4 as uuidv4 } from 'uuid'
4
+
5
+ import { restfulApiRouter as router } from '@things-factory/api'
6
+ import { MarketplaceStore } from '@things-factory/integration-marketplace'
7
+ import { MarketplaceProduct, MarketplaceProductVariation } from '@things-factory/marketplace-base'
8
+
9
+ import { businessMiddleware, loggingMiddleware, validationMiddleware } from '../middlewares'
10
+ import { ApiError, ApiErrorHandler, throwInternalServerError } from '../utils/error-util'
11
+
12
+ router.post(
13
+ '/v1/marketplace/add-marketplace-products',
14
+ businessMiddleware,
15
+ validationMiddleware,
16
+ loggingMiddleware,
17
+ async (context, next) => {
18
+ try {
19
+ await getConnection().transaction(async (tx: EntityManager) => {
20
+ const { user, domain } = context.state
21
+ const { marketplaceProducts, storeId } = context.request.body.data
22
+
23
+ if (!Array.isArray(marketplaceProducts)) throw new ApiError('E01', 'data field is not an array')
24
+
25
+ const marketplaceStore: MarketplaceStore = await tx.getRepository(MarketplaceStore).findOne({
26
+ where: { name: storeId, domain }
27
+ })
28
+ if (!marketplaceStore) throw new ApiError('E04', 'storeId')
29
+
30
+ const itemIds = marketplaceProducts.map(mp => mp.itemId)
31
+
32
+ //check duplicate sku from request
33
+ let duplicateItemId = itemIds.filter((item, index) => itemIds.indexOf(item) != index)
34
+
35
+ if (duplicateItemId?.length > 0) {
36
+ throw new ApiError('E05', `duplicated item id found: ${[...new Set(duplicateItemId)]}`)
37
+ }
38
+
39
+ //check if sku existed in db
40
+ let existedMarketplaceProducts: MarketplaceProduct = await tx.getRepository(MarketplaceProduct).find({
41
+ where: {
42
+ itemId: In(itemIds),
43
+ marketplaceStore,
44
+ domain
45
+ }
46
+ })
47
+
48
+ if (existedMarketplaceProducts?.length > 0) {
49
+ throw new ApiError('E05', `existing products found: ${existedMarketplaceProducts.map(emp => emp.itemId)}`)
50
+ }
51
+
52
+ let response = []
53
+
54
+ // save product
55
+ await Promise.all(
56
+ marketplaceProducts.map(async mp => {
57
+ let marketplaceProduct = mp
58
+ const marketplaceProductVariations = mp.marketplaceProductVariations
59
+
60
+ marketplaceProduct.isku = marketplaceProduct?.isku ? marketplaceProduct.isku : uuidv4()
61
+ marketplaceProduct.domain = domain
62
+ marketplaceProduct.marketplaceStore = marketplaceStore
63
+ marketplaceProduct.creator = user
64
+ marketplaceProduct.updater = user
65
+ delete marketplaceProduct.marketplaceProductVariations
66
+
67
+ let mpResult = await tx.getRepository(MarketplaceProduct).save(marketplaceProduct)
68
+
69
+ // save product details
70
+ let mpvs = await Promise.all(
71
+ marketplaceProductVariations.map(async mpv => {
72
+ let mpvResult = await tx.getRepository(MarketplaceProductVariation).save({
73
+ ...mpv,
74
+ name: mpv?.name ? mpv.name : mpResult.name,
75
+ channelSku: mpv?.channelSku ? mpv.channelSku : mpv.variationSku,
76
+ status: 'ACTIVE',
77
+ marketplaceProduct: mpResult,
78
+ domain: domain,
79
+ creator: user,
80
+ updater: user
81
+ })
82
+ delete mpvResult.creator
83
+ delete mpvResult.updater
84
+ delete mpvResult.product
85
+ delete mpvResult.domain
86
+ return mpvResult
87
+ })
88
+ )
89
+ delete mpResult.creator
90
+ delete mpResult.updater
91
+ delete mpResult.bizplace
92
+ delete mpResult.domain
93
+ response.push({ ...mpResult, marketplaceProductVariations: mpvs })
94
+ })
95
+ )
96
+
97
+ context.body = {
98
+ data: response
99
+ }
100
+ })
101
+ } catch (e) {
102
+ if (e instanceof ApiError) ApiErrorHandler(context, e)
103
+ else throwInternalServerError(context, e)
104
+ }
105
+ }
106
+ )
@@ -0,0 +1,100 @@
1
+ import { EntityManager, getConnection } from 'typeorm'
2
+
3
+ import { restfulApiRouter as router } from '@things-factory/api'
4
+ import { User } from '@things-factory/auth-base'
5
+ import { Bizplace, getCustomerBizplaces } from '@things-factory/biz-base'
6
+ import { FulfillmentAPI, FulfillmentCenter } from '@things-factory/integration-fulfillment'
7
+ import { MarketplaceStore } from '@things-factory/integration-marketplace'
8
+ import { MarketplaceOrder, MarketplaceOrderItem } from '@things-factory/marketplace-base'
9
+ import { Domain } from '@things-factory/shell'
10
+
11
+ import { businessMiddleware, loggingMiddleware, validationMiddleware } from '../middlewares'
12
+ import { ApiError, ApiErrorHandler, throwInternalServerError } from '../utils/error-util'
13
+
14
+ router.post(
15
+ '/v1/marketplace/cancel-marketplace-order',
16
+ businessMiddleware,
17
+ validationMiddleware,
18
+ loggingMiddleware,
19
+ async (context, next) => {
20
+ try {
21
+ const { orderNo, remark, cancelBy } = context.request.body.data
22
+ const { domain, user }: { domain: Domain; user: User } = context.state
23
+
24
+ await getConnection().transaction(async (tx: EntityManager) => {
25
+ const marketplaceStore: MarketplaceStore = await tx.getRepository(MarketplaceStore).findOne({
26
+ where: { name: context.request.body.data.storeId, domain: context.state.domain }
27
+ })
28
+ if (!marketplaceStore) throw new ApiError('E04', 'storeId')
29
+
30
+ let marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
31
+ where: { domain, orderNo, marketplaceStore },
32
+ relations: ['fulfillmentCenter', 'marketplaceStore', 'marketplaceOrderItems']
33
+ })
34
+ if (!marketplaceOrder) throw new ApiError('E04', 'orderNo')
35
+
36
+ let marketplaceOrderItems: MarketplaceOrderItem[] = marketplaceOrder.marketplaceOrderItems.map(orderItem => {
37
+ let marketplaceOrderItem: MarketplaceOrderItem = Object.assign({}, orderItem)
38
+ marketplaceOrderItem.reason = remark
39
+ marketplaceOrderItem.status = 'cancelled'
40
+ marketplaceOrderItem.updater = user
41
+ marketplaceOrderItem.cancelBy = cancelBy
42
+
43
+ return marketplaceOrderItem
44
+ })
45
+ await tx.getRepository(MarketplaceOrderItem).save(marketplaceOrderItems)
46
+
47
+ marketplaceOrder.status = 'cancelled'
48
+ marketplaceOrder.remark = remark
49
+ marketplaceOrder.updater = user
50
+ marketplaceOrder = await tx.getRepository(MarketplaceOrder).save(marketplaceOrder)
51
+
52
+ const cancelStatuses: string[] = ['cancelled', 'canceled']
53
+ if (cancelStatuses.includes(marketplaceOrder.status) && marketplaceOrder?.releaseOrderId) {
54
+ if (marketplaceOrder.isSplitted) {
55
+ const fulfillmentCenter: FulfillmentCenter = marketplaceOrder.fulfillmentCenter
56
+ const centerId: string = fulfillmentCenter.centerId
57
+ const warehouseDomain: Domain = await tx.getRepository(Domain).findOne({ where: { subdomain: centerId } })
58
+ const customerBizplaces: Bizplace[] = await getCustomerBizplaces(warehouseDomain)
59
+ const customerBizplaceId: string = customerBizplaces[0].id
60
+
61
+ const { items: releaseOrders }: any = await FulfillmentAPI.getOutboundOrders(fulfillmentCenter, {
62
+ customerBizplaceId,
63
+ refNo: marketplaceOrder.orderNo
64
+ })
65
+ if (releaseOrders?.length) {
66
+ for (var a = 0; a < releaseOrders.length; a++) {
67
+ const releaseOrderId: string = releaseOrders[a].id
68
+ await FulfillmentAPI.cancelReleaseOrder(fulfillmentCenter, { customerBizplaceId, releaseOrderId })
69
+ }
70
+ }
71
+ } else {
72
+ const releaseOrderId: string = marketplaceOrder.releaseOrderId
73
+ const fulfillmentCenter: FulfillmentCenter = marketplaceOrder.fulfillmentCenter
74
+ const centerId: string = fulfillmentCenter.centerId
75
+
76
+ const warehouseDomain: Domain = await tx.getRepository(Domain).findOne({ where: { subdomain: centerId } })
77
+ const customerBizplaces: Bizplace[] = await getCustomerBizplaces(warehouseDomain)
78
+ const customerBizplaceId: string = customerBizplaces[0].id
79
+ await FulfillmentAPI.cancelReleaseOrder(fulfillmentCenter, { customerBizplaceId, releaseOrderId })
80
+ }
81
+ }
82
+ const data = {
83
+ orderNo: marketplaceOrder.orderNo,
84
+ status: marketplaceOrder.status,
85
+ remark: marketplaceOrder.remark,
86
+ cancelBy: cancelBy || null,
87
+ createdAt: marketplaceOrder.createdAt,
88
+ updatedAt: marketplaceOrder.updatedAt
89
+ }
90
+
91
+ context.body = {
92
+ data
93
+ }
94
+ })
95
+ } catch (e) {
96
+ if (e instanceof ApiError) ApiErrorHandler(context, e)
97
+ else throwInternalServerError(context, e)
98
+ }
99
+ }
100
+ )
@@ -1,14 +1,14 @@
1
+ import _ from 'lodash'
1
2
  import { getRepository } from 'typeorm'
2
3
 
3
4
  import { restfulApiRouter as router } from '@things-factory/api'
4
- import { MarketplaceOrderShipping, MarketplaceOrder } from '@things-factory/marketplace-base'
5
+ import { MarketplaceOrder, MarketplaceOrderShipping } from '@things-factory/marketplace-base'
5
6
 
7
+ import { businessMiddleware, loggingMiddleware, validationMiddleware } from '../middlewares'
6
8
  import { ApiError, ApiErrorHandler, throwInternalServerError } from '../utils/error-util'
7
- import _ from 'lodash'
8
- import { businessMiddleware, validationMiddleware, loggingMiddleware } from '../middlewares'
9
9
 
10
10
  router.get(
11
- '/v1/company/get-marketplace-order-shipping-list',
11
+ '/v1/marketplace/get-marketplace-order-shipping-list',
12
12
  businessMiddleware,
13
13
  validationMiddleware,
14
14
  loggingMiddleware,
@@ -3,11 +3,11 @@ import { getRepository } from 'typeorm'
3
3
  import { restfulApiRouter as router } from '@things-factory/api'
4
4
  import { MarketplaceStore } from '@things-factory/integration-marketplace'
5
5
 
6
+ import { businessMiddleware, loggingMiddleware, validationMiddleware } from '../middlewares'
6
7
  import { ApiError, ApiErrorHandler, throwInternalServerError } from '../utils/error-util'
7
- import { businessMiddleware, validationMiddleware, loggingMiddleware } from '../middlewares'
8
8
 
9
9
  router.get(
10
- '/v1/company/get-marketplace-store-list',
10
+ '/v1/marketplace/get-marketplace-store-list',
11
11
  businessMiddleware,
12
12
  validationMiddleware,
13
13
  loggingMiddleware,
@@ -0,0 +1,8 @@
1
+ import './add-marketplace-order'
2
+ import './add-marketplace-products'
3
+ import './cancel-marketplace-order'
4
+ import './get-marketplace-order-shipping-list'
5
+ import './get-marketplace-store-list'
6
+ import './update-marketplace-order-delivered'
7
+ import './update-marketplace-shipping-order'
8
+ import './update-marketplace-product'
@@ -1,14 +1,14 @@
1
- import { getConnection, EntityManager } from 'typeorm'
1
+ import { EntityManager, getConnection } from 'typeorm'
2
2
 
3
3
  import { restfulApiRouter as router } from '@things-factory/api'
4
- import { MarketplaceOrder } from '@things-factory/marketplace-base'
5
4
  import { MarketplaceStore } from '@things-factory/integration-marketplace'
5
+ import { MarketplaceOrder } from '@things-factory/marketplace-base'
6
6
 
7
+ import { businessMiddleware, loggingMiddleware, validationMiddleware } from '../middlewares'
7
8
  import { ApiError, ApiErrorHandler, throwInternalServerError } from '../utils/error-util'
8
- import { businessMiddleware, validationMiddleware, loggingMiddleware } from '../middlewares'
9
9
 
10
10
  router.post(
11
- '/v1/company/update-marketplace-order-delivered',
11
+ '/v1/marketplace/update-marketplace-order-delivered',
12
12
  businessMiddleware,
13
13
  validationMiddleware,
14
14
  loggingMiddleware,
@@ -0,0 +1,109 @@
1
+ import { EntityManager, getConnection } from 'typeorm'
2
+
3
+ import { restfulApiRouter as router } from '@things-factory/api'
4
+ import { User } from '@things-factory/auth-base'
5
+ import {
6
+ MarketplaceProduct as MarketplaceProductEntity,
7
+ MarketplaceProductVariation as MarketplaceProductVariationEntity
8
+ } from '@things-factory/marketplace-base'
9
+ import { Domain } from '@things-factory/shell'
10
+
11
+ import { businessMiddleware, loggingMiddleware, storeMiddleware, validationMiddleware } from '../middlewares'
12
+ import { ApiError, ApiErrorHandler, throwInternalServerError } from '../utils/error-util'
13
+
14
+ router.post(
15
+ '/v1/marketplace/update-marketplace-product',
16
+ businessMiddleware,
17
+ validationMiddleware,
18
+ loggingMiddleware,
19
+ storeMiddleware,
20
+ async (context, next) => {
21
+ await getConnection().transaction(async (tx: EntityManager) => {
22
+ try {
23
+ const { domain, user }: { domain: Domain; user: User } = context.state
24
+ const { marketplaceStore } = context.state
25
+ const data = context.request.body.data
26
+ let marketplaceProduct: MarketplaceProductEntity = await tx.getRepository(MarketplaceProductEntity).findOne({
27
+ where: { marketplaceStore, id: data.id }
28
+ })
29
+
30
+ if (!marketplaceProduct) throw new ApiError('E04', `Marketplace Product ${data.itemId}`)
31
+
32
+ let productVariations: any[] = data.marketplaceProductVariations
33
+
34
+ delete data.marketplaceProductVariations
35
+
36
+ await tx.getRepository(MarketplaceProductEntity).save({ ...marketplaceProduct, ...data, updater: user })
37
+
38
+ if (productVariations?.length > 0) {
39
+ await Promise.all(
40
+ productVariations.map(async pv => {
41
+ let marketplaceProductVariation: MarketplaceProductVariationEntity = await tx
42
+ .getRepository(MarketplaceProductVariationEntity)
43
+ .findOne({
44
+ where: { domain, marketplaceProduct, variationId: pv.variationId }
45
+ })
46
+
47
+ if (!marketplaceProductVariation) {
48
+ delete pv.sku
49
+
50
+ let mpvResult = await tx.getRepository(MarketplaceProductVariationEntity).save({
51
+ ...pv,
52
+ domain,
53
+ marketplaceProduct,
54
+ updater: user
55
+ })
56
+ delete mpvResult.creator
57
+ delete mpvResult.updater
58
+ delete mpvResult.product
59
+ delete mpvResult.domain
60
+ return mpvResult
61
+ } else {
62
+ let mpvResult = await tx.getRepository(MarketplaceProductVariationEntity).save({
63
+ ...marketplaceProductVariation,
64
+ ...pv,
65
+ updater: user
66
+ })
67
+ delete mpvResult.creator
68
+ delete mpvResult.updater
69
+ delete mpvResult.product
70
+ delete mpvResult.domain
71
+ return mpvResult
72
+ }
73
+ })
74
+ )
75
+ }
76
+
77
+ let newMarketplaceProduct: MarketplaceProductEntity = await tx.getRepository(MarketplaceProductEntity).findOne({
78
+ where: { marketplaceStore, itemId: data.itemId },
79
+ relations: ['marketplaceProductVariations']
80
+ })
81
+
82
+ let newMarketplaceProductVariations: MarketplaceProductVariationEntity[] =
83
+ newMarketplaceProduct.marketplaceProductVariations
84
+
85
+ delete newMarketplaceProduct.creator
86
+ delete newMarketplaceProduct.updater
87
+ delete newMarketplaceProduct.domain
88
+ delete newMarketplaceProduct.marketplaceProductVariations
89
+
90
+ newMarketplaceProductVariations = newMarketplaceProductVariations.map(mpv => {
91
+ delete mpv.creator
92
+ delete mpv.updater
93
+ delete mpv.domain
94
+
95
+ return {
96
+ ...mpv
97
+ }
98
+ })
99
+
100
+ context.body = {
101
+ data: { ...marketplaceProduct, marketplaceProductVariations: newMarketplaceProductVariations }
102
+ }
103
+ } catch (e) {
104
+ if (e instanceof ApiError) ApiErrorHandler(context, e)
105
+ else throwInternalServerError(context, e)
106
+ }
107
+ })
108
+ }
109
+ )
@@ -1,12 +1,14 @@
1
- import { getConnection, EntityManager } from 'typeorm'
1
+ import { EntityManager, getConnection } from 'typeorm'
2
+
2
3
  import { restfulApiRouter as router } from '@things-factory/api'
4
+ import { User } from '@things-factory/auth-base'
3
5
  import { MarketplaceOrderShipping as MarketplaceOrderShippingEntity } from '@things-factory/marketplace-base'
6
+
7
+ import { businessMiddleware, loggingMiddleware, storeMiddleware, validationMiddleware } from '../middlewares'
4
8
  import { ApiError, ApiErrorHandler, throwInternalServerError } from '../utils/error-util'
5
- import { businessMiddleware, validationMiddleware, loggingMiddleware, storeMiddleware } from '../middlewares'
6
- import { User } from '@things-factory/auth-base'
7
9
 
8
10
  router.post(
9
- '/v1/company/update-marketplace-shipping-order',
11
+ '/v1/marketplace/update-marketplace-shipping-order',
10
12
  businessMiddleware,
11
13
  validationMiddleware,
12
14
  loggingMiddleware,