@things-factory/integration-marketplace 4.2.5 → 4.2.9

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 (73) hide show
  1. package/dist-server/controllers/index.js +1 -0
  2. package/dist-server/controllers/index.js.map +1 -1
  3. package/dist-server/controllers/magento/apis/update-order-status.js +6 -6
  4. package/dist-server/controllers/magento/apis/update-order-status.js.map +1 -1
  5. package/dist-server/controllers/store-api/index.js +14 -0
  6. package/dist-server/controllers/store-api/index.js.map +1 -1
  7. package/dist-server/controllers/tiktok/apis/echo.js +19 -0
  8. package/dist-server/controllers/tiktok/apis/echo.js.map +1 -0
  9. package/dist-server/controllers/tiktok/apis/get-store-order-document.js +27 -0
  10. package/dist-server/controllers/tiktok/apis/get-store-order-document.js.map +1 -0
  11. package/dist-server/controllers/tiktok/apis/get-store-order-package.js +47 -0
  12. package/dist-server/controllers/tiktok/apis/get-store-order-package.js.map +1 -0
  13. package/dist-server/controllers/tiktok/apis/get-store-order-packages.js +39 -0
  14. package/dist-server/controllers/tiktok/apis/get-store-order-packages.js.map +1 -0
  15. package/dist-server/controllers/tiktok/apis/get-store-order.js +137 -0
  16. package/dist-server/controllers/tiktok/apis/get-store-order.js.map +1 -0
  17. package/dist-server/controllers/tiktok/apis/get-store-orders.js +47 -0
  18. package/dist-server/controllers/tiktok/apis/get-store-orders.js.map +1 -0
  19. package/dist-server/controllers/tiktok/apis/get-store-product-attributes.js +30 -0
  20. package/dist-server/controllers/tiktok/apis/get-store-product-attributes.js.map +1 -0
  21. package/dist-server/controllers/tiktok/apis/get-store-product-categories.js +28 -0
  22. package/dist-server/controllers/tiktok/apis/get-store-product-categories.js.map +1 -0
  23. package/dist-server/controllers/tiktok/apis/get-store-product.js +91 -0
  24. package/dist-server/controllers/tiktok/apis/get-store-product.js.map +1 -0
  25. package/dist-server/controllers/tiktok/apis/get-store-products.js +36 -0
  26. package/dist-server/controllers/tiktok/apis/get-store-products.js.map +1 -0
  27. package/dist-server/controllers/tiktok/apis/index.js +26 -0
  28. package/dist-server/controllers/tiktok/apis/index.js.map +1 -0
  29. package/dist-server/controllers/tiktok/apis/update-order-status.js +27 -0
  30. package/dist-server/controllers/tiktok/apis/update-order-status.js.map +1 -0
  31. package/dist-server/controllers/tiktok/apis/update-store-product-variation-price.js +28 -0
  32. package/dist-server/controllers/tiktok/apis/update-store-product-variation-price.js.map +1 -0
  33. package/dist-server/controllers/tiktok/apis/update-store-product-variation-stock.js +32 -0
  34. package/dist-server/controllers/tiktok/apis/update-store-product-variation-stock.js.map +1 -0
  35. package/dist-server/controllers/tiktok/client/index.js +15 -0
  36. package/dist-server/controllers/tiktok/client/index.js.map +1 -0
  37. package/dist-server/controllers/tiktok/client/signature.js +63 -0
  38. package/dist-server/controllers/tiktok/client/signature.js.map +1 -0
  39. package/dist-server/controllers/tiktok/client/tiktok.js +113 -0
  40. package/dist-server/controllers/tiktok/client/tiktok.js.map +1 -0
  41. package/dist-server/controllers/tiktok/client/types.js +3 -0
  42. package/dist-server/controllers/tiktok/client/types.js.map +1 -0
  43. package/dist-server/controllers/tiktok/index.js +30 -0
  44. package/dist-server/controllers/tiktok/index.js.map +1 -0
  45. package/dist-server/controllers/tiktok/platform-action.js +44 -0
  46. package/dist-server/controllers/tiktok/platform-action.js.map +1 -0
  47. package/dist-server/controllers/woocommerce/apis/get-store-products.js +17 -6
  48. package/dist-server/controllers/woocommerce/apis/get-store-products.js.map +1 -1
  49. package/package.json +2 -2
  50. package/server/controllers/index.ts +1 -0
  51. package/server/controllers/magento/apis/update-order-status.ts +6 -6
  52. package/server/controllers/store-api/index.ts +6 -0
  53. package/server/controllers/tiktok/apis/echo.ts +14 -0
  54. package/server/controllers/tiktok/apis/get-store-order-document.ts +26 -0
  55. package/server/controllers/tiktok/apis/get-store-order-package.ts +46 -0
  56. package/server/controllers/tiktok/apis/get-store-order-packages.ts +43 -0
  57. package/server/controllers/tiktok/apis/get-store-order.ts +169 -0
  58. package/server/controllers/tiktok/apis/get-store-orders.ts +52 -0
  59. package/server/controllers/tiktok/apis/get-store-product-attributes.ts +29 -0
  60. package/server/controllers/tiktok/apis/get-store-product-categories.ts +27 -0
  61. package/server/controllers/tiktok/apis/get-store-product.ts +95 -0
  62. package/server/controllers/tiktok/apis/get-store-products.ts +38 -0
  63. package/server/controllers/tiktok/apis/index.ts +13 -0
  64. package/server/controllers/tiktok/apis/update-order-status.ts +22 -0
  65. package/server/controllers/tiktok/apis/update-store-product-variation-price.ts +24 -0
  66. package/server/controllers/tiktok/apis/update-store-product-variation-stock.ts +28 -0
  67. package/server/controllers/tiktok/client/index.ts +2 -0
  68. package/server/controllers/tiktok/client/signature.ts +78 -0
  69. package/server/controllers/tiktok/client/tiktok.ts +153 -0
  70. package/server/controllers/tiktok/client/types.ts +20 -0
  71. package/server/controllers/tiktok/index.ts +8 -0
  72. package/server/controllers/tiktok/platform-action.ts +48 -0
  73. package/server/controllers/woocommerce/apis/get-store-products.ts +33 -22
