@things-factory/operato-hub 4.3.823 → 4.3.825

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.
@@ -6,83 +6,113 @@ const auth_base_1 = require("@things-factory/auth-base");
6
6
  const env_1 = require("@things-factory/env");
7
7
  const integration_powrup_1 = require("@things-factory/integration-powrup");
8
8
  const sales_base_1 = require("@things-factory/sales-base");
9
+ const ADVISORY_LOCK_KEY = 'powrup-initiate-shipment';
9
10
  exports.powrupInitiateShipmentResolver = {
10
11
  async powrupInitiateShipment(_, {}, context) {
12
+ var _a, _b, _c, _d, _e;
11
13
  const maxRTSRetry = 10;
14
+ // Same fix as powrupGetAirwayBill / powrupGetTrackingNo: avoid wrapping the
15
+ // resolver in a long transaction across external PowrupAPI HTTP calls. Use a
16
+ // single QueryRunner with a session-level advisory lock for concurrency safety,
17
+ // and let each UPDATE auto-commit so row locks are held only for the duration
18
+ // of the UPDATE statement, not across the API call.
19
+ const queryRunner = (0, typeorm_1.getConnection)().createQueryRunner();
20
+ let connected = false;
12
21
  try {
13
- await (0, typeorm_1.getConnection)().transaction(async (tx) => {
14
- var _a, _b, _c, _d;
15
- try {
16
- const powrup = await tx
17
- .getRepository(integration_powrup_1.Powrup)
18
- .findOne({ where: { platform: integration_powrup_1.Platform.POWRUP, active: true } });
19
- let orderPackageQb = tx
20
- .getRepository(sales_base_1.OrderPackage)
21
- .createQueryBuilder('opk')
22
- .innerJoinAndSelect('opk.releaseGood', 'rg')
23
- .innerJoinAndSelect('opk.domain', 'domain')
24
- .innerJoinAndSelect('opk.bizplace', 'bizplace')
25
- .leftJoinAndSelect('opk.creator', 'creator')
26
- .leftJoinAndSelect('rg.lastMileDelivery', 'lmd')
27
- .where(`rg.source = :source`, { source: auth_base_1.ApplicationType.POWRUP })
28
- .andWhere(`rg.type = :rgType`, { rgType: 'b2c' })
29
- .andWhere(`rg.ref_order_id NOTNULL`)
30
- .andWhere(`rg.status = :status`, {
31
- status: sales_base_1.ORDER_STATUS.DONE
32
- })
33
- .andWhere(`opk.market_rts_call_success ISNULL`)
34
- .andWhere(`COALESCE(opk.market_rts_call_retry, 0) <= :maxRTSRetry`, { maxRTSRetry: maxRTSRetry })
35
- .orderBy(`opk.created_at`);
36
- let orderPackagesWithoutRTS = await orderPackageQb.getMany();
37
- if ((orderPackagesWithoutRTS === null || orderPackagesWithoutRTS === void 0 ? void 0 : orderPackagesWithoutRTS.length) > 0) {
38
- for (let i = 0; i < orderPackagesWithoutRTS.length; i++) {
39
- const orderPackage = orderPackagesWithoutRTS[i];
40
- const releaseGood = orderPackage.releaseGood;
41
- if (releaseGood.lmdOption == true && (orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.trackingNo) == null) {
42
- continue;
43
- }
44
- let orderInformation = {
45
- refOrderId: orderPackage.releaseGood.refOrderId,
46
- packageId: orderPackage.packageId,
47
- platform: orderPackage.releaseGood.platformCode
48
- };
49
- if ((_a = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _a === void 0 ? void 0 : _a.lmdOption) {
50
- orderInformation = Object.assign(Object.assign({}, orderInformation), { awb: orderPackage.airwayBill, trackingNo: orderPackage.trackingNo, lmdOption: (_b = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _b === void 0 ? void 0 : _b.lmdOption, shipperName: (_d = (_c = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _c === void 0 ? void 0 : _c.lastMileDelivery) === null || _d === void 0 ? void 0 : _d.platform });
51
- }
52
- performance.mark(`start:${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`);
53
- try {
54
- await integration_powrup_1.PowrupAPI.initiateShipment(powrup, Object.assign(Object.assign({}, orderInformation), { context: { state: { domain: null, user: null } } }));
55
- await tx
56
- .getRepository(sales_base_1.OrderPackage)
57
- .update({ id: orderPackage.id }, { marketRtsCallSuccess: new Date() });
58
- performance.mark(`end:${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`);
59
- }
60
- catch (error) {
61
- performance.mark(`end:${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`);
62
- env_1.logger.error(`powrupInitiateShipment[InitiateShipment][Order Package ID: ${orderPackage.id}]: ${error}`);
63
- await (0, typeorm_1.getRepository)(sales_base_1.OrderPackage)
64
- .createQueryBuilder()
65
- .update(sales_base_1.OrderPackage)
66
- .set({ marketRtsCallRetry: () => `coalesce("market_rts_call_retry", 0) + 1` })
67
- .where('id = :id', { id: orderPackage.id })
68
- .execute();
69
- continue;
70
- }
71
- finally {
72
- let perf = performance.measure(`powrupInitiateShipment: ${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`, `start:${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`, `end:${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`);
73
- console.info(perf.toJSON());
74
- }
22
+ await queryRunner.connect();
23
+ connected = true;
24
+ const lockResult = await queryRunner.query(`SELECT pg_try_advisory_lock(hashtextextended($1, 0)) AS acquired`, [ADVISORY_LOCK_KEY]);
25
+ if (!((_a = lockResult === null || lockResult === void 0 ? void 0 : lockResult[0]) === null || _a === void 0 ? void 0 : _a.acquired)) {
26
+ env_1.logger.info(`powrupInitiateShipment: another instance is running, skipping`);
27
+ return;
28
+ }
29
+ try {
30
+ const manager = queryRunner.manager;
31
+ const powrup = await manager.findOne(integration_powrup_1.Powrup, {
32
+ where: { platform: integration_powrup_1.Platform.POWRUP, active: true }
33
+ });
34
+ const orderPackagesWithoutRTS = await manager
35
+ .createQueryBuilder(sales_base_1.OrderPackage, 'opk')
36
+ .innerJoinAndSelect('opk.releaseGood', 'rg')
37
+ .innerJoinAndSelect('opk.domain', 'domain')
38
+ .innerJoinAndSelect('opk.bizplace', 'bizplace')
39
+ .leftJoinAndSelect('opk.creator', 'creator')
40
+ .leftJoinAndSelect('rg.lastMileDelivery', 'lmd')
41
+ .where(`rg.source = :source`, { source: auth_base_1.ApplicationType.POWRUP })
42
+ .andWhere(`rg.type = :rgType`, { rgType: 'b2c' })
43
+ .andWhere(`rg.ref_order_id NOTNULL`)
44
+ .andWhere(`rg.status = :status`, { status: sales_base_1.ORDER_STATUS.DONE })
45
+ .andWhere(`opk.market_rts_call_success ISNULL`)
46
+ .andWhere(`COALESCE(opk.market_rts_call_retry, 0) <= :maxRTSRetry`, { maxRTSRetry })
47
+ .orderBy(`opk.created_at`)
48
+ .getMany();
49
+ if ((orderPackagesWithoutRTS === null || orderPackagesWithoutRTS === void 0 ? void 0 : orderPackagesWithoutRTS.length) > 0) {
50
+ for (let i = 0; i < orderPackagesWithoutRTS.length; i++) {
51
+ const orderPackage = orderPackagesWithoutRTS[i];
52
+ const releaseGood = orderPackage.releaseGood;
53
+ if (releaseGood.lmdOption == true && (orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.trackingNo) == null) {
54
+ continue;
55
+ }
56
+ let orderInformation = {
57
+ refOrderId: orderPackage.releaseGood.refOrderId,
58
+ packageId: orderPackage.packageId,
59
+ platform: orderPackage.releaseGood.platformCode
60
+ };
61
+ if ((_b = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _b === void 0 ? void 0 : _b.lmdOption) {
62
+ orderInformation = Object.assign(Object.assign({}, orderInformation), { awb: orderPackage.airwayBill, trackingNo: orderPackage.trackingNo, lmdOption: (_c = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _c === void 0 ? void 0 : _c.lmdOption, shipperName: (_e = (_d = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _d === void 0 ? void 0 : _d.lastMileDelivery) === null || _e === void 0 ? void 0 : _e.platform });
63
+ }
64
+ performance.mark(`start:${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`);
65
+ try {
66
+ await integration_powrup_1.PowrupAPI.initiateShipment(powrup, Object.assign(Object.assign({}, orderInformation), { context: { state: { domain: null, user: null } } }));
67
+ // Auto-commit single-statement UPDATE — row lock held only for this UPDATE,
68
+ // not across the API call above.
69
+ await manager.update(sales_base_1.OrderPackage, { id: orderPackage.id }, { marketRtsCallSuccess: new Date() });
70
+ performance.mark(`end:${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`);
71
+ }
72
+ catch (error) {
73
+ performance.mark(`end:${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`);
74
+ env_1.logger.error(`powrupInitiateShipment[InitiateShipment][Order Package ID: ${orderPackage.id}]: ${error}`);
75
+ await manager
76
+ .createQueryBuilder()
77
+ .update(sales_base_1.OrderPackage)
78
+ .set({ marketRtsCallRetry: () => `coalesce("market_rts_call_retry", 0) + 1` })
79
+ .where('id = :id', { id: orderPackage.id })
80
+ .execute();
81
+ continue;
82
+ }
83
+ finally {
84
+ let perf = performance.measure(`powrupInitiateShipment: ${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`, `start:${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`, `end:${orderPackage.releaseGood.refOrderId} - ${orderPackage.packageId}`);
85
+ console.info(perf.toJSON());
75
86
  }
76
87
  }
77
88
  }
78
- catch (e) {
79
- env_1.logger.error(`powrupInitiateShipment[InitiateShipment]: ${e}`);
89
+ }
90
+ catch (e) {
91
+ env_1.logger.error(`powrupInitiateShipment[InitiateShipment]: ${e}`);
92
+ }
93
+ finally {
94
+ try {
95
+ await queryRunner.query(`SELECT pg_advisory_unlock(hashtextextended($1, 0))`, [ADVISORY_LOCK_KEY]);
80
96
  }
81
- });
97
+ catch (releaseErr) {
98
+ env_1.logger.error(`powrupInitiateShipment[AdvisoryUnlock]: ${releaseErr}`);
99
+ }
100
+ }
82
101
  }
83
102
  catch (e) {
84
103
  env_1.logger.error(`powrupInitiateShipment[MainError]: ${e}`);
85
104
  }
105
+ finally {
106
+ if (connected) {
107
+ try {
108
+ await queryRunner.query(`SELECT pg_advisory_unlock_all()`);
109
+ }
110
+ catch (unlockAllErr) {
111
+ env_1.logger.error(`powrupInitiateShipment[AdvisoryUnlockAll]: ${unlockAllErr}`);
112
+ }
113
+ }
114
+ await queryRunner.release();
115
+ }
86
116
  }
87
117
  };
88
118
  //# sourceMappingURL=powrup-initiate-shipment.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"powrup-initiate-shipment.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/synchronization/powrup-initiate-shipment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"powrup-initiate-shipment.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/synchronization/powrup-initiate-shipment.ts"],"names":[],"mappings":"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"}
@@ -6,92 +6,127 @@ const auth_base_1 = require("@things-factory/auth-base");
6
6
  const env_1 = require("@things-factory/env");
7
7
  const integration_sellercraft_1 = require("@things-factory/integration-sellercraft");
8
8
  const sales_base_1 = require("@things-factory/sales-base");
9
+ const ADVISORY_LOCK_KEY = 'sellercraft-initiate-shipment';
9
10
  exports.sellercraftInitiateShipmentResolver = {
10
11
  async sellercraftInitiateShipment(_, {}, context) {
12
+ var _a, _b, _c, _d, _e;
11
13
  const maxRTSRetry = 10;
14
+ // Same fix as powrupGetAirwayBill / powrupGetTrackingNo: do not wrap the
15
+ // resolver in a single long transaction across external SellercraftAPI HTTP
16
+ // calls. The previous version held row locks on every UPDATE'd order_packages
17
+ // row until the loop finished, which was the direct cause of the order_packages
18
+ // lock chains observed in pg_stat_activity (sessions stuck `idle in transaction`
19
+ // for 10+ minutes after `UPDATE order_packages SET market_rts_call_success`).
20
+ //
21
+ // Use a single QueryRunner with a session-level advisory lock for concurrency
22
+ // safety, and let each UPDATE auto-commit on its own (row lock held only for
23
+ // the duration of that single statement).
24
+ const queryRunner = (0, typeorm_1.getConnection)().createQueryRunner();
25
+ let connected = false;
12
26
  try {
13
- await (0, typeorm_1.getConnection)().transaction(async (tx) => {
14
- var _a, _b, _c, _d;
15
- try {
16
- let orderPackageQb = tx
17
- .getRepository(sales_base_1.OrderPackage)
18
- .createQueryBuilder('opk')
19
- .innerJoinAndSelect('opk.releaseGood', 'rg')
20
- .innerJoinAndSelect('opk.domain', 'domain')
21
- .innerJoinAndSelect('opk.bizplace', 'bizplace')
22
- .innerJoinAndSelect('bizplace.domain', 'bdomain')
23
- .leftJoinAndSelect('opk.creator', 'creator')
24
- .leftJoinAndSelect('rg.lastMileDelivery', 'lmd')
25
- .where(`rg.source = :source`, { source: auth_base_1.ApplicationType.SELLERCRAFT })
26
- .andWhere(`rg.type = :rgType`, { rgType: 'b2c' })
27
- .andWhere(`rg.status = :status`, {
28
- status: sales_base_1.ORDER_STATUS.DONE
29
- })
30
- .andWhere(`opk.market_rts_call_success ISNULL`)
31
- .andWhere(`COALESCE(opk.market_rts_call_retry, 0) <= :maxRTSRetry`, { maxRTSRetry: maxRTSRetry })
32
- .orderBy(`opk.created_at`);
33
- let orderPackagesWithoutRTS = await orderPackageQb.getMany();
34
- if ((orderPackagesWithoutRTS === null || orderPackagesWithoutRTS === void 0 ? void 0 : orderPackagesWithoutRTS.length) > 0) {
35
- for (let i = 0; i < orderPackagesWithoutRTS.length; i++) {
36
- const orderPackage = orderPackagesWithoutRTS[i];
37
- const releaseGood = orderPackage.releaseGood;
38
- const sellercraft = await tx
39
- .getRepository(integration_sellercraft_1.Sellercraft)
40
- .findOne({ where: { domain: { id: orderPackage.bizplace.domain.id }, status: 'ACTIVE' } });
41
- if (!sellercraft) {
42
- continue;
43
- }
44
- let sellercraftSetting = sellercraft.sellercraftSetting;
45
- let disableInitiateOrderShipment = (sellercraftSetting === null || sellercraftSetting === void 0 ? void 0 : sellercraftSetting.disableInitiateOrderShipment) &&
46
- (sellercraftSetting === null || sellercraftSetting === void 0 ? void 0 : sellercraftSetting.disableInitiateOrderShipment) == 1
47
- ? true
48
- : false;
49
- if (disableInitiateOrderShipment === true ||
50
- (releaseGood.lmdOption == true && (orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.trackingNo) == null)) {
51
- continue;
52
- }
53
- let orderInformation = {
54
- accountId: sellercraft.accountId,
55
- orderId: releaseGood.refNo2,
56
- packageId: orderPackage.packageId
57
- };
58
- if ((_a = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _a === void 0 ? void 0 : _a.lmdOption) {
59
- orderInformation = Object.assign(Object.assign({}, orderInformation), { awb: orderPackage.airwayBill, trackingNo: orderPackage.trackingNo, lmdOption: (_b = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _b === void 0 ? void 0 : _b.lmdOption, shipperName: (_d = (_c = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _c === void 0 ? void 0 : _c.lastMileDelivery) === null || _d === void 0 ? void 0 : _d.platform });
60
- }
61
- performance.mark(`start:${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`);
62
- try {
63
- await integration_sellercraft_1.SellercraftAPI.initiateOrderShipment(sellercraft, Object.assign(Object.assign({}, orderInformation), { context: { state: { domain: null, user: null } } }));
64
- await tx
65
- .getRepository(sales_base_1.OrderPackage)
66
- .update({ id: orderPackage.id }, { marketRtsCallSuccess: new Date() });
67
- performance.mark(`end:${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`);
68
- }
69
- catch (error) {
70
- performance.mark(`end:${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`);
71
- env_1.logger.error(`sellercraftInitiateShipment[InitiateShipment][Order Package ID: ${orderPackage.id}]: ${error}`);
72
- await (0, typeorm_1.getRepository)(sales_base_1.OrderPackage)
73
- .createQueryBuilder()
74
- .update(sales_base_1.OrderPackage)
75
- .set({ marketRtsCallRetry: () => `coalesce("market_rts_call_retry", 0) + 1` })
76
- .where('id = :id', { id: orderPackage.id })
77
- .execute();
78
- continue;
79
- }
80
- finally {
81
- let perf = performance.measure(`sellercraftInitiateShipment: ${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`, `start:${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`, `end:${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`);
82
- console.info(perf.toJSON());
83
- }
27
+ await queryRunner.connect();
28
+ connected = true;
29
+ const lockResult = await queryRunner.query(`SELECT pg_try_advisory_lock(hashtextextended($1, 0)) AS acquired`, [ADVISORY_LOCK_KEY]);
30
+ if (!((_a = lockResult === null || lockResult === void 0 ? void 0 : lockResult[0]) === null || _a === void 0 ? void 0 : _a.acquired)) {
31
+ env_1.logger.info(`sellercraftInitiateShipment: another instance is running, skipping`);
32
+ return;
33
+ }
34
+ try {
35
+ const manager = queryRunner.manager;
36
+ const orderPackagesWithoutRTS = await manager
37
+ .createQueryBuilder(sales_base_1.OrderPackage, 'opk')
38
+ .innerJoinAndSelect('opk.releaseGood', 'rg')
39
+ .innerJoinAndSelect('opk.domain', 'domain')
40
+ .innerJoinAndSelect('opk.bizplace', 'bizplace')
41
+ .innerJoinAndSelect('bizplace.domain', 'bdomain')
42
+ .leftJoinAndSelect('opk.creator', 'creator')
43
+ .leftJoinAndSelect('rg.lastMileDelivery', 'lmd')
44
+ .where(`rg.source = :source`, { source: auth_base_1.ApplicationType.SELLERCRAFT })
45
+ .andWhere(`rg.type = :rgType`, { rgType: 'b2c' })
46
+ .andWhere(`rg.status = :status`, { status: sales_base_1.ORDER_STATUS.DONE })
47
+ .andWhere(`opk.market_rts_call_success ISNULL`)
48
+ .andWhere(`COALESCE(opk.market_rts_call_retry, 0) <= :maxRTSRetry`, { maxRTSRetry })
49
+ .orderBy(`opk.created_at`)
50
+ .getMany();
51
+ if ((orderPackagesWithoutRTS === null || orderPackagesWithoutRTS === void 0 ? void 0 : orderPackagesWithoutRTS.length) > 0) {
52
+ for (let i = 0; i < orderPackagesWithoutRTS.length; i++) {
53
+ const orderPackage = orderPackagesWithoutRTS[i];
54
+ const releaseGood = orderPackage.releaseGood;
55
+ const sellercraft = await manager.findOne(integration_sellercraft_1.Sellercraft, {
56
+ where: { domain: { id: orderPackage.bizplace.domain.id }, status: 'ACTIVE' }
57
+ });
58
+ if (!sellercraft) {
59
+ continue;
60
+ }
61
+ let sellercraftSetting = sellercraft.sellercraftSetting;
62
+ let disableInitiateOrderShipment = (sellercraftSetting === null || sellercraftSetting === void 0 ? void 0 : sellercraftSetting.disableInitiateOrderShipment) &&
63
+ (sellercraftSetting === null || sellercraftSetting === void 0 ? void 0 : sellercraftSetting.disableInitiateOrderShipment) == 1
64
+ ? true
65
+ : false;
66
+ if (disableInitiateOrderShipment === true ||
67
+ (releaseGood.lmdOption == true && (orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.trackingNo) == null)) {
68
+ continue;
69
+ }
70
+ let orderInformation = {
71
+ accountId: sellercraft.accountId,
72
+ orderId: releaseGood.refNo2,
73
+ packageId: orderPackage.packageId
74
+ };
75
+ if ((_b = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _b === void 0 ? void 0 : _b.lmdOption) {
76
+ orderInformation = Object.assign(Object.assign({}, orderInformation), { awb: orderPackage.airwayBill, trackingNo: orderPackage.trackingNo, lmdOption: (_c = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _c === void 0 ? void 0 : _c.lmdOption, shipperName: (_e = (_d = orderPackage === null || orderPackage === void 0 ? void 0 : orderPackage.releaseGood) === null || _d === void 0 ? void 0 : _d.lastMileDelivery) === null || _e === void 0 ? void 0 : _e.platform });
77
+ }
78
+ performance.mark(`start:${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`);
79
+ try {
80
+ await integration_sellercraft_1.SellercraftAPI.initiateOrderShipment(sellercraft, Object.assign(Object.assign({}, orderInformation), { context: { state: { domain: null, user: null } } }));
81
+ // Auto-commit single-statement UPDATE — row lock held only for this UPDATE,
82
+ // not across the API call above.
83
+ await manager.update(sales_base_1.OrderPackage, { id: orderPackage.id }, { marketRtsCallSuccess: new Date() });
84
+ performance.mark(`end:${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`);
85
+ }
86
+ catch (error) {
87
+ performance.mark(`end:${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`);
88
+ env_1.logger.error(`sellercraftInitiateShipment[InitiateShipment][Order Package ID: ${orderPackage.id}]: ${error}`);
89
+ await manager
90
+ .createQueryBuilder()
91
+ .update(sales_base_1.OrderPackage)
92
+ .set({ marketRtsCallRetry: () => `coalesce("market_rts_call_retry", 0) + 1` })
93
+ .where('id = :id', { id: orderPackage.id })
94
+ .execute();
95
+ continue;
96
+ }
97
+ finally {
98
+ let perf = performance.measure(`sellercraftInitiateShipment: ${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`, `start:${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`, `end:${orderPackage.releaseGood.refNo2} - ${orderPackage.packageId}`);
99
+ console.info(perf.toJSON());
84
100
  }
85
101
  }
86
102
  }
87
- catch (e) {
88
- env_1.logger.error(`sellercraftInitiateShipment[InitiateShipment]: ${e}`);
103
+ }
104
+ catch (e) {
105
+ env_1.logger.error(`sellercraftInitiateShipment[InitiateShipment]: ${e}`);
106
+ }
107
+ finally {
108
+ try {
109
+ await queryRunner.query(`SELECT pg_advisory_unlock(hashtextextended($1, 0))`, [ADVISORY_LOCK_KEY]);
110
+ }
111
+ catch (releaseErr) {
112
+ env_1.logger.error(`sellercraftInitiateShipment[AdvisoryUnlock]: ${releaseErr}`);
89
113
  }
90
- });
114
+ }
91
115
  }
92
116
  catch (e) {
93
117
  env_1.logger.error(`sellercraftInitiateShipment[MainError]: ${e}`);
94
118
  }
119
+ finally {
120
+ if (connected) {
121
+ try {
122
+ await queryRunner.query(`SELECT pg_advisory_unlock_all()`);
123
+ }
124
+ catch (unlockAllErr) {
125
+ env_1.logger.error(`sellercraftInitiateShipment[AdvisoryUnlockAll]: ${unlockAllErr}`);
126
+ }
127
+ }
128
+ await queryRunner.release();
129
+ }
95
130
  }
96
131
  };
97
132
  //# sourceMappingURL=sellercraft-initiate-shipment.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sellercraft-initiate-shipment.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/synchronization/sellercraft-initiate-shipment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sellercraft-initiate-shipment.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/synchronization/sellercraft-initiate-shipment.ts"],"names":[],"mappings":"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"}
@@ -20,14 +20,14 @@ exports.Mutation = `
20
20
  syncAllProductsToSellercraft: Boolean @transaction
21
21
  syncAllProductsToPowrup: Boolean @transaction
22
22
  sellercraftPackMarketplaceOrder: Boolean @transaction
23
- sellercraftInitiateShipment: Boolean @transaction
24
23
  powrupPackOrder: Boolean @transaction
25
24
  # Intentionally NOT @transaction — these resolvers manage their own QueryRunner
26
- # to avoid holding row locks on order_packages across external Powrup API calls.
27
- # See powrup-get-airway-bill.ts and powrup-get-tracking-no.ts for the rationale.
25
+ # to avoid holding row locks on order_packages across external API calls.
26
+ # See the resolver files for the rationale.
28
27
  powrupGetTrackingNo: Boolean
29
28
  powrupGetAirwayBill: Boolean
30
- powrupInitiateShipment: Boolean @transaction
29
+ powrupInitiateShipment: Boolean
30
+ sellercraftInitiateShipment: Boolean
31
31
  getLmdAwb: Boolean @transaction
32
32
  createDatShipments: Boolean @transaction
33
33
  autoUpdateAllMarketplaceProductVariationQuantity(companyDomainId: String, warehouseId: String): Boolean @transaction
@@ -689,7 +689,7 @@ async function massageOrderItems(releaseGood, inputOrderProducts, context) {
689
689
  inputOrderProducts = await inputOrderProducts.reduce(async (accPromise, itm, idx) => {
690
690
  const acc = await accPromise;
691
691
  let { sku, refCode } = itm.product;
692
- let { packingType, packingSize, batchId, releaseQty, sellingPrice, paidAmount, uom, refItemId, warehouseCode } = itm;
692
+ let { packingType, packingSize, batchId, releaseQty, sellingPrice, paidAmount, uom, refItemId, warehouseCode, remark } = itm;
693
693
  if (!sku && !refCode) {
694
694
  throw new error_util_1.ApiError('E01', 'sku or refCode not found');
695
695
  }
@@ -719,7 +719,8 @@ async function massageOrderItems(releaseGood, inputOrderProducts, context) {
719
719
  uom: uom,
720
720
  batchId: (batchId === null || batchId === void 0 ? void 0 : batchId.trim()) || '',
721
721
  refItemId: refItemId !== null && refItemId !== void 0 ? refItemId : '',
722
- warehouseCode: normalizedWarehouseCode
722
+ warehouseCode: normalizedWarehouseCode,
723
+ remark: remark || null
723
724
  });
724
725
  }
725
726
  return acc;