Skip to content

Commit 504489c

Browse files
fix: try to fix order details randomly returning 404
1 parent 4fab9e1 commit 504489c

File tree

2 files changed

+9
-75
lines changed

2 files changed

+9
-75
lines changed

apps/api-harmonization/src/blocks/order-details/order-details.mapper.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { OrderDetailsBlock } from './order-details.model';
99

1010
export const mapOrderDetails = (
1111
cms: CMS.Model.OrderDetailsBlock.OrderDetailsBlock,
12-
order: Orders.Model.Order & { totalItems: number },
12+
order: Orders.Model.Order,
1313
locale: string,
1414
timezone: string,
1515
defaultProductUnit: string,
@@ -37,7 +37,7 @@ export const mapOrderDetails = (
3737
title: cms.totalValue.title,
3838
icon: cms.totalValue.icon,
3939
label: checkNegativeValue(order.total).value.toString(),
40-
description: cms.totalValue.message?.replace(/{value}/g, order.totalItems.toString()),
40+
description: cms.totalValue.message?.replace(/{value}/g, order.items.length.toString()),
4141
value: order.total,
4242
},
4343
createdAt: {
@@ -90,7 +90,7 @@ export const mapOrderDetails = (
9090
title: cms.productsTitle,
9191
products: {
9292
data: mapOrderItems(order.items, cms.fieldMapping, defaultProductUnit),
93-
total: order.totalItems,
93+
total: order.items.length,
9494
},
9595
table: cms.table,
9696
pagination: cms.pagination,
Lines changed: 6 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import { Injectable, NotFoundException } from '@nestjs/common';
22
import { ConfigService } from '@nestjs/config';
3-
import { Observable, forkJoin, map, of, switchMap } from 'rxjs';
4-
5-
import { Models } from '@o2s/framework/modules';
3+
import { Observable, forkJoin, map } from 'rxjs';
64

75
import { AppHeaders } from '@o2s/api-harmonization/utils/headers';
86

@@ -34,82 +32,18 @@ export class OrderDetailsService {
3432
const order = this.orderService.getOrder({ ...params }, headers['authorization']);
3533

3634
return forkJoin([cms, order]).pipe(
37-
switchMap(([cms, order]) => {
35+
map(([cms, order]) => {
3836
if (!order) {
3937
throw new NotFoundException();
4038
}
41-
42-
if (!order.items || order.items.length === 0) {
43-
return of({ cms, order });
44-
}
45-
46-
const productRequests = order.items.map((item) => {
47-
if (item.product?.id) {
48-
return of(item);
49-
}
50-
51-
return this.productService
52-
.getProduct({
53-
id: item.productId,
54-
locale: headers['x-locale'],
55-
})
56-
.pipe(
57-
map((product) => ({
58-
...item,
59-
product,
60-
})),
61-
);
62-
});
63-
64-
return forkJoin(productRequests).pipe(
65-
map((updatedItems) => {
66-
let filteredItems = updatedItems;
67-
const { offset = 0, limit = 5, sort = 'name_ASC' } = query;
68-
69-
if (sort) {
70-
const [field, order] = sort.split('_');
71-
const isAscending = order === 'ASC';
72-
73-
filteredItems = filteredItems.sort((a, b) => {
74-
const aValue = a[field as keyof Orders.Model.OrderItem];
75-
const bValue = b[field as keyof Orders.Model.OrderItem];
76-
77-
if (field === 'discountTotal' || field === 'total' || field === 'price') {
78-
if (!aValue || !bValue) return 0;
79-
80-
const aValueNumber = (aValue as Models.Price.Price).value;
81-
const bValueNumber = (bValue as Models.Price.Price).value;
82-
return isAscending ? aValueNumber - bValueNumber : bValueNumber - aValueNumber;
83-
} else if (field === 'name' || field === 'sku') {
84-
const aField = a.product?.[field] ?? '';
85-
const bField = b.product?.[field] ?? '';
86-
return isAscending ? aField.localeCompare(bField) : bField.localeCompare(aField);
87-
} else if (typeof aValue === 'string' && typeof bValue === 'string') {
88-
return isAscending ? aValue.localeCompare(bValue) : bValue.localeCompare(aValue);
89-
} else if (typeof aValue === 'number' && typeof bValue === 'number') {
90-
return isAscending ? aValue - bValue : bValue - aValue;
91-
}
92-
return 0;
93-
});
94-
}
95-
return {
96-
...order,
97-
items: filteredItems.slice(Number(offset), Number(offset) + Number(limit)),
98-
totalItems: updatedItems.length,
99-
};
100-
}),
101-
map((updatedOrder) => ({ cms, order: updatedOrder })),
102-
);
103-
}),
104-
map(({ cms, order }) =>
105-
mapOrderDetails(
39+
return mapOrderDetails(
10640
cms,
107-
order as Orders.Model.Order & { totalItems: number },
41+
order,
10842
headers['x-locale'],
10943
headers['x-client-timezone'] || '',
11044
this.defaultProductUnit,
111-
),
112-
),
45+
);
46+
}),
11347
);
11448
}
11549
}

0 commit comments

Comments
 (0)