@@ -4,23 +4,23 @@ export function updateOrderStatus() {
4
4
  return {
5
5
  method: 'post',
6
6
  path: '/{subpath}',
7
- async denormalize(req, { store }) {
7
+ denormalize(req) {
8
8
  let { orderId, status, trackingNo, carrier, orderItems } = req
9
9
  let pr: any
10
- if (status == 'SHIPPED' || status == 'READY_TO_SHIP' || status == 'PROCESSING' || status == 'PACKED') {
10
+ if (status == 'READY_TO_SHIP') {
11
11
  pr = {
12
12
  resource: {
13
13
  subpath: `order/${orderId}/ship`
14
14
  },
15
15
  payload: {
16
16
  items: unmapOrderItems(orderItems),
17
- tracks: [
17
+ tracks: trackingNo ? [
18
18
  {
19
19
  carrier_code: carrier,
20
20
  track_number: trackingNo,
21
21
  title: carrier
22
22
  }
23
- ],
23
+ ] : [],
24
24
  arguments: {
25
25
  extension_attributes: {
26
26
  source_code: 'default'
@@ -28,13 +28,13 @@ export function updateOrderStatus() {
28
28
  }
29
29
  }
30
30
  }
31
- } else if (status == 'DELIVERED' || status == 'CLOSED') {
31
+ } else if (status == 'DELIVERED') {
32
32
  pr = {
33
33
  resource: {
34
34
  subpath: `order/${orderId}/invoice`
35
35
  }
36
36
  }
37
- } else if (status == 'REFUND_COMPLETE' || status == 'RETURN_COMPLETE') {
37
+ } else if (status == 'REFUND_COMPLETE') {
38
38
  pr = {
39
39
  resource: {
40
40
  subpath: `order/${orderId}/refund`
@@ -66,6 +66,12 @@ export class StoreAPI {
66
66
  @api
67
67
  static getStoreOrder(store, req): any {}
68
68
 
69
+ @api
70
+ static getStoreOrderPackages(store, req): any {}
71
+
72
+ @api
73
+ static getStoreOrderPackage(store, req): any {}
74
+
69
75
  @api
70
76
  static getStoreOrderItems(store, req): any {}
71
77
 
@@ -0,0 +1,14 @@
1
+ export function echo() {
2
+ return {
3
+ path: '/echo',
4
+ denormalize(req) {
5
+ return { ...req }
6
+ },
7
+ normalize(res) {
8
+ return { ...res }
9
+ },
10
+ action({ store, method, path, request, platformAction }) {
11
+ return { ...request }
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,26 @@
1
+ /* https://bytedance.feishu.cn/docs/doccnDyz5Bbk26iOdejbBRBlLrb#ytBXoS */
2
+
3
+ export function getStoreOrderDocument() {
4
+ return {
5
+ method: 'get',
6
+ path: '/api/fulfillment/shipping_document',
7
+ denormalize(req) {
8
+ var { packageId, documentType } = req || {}
9
+
10
+ return { payload: { package_id: packageId, document_type: documentType } }
11
+ },
12
+ async normalize(res) {
13
+ const { data } = res
14
+
15
+ let result: any[] = [
16
+ {
17
+ file: data.doc_url,
18
+ fileTypeValue: 'AWB',
19
+ mimeType: 'application/pdf'
20
+ }
21
+ ]
22
+
23
+ return result
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,46 @@
1
+ /* https://bytedance.feishu.cn/docs/doccnDyz5Bbk26iOdejbBRBlLrb#ytBXoS */
2
+
3
+ export function getStoreOrderPackage() {
4
+ return {
5
+ method: 'get',
6
+ path: '/api/fulfillment/detail',
7
+ denormalize(req) {
8
+ var { packageId } = req || {}
9
+
10
+ return { payload: { package_id: packageId } }
11
+ },
12
+ async normalize(res) {
13
+ const { data } = res
14
+
15
+ let result: any = {
16
+ packageId: data.package_id,
17
+ orderInfoList: data.order_info_list.map(itm => {
18
+ return {
19
+ orderId: itm.order_id,
20
+ skuList: itm.sku_list.map(sku => {
21
+ return {
22
+ skuId: sku.sku_id,
23
+ skuName: sku.sku_name,
24
+ skuImage: sku.sku_image,
25
+ quantity: sku.quantity
26
+ }
27
+ })
28
+ }
29
+ }),
30
+ packageStatus: data.package_status,
31
+ deliveryOption: data.delivery_option,
32
+ shippingProvider: data.shipping_provider,
33
+ shippingProviderId: data.shipping_provider_id,
34
+ trackingNumber: data.tracking_number,
35
+ orderListIdList: data.order_line_id_list,
36
+ pickUpType: data.pick_up_type,
37
+ pickUpStartTime: data.pick_up_start_time,
38
+ pickupEndTime: data.pick_up_end_time,
39
+ createTime: data.create_time,
40
+ updateTime: data.update_time
41
+ }
42
+
43
+ return result
44
+ }
45
+ }
46
+ }
@@ -0,0 +1,43 @@
1
+ /* https://bytedance.feishu.cn/wiki/wikcntMLczW460imZUfYqaa1Dng#jIY8hJ */
2
+
3
+ import { StoreAPI } from '../../store-api'
4
+
5
+ export function getStoreOrderPackages() {
6
+ return {
7
+ method: 'post',
8
+ path: '/api/fulfillment/search',
9
+ denormalize(req) {
10
+ var { pagination, fromDate, toDate, nextCursor } = req || {}
11
+ var { page, limit } = pagination || { page: 0, limit: 100 }
12
+
13
+ var create_time_from = Math.floor(new Date(fromDate).getTime() / 1000)
14
+ var create_time_to = Math.floor(new Date(toDate).getTime() / 1000)
15
+
16
+ var payload = {
17
+ page_size: limit,
18
+ cursor: nextCursor,
19
+ create_time_from,
20
+ create_time_to
21
+ }
22
+
23
+ return { payload }
24
+ },
25
+ async normalize(res, { store }) {
26
+ const { data } = res
27
+
28
+ var more: boolean = data?.more || false
29
+ var nextCursor: string = more ? data.next_cursor : null
30
+ const packageList: any[] = data?.package_list || []
31
+
32
+ let results: any[] = []
33
+ for (let i = 0; i < packageList.length; i++) {
34
+ const packageObj: any = packageList[i]
35
+ const packageDetail: any = await StoreAPI.getStoreOrderPackage(store, { packageId: packageObj.package_id })
36
+
37
+ results.push({ ...packageDetail })
38
+ }
39
+
40
+ return { results, more, nextCursor }
41
+ }
42
+ }
43
+ }
@@ -0,0 +1,169 @@
1
+ /* https://bytedance.feishu.cn/docs/doccnDyz5Bbk26iOdejbBRBlLrb#ytBXoS */
2
+
3
+ import { StoreAPI } from '../../store-api'
4
+
5
+ // Delivery Option: STANDARD, EXPRESS, ECONOMY, SEND_BY_SELLER
6
+
7
+ const documentStatuses = [112, 121, 122, 130]
8
+
9
+ export function getStoreOrder() {
10
+ return {
11
+ method: 'post',
12
+ path: '/api/orders/detail/query',
13
+ denormalize(req) {
14
+ var { orderIdList } = req || {}
15
+
16
+ return { payload: { order_id_list: orderIdList } }
17
+ },
18
+ async normalize(res, { store }) {
19
+ const { data } = res
20
+ const orderList = data.order_list
21
+
22
+ let results: any[] = []
23
+ for (let i = 0; i < orderList.length; i++) {
24
+ const order: any = orderList[i]
25
+ const {
26
+ order_id: name,
27
+ order_id: orderNo,
28
+ payment_method: paymentMethod,
29
+ payment_info: paymentInfo,
30
+ order_status: status,
31
+ ext_status: extStatus,
32
+ create_time,
33
+ update_time,
34
+ rts_sla,
35
+ recipient_address: recipientAddress,
36
+ item_list: itemList,
37
+ package_list: packageList,
38
+ delivery_option: deliveryOption
39
+ } = order
40
+
41
+ let orderStatus: string = `ttk_${status}`
42
+ switch (extStatus) {
43
+ case 201:
44
+ case 203:
45
+ orderStatus = `ttk_${extStatus}`
46
+ break
47
+ default:
48
+ orderStatus = `ttk_${status}`
49
+ }
50
+
51
+ var orderUpdatedAt = new Date(update_time * 1000)
52
+ var orderCreatedAt = new Date(Number(create_time))
53
+ var slaExpiresAt = new Date(rts_sla * 1000)
54
+ let docRefNo = orderNo
55
+ let isSOF: boolean = false
56
+ if (deliveryOption == 'SEND_BY_SELLER') isSOF = true
57
+
58
+ let orderItems = itemList.map(item => {
59
+ var { product_id: name, sku_id, quantity: qty, sku_original_price, sku_sale_price } = item
60
+
61
+ return {
62
+ name,
63
+ variationId: sku_id,
64
+ qty,
65
+ paidPrice: sku_sale_price,
66
+ orderNo,
67
+ docRefNo,
68
+ total: sku_sale_price,
69
+ totalTax: 0,
70
+ subtotal: sku_original_price,
71
+ subtotalTax: 0,
72
+ slaExpiresAt
73
+ }
74
+ })
75
+
76
+ const { full_address, phone, zipcode, city, region: country, name: firstName } = recipientAddress
77
+
78
+ let billing = {
79
+ address_1: full_address,
80
+ address_2: null,
81
+ address_3: null,
82
+ address_4: null,
83
+ address_5: null,
84
+ phone,
85
+ phone_2: null,
86
+ postcode: zipcode,
87
+ city,
88
+ country,
89
+ first_name: firstName,
90
+ last_name: null
91
+ }
92
+
93
+ let shipping = {
94
+ address_1: full_address,
95
+ address_2: null,
96
+ address_3: null,
97
+ address_4: null,
98
+ address_5: null,
99
+ phone,
100
+ phone_2: null,
101
+ postcode: zipcode,
102
+ city,
103
+ country,
104
+ first_name: firstName,
105
+ last_name: null
106
+ }
107
+
108
+ let orderShipping = {
109
+ address1: shipping.address_1,
110
+ address2: null,
111
+ address3: null,
112
+ address4: null,
113
+ address5: null,
114
+ phone1: shipping.phone,
115
+ phone2: null,
116
+ postCode: shipping.postcode,
117
+ city: shipping.city,
118
+ country: shipping.country,
119
+ collectionCurrency: paymentInfo.currency,
120
+ attentionTo: shipping.first_name
121
+ }
122
+
123
+ let result: any = {
124
+ name,
125
+ orderNo,
126
+ status: orderStatus,
127
+ orderCreatedAt,
128
+ orderUpdatedAt,
129
+ totalAmount: paymentInfo.total_amount,
130
+ itemCount: itemList.length,
131
+ orderItems,
132
+ orderShipping,
133
+ billing,
134
+ shipping,
135
+ firstName,
136
+ lastName: null,
137
+ isSOF
138
+ }
139
+
140
+ let orderPackage: any = {}
141
+ if (packageList && packageList[0]?.package_id) {
142
+ let orderPackageDetail: any = await StoreAPI.getStoreOrderPackage(store, {
143
+ packageId: packageList[0].package_id
144
+ })
145
+
146
+ orderPackage = {
147
+ ...orderPackageDetail,
148
+ orderId: name
149
+ }
150
+
151
+ if (documentStatuses.indexOf(status) >= 0) {
152
+ let orderDocument: any = await StoreAPI.getStoreOrderDocument(store, {
153
+ packageId: packageList[0].package_id,
154
+ documentType: 1
155
+ })
156
+
157
+ orderPackage.orderDocument = orderDocument || []
158
+ }
159
+
160
+ result.orderPackage = orderPackage
161
+ }
162
+
163
+ results.push(result)
164
+ }
165
+
166
+ return results
167
+ }
168
+ }
169
+ }
@@ -0,0 +1,52 @@
1
+ /* https://bytedance.feishu.cn/wiki/wikcntMLczW460imZUfYqaa1Dng#jIY8hJ */
2
+
3
+ import { StoreAPI } from '../../store-api'
4
+
5
+ export function getStoreOrders() {
6
+ return {
7
+ method: 'post',
8
+ path: '/api/orders/search',
9
+ denormalize(req) {
10
+ var { pagination, fromDate, toDate, nextCursor } = req || {}
11
+ var { page, limit } = pagination || { page: 0, limit: 100 }
12
+
13
+ var create_time_from = Math.floor(new Date(fromDate).getTime() / 1000)
14
+ var create_time_to = Math.floor(new Date(toDate).getTime() / 1000)
15
+
16
+ var payload = {
17
+ page_size: limit,
18
+ cursor: nextCursor,
19
+ create_time_from,
20
+ create_time_to
21
+ }
22
+
23
+ return { payload }
24
+ },
25
+ async normalize(res, { store }) {
26
+ const { data } = res
27
+
28
+ var more: boolean = data?.more || false
29
+ var nextCursor: string = more ? data.next_cursor : null
30
+ const orderList: any[] = data?.order_list || []
31
+
32
+ let results: any[] = []
33
+ let orderIds: any = []
34
+ for (let i = 0; i < orderList.length; i++) {
35
+ const order: any = orderList[i]
36
+ orderIds.push({ ...order })
37
+
38
+ if (orderIds.length <= 20) {
39
+ const orderIdList: any = orderIds.map(orderId => orderId.order_id)
40
+ const orderDetails: any[] = await StoreAPI.getStoreOrder(store, { orderIdList })
41
+ orderDetails.map(orderDetail => {
42
+ results.push({ ...orderDetail })
43
+ })
44
+
45
+ orderIds = []
46
+ }
47
+ }
48
+
49
+ return { results, more, nextCursor }
50
+ }
51
+ }
52
+ }
@@ -0,0 +1,29 @@
1
+ /* https://bytedance.feishu.cn/docs/doccnDyz5Bbk26iOdejbBRBlLrb#WBz4V0 */
2
+
3
+ export function getStoreProductAttributes() {
4
+ return {
5
+ method: 'get',
6
+ path: '/api/products/attributes',
7
+ denormalize(req) {
8
+ const { categoryId } = req
9
+ return { payload: { category_id: categoryId } }
10
+ },
11
+ normalize(res) {
12
+ const { data } = res
13
+
14
+ let results: any = []
15
+ data.attributes.map(item => {
16
+ let result: any = {
17
+ id: item.id,
18
+ name: item.local_display_name,
19
+ attributeType: item.attribute_type,
20
+ parent: !item.is_leaf ? 0 : item.parent_id
21
+ }
22
+
23
+ results.push(result)
24
+ })
25
+
26
+ return results
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,27 @@
1
+ /* https://bytedance.feishu.cn/docs/doccnDyz5Bbk26iOdejbBRBlLrb#jIY8hJ */
2
+
3
+ export function getStoreProductCategories() {
4
+ return {
5
+ method: 'get',
6
+ path: '/api/products/categories',
7
+ denormalize(req) {
8
+ return { payload: {} }
9
+ },
10
+ normalize(res) {
11
+ const { data } = res
12
+
13
+ let results: any = []
14
+ data.category_list.map(item => {
15
+ let result: any = {
16
+ id: item.id,
17
+ name: item.local_display_name,
18
+ parent: item.is_leaf ? item.parent_id : 0
19
+ }
20
+
21
+ results.push(result)
22
+ })
23
+
24
+ return { results, total: 1 }
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,95 @@
1
+ /* https://bytedance.feishu.cn/docs/doccnDyz5Bbk26iOdejbBRBlLrb#ytBXoS */
2
+
3
+ /* status: 0-all, 1-draft, 2-pending, 3-failed, 4-live, 5-seller_deactivated,
4
+ 6-platform-deactivated, 7-freeze, 8-deleted
5
+ */
6
+
7
+ export function getStoreProduct() {
8
+ return {
9
+ method: 'get',
10
+ path: '/api/products/details',
11
+ denormalize(req) {
12
+ var { productId } = req || {}
13
+
14
+ return { payload: { product_id: productId } }
15
+ },
16
+ async normalize(res) {
17
+ const { data } = res
18
+
19
+ const productVariations: any[] = data.skus
20
+
21
+ let variants: any[] = []
22
+ if (productVariations && productVariations?.length > 0) {
23
+ variants = productVariations.map(variant => {
24
+ let totalProductQty: number = 0
25
+ let stockInfos = variant.stock_infos
26
+ stockInfos.map(stockInfo => {
27
+ totalProductQty += stockInfo.available_stock
28
+ })
29
+
30
+ return {
31
+ variationId: variant.id,
32
+ variationSku: variant.seller_sku || variant.id.toString(),
33
+ channelSku: variant.seller_sku || variant.id.toString(),
34
+ name: data.product_name,
35
+ qty: totalProductQty,
36
+ primaryUnit: 'N/A',
37
+ primaryUnitValue: data.package_weight === '' ? null : parseFloat(data.package_weight),
38
+ costPrice: variant.price.original_price === '' ? null : parseFloat(variant.price.original_price),
39
+ sellPrice: variant.price.original_price === '' ? null : parseFloat(variant.price.original_price),
40
+ isEnabled: data.product_status == 4 ? true : false,
41
+ length: data?.package_length ? data.package_length * 10 : 1,
42
+ width: data?.package_width ? data.package_width * 10 : 1,
43
+ height: data?.package_height ? data.package_height * 10 : 1,
44
+ weight: data.package_weight === '' ? null : parseFloat(data.package_weight)
45
+ }
46
+ })
47
+ } else {
48
+ variants = [
49
+ {
50
+ variationId: data.product_id,
51
+ variationSku: data.product_name,
52
+ channelSku: data.product_name,
53
+ name: data.product_name,
54
+ qty: 0,
55
+ primaryUnit: 'N/A',
56
+ primaryUnitValue: data.package_weight === '' ? null : parseFloat(data.package_weight),
57
+ costPrice: null,
58
+ sellPrice: null,
59
+ isEnabled: data.product_status == 4 ? true : false,
60
+ length: data?.package_length ? data.package_length * 10 : 1,
61
+ width: data?.package_width ? data.package_width * 10 : 1,
62
+ height: data?.package_height ? data.package_height * 10 : 1,
63
+ weight: data.package_weight === '' ? null : parseFloat(data.package_weight)
64
+ }
65
+ ]
66
+ }
67
+
68
+ const result = {
69
+ itemId: data.product_id,
70
+ name: data.product_name,
71
+ brand: data?.brand?.name || null,
72
+ isVerified: data.product_status == 4 ? true : false,
73
+ categoryId: data?.category_list?.length > 0 ? data.category_list[0].id : '',
74
+ images: getImageUrl(data.images),
75
+ variations: variants
76
+ }
77
+
78
+ return result
79
+ }
80
+ }
81
+ }
82
+
83
+ function getImageUrl(images) {
84
+ let imageSrc: any = []
85
+
86
+ if (images) {
87
+ images.map(image => {
88
+ image.url_list.map(url => {
89
+ imageSrc.push(url)
90
+ })
91
+ })
92
+ }
93
+
94
+ return imageSrc
95
+ }
@@ -0,0 +1,38 @@
1
+ /* https://bytedance.feishu.cn/docs/doccnDyz5Bbk26iOdejbBRBlLrb#ytBXoS */
2
+
3
+ /* status: 0-all, 1-draft, 2-pending, 3-failed, 4-live, 5-seller_deactivated,
4
+ 6-platform-deactivated, 7-freeze, 8-deleted
5
+ */
6
+
7
+ import { StoreAPI } from '../../store-api'
8
+
9
+ export function getStoreProducts() {
10
+ return {
11
+ method: 'post',
12
+ path: '/api/products/search',
13
+ denormalize(req) {
14
+ var { pagination } = req || {}
15
+ var { page, limit } = pagination || { page: 0, limit: 100 }
16
+
17
+ return {
18
+ payload: { page_size: limit, page_number: page + 1, search_status: 0 },
19
+ resource: {}
20
+ }
21
+ },
22
+ async normalize(res, { store }) {
23
+ const { data } = res
24
+
25
+ const products: any[] = data?.products || []
26
+ const total: number = data?.total || 0
27
+
28
+ let results: any[] = []
29
+ for (let i = 0; i < products.length; i++) {
30
+ const product: any = products[i]
31
+ const productDetails = await StoreAPI.getStoreProduct(store, { productId: product.id })
32
+ results.push({ ...productDetails })
33
+ }
34
+
35
+ return { results, total }
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,13 @@
1
+ export * from './echo'
2
+ export * from './get-store-order'
3
+ export * from './get-store-orders'
4
+ export * from './get-store-order-document'
5
+ export * from './get-store-order-packages'
6
+ export * from './get-store-order-package'
7
+ export * from './get-store-product-attributes'
8
+ export * from './get-store-product-categories'
9
+ export * from './get-store-product'
10
+ export * from './get-store-products'
11
+ export * from './update-store-product-variation-stock'
12
+ export * from './update-store-product-variation-price'
13
+ export * from './update-order-status'
@@ -0,0 +1,22 @@
1
+ export function updateOrderStatus() {
2
+ return {
3
+ path: '/api/order/rts',
4
+ method: 'post',
5
+ async denormalize(req, { store }) {
6
+ let { orderId, status } = req
7
+
8
+ if (status == 'ready_to_ship') {
9
+ return {
10
+ payload: {
11
+ order_id: orderId
12
+ }
13
+ }
14
+ } else {
15
+ return
16
+ }
17
+ },
18
+ normalize(res) {
19
+ return res
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,24 @@
1
+ export function updateStoreProductVariationPrice() {
2
+ return {
3
+ path: '/api/products/prices',
4
+ method: 'put',
5
+ denormalize(req) {
6
+ const { variationId, sellPrice, productId } = (Array.isArray(req) ? req[0] : req) || {}
7
+
8
+ return {
9
+ payload: {
10
+ product_id: productId,
11
+ skus: [
12
+ {
13
+ id: variationId,
14
+ original_price: sellPrice.toString()
15
+ }
16
+ ]
17
+ }
18
+ }
19
+ },
20
+ normalize(res) {
21
+ return res
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,28 @@
1
+ export function updateStoreProductVariationStock() {
2
+ return {
3
+ method: 'put',
4
+ path: '/api/products/stocks',
5
+ denormalize(req) {
6
+ const { variationId, qty, itemId } = (Array.isArray(req) ? req[0] : req) || {}
7
+
8
+ return {
9
+ payload: {
10
+ product_id: itemId,
11
+ skus: [
12
+ {
13
+ id: variationId,
14
+ stock_infos: [
15
+ {
16
+ available_stock: qty
17
+ }
18
+ ]
19
+ }
20
+ ]
21
+ }
22
+ }
23
+ },
24
+ normalize(res) {
25
+ return res
26
+ }
27
+ }
28
+ }