Skip to content

Commit 6d148a2

Browse files
Revert "fix: try to fix order details randomly returning 404"
This reverts commit 504489c.
1 parent 504489c commit 6d148a2

File tree

2 files changed

+75
-9
lines changed

2 files changed

+75
-9
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,
12+
order: Orders.Model.Order & { totalItems: number },
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.items.length.toString()),
40+
description: cms.totalValue.message?.replace(/{value}/g, order.totalItems.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.items.length,
93+
total: order.totalItems,
9494
},
9595
table: cms.table,
9696
pagination: cms.pagination,

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

Lines changed: 72 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { Injectable, NotFoundException } from '@nestjs/common';
22
import { ConfigService } from '@nestjs/config';
3-
import { Observable, forkJoin, map } from 'rxjs';
3+
import { Observable, forkJoin, map, of, switchMap } from 'rxjs';
4+
5+
import { Models } from '@o2s/framework/modules';
46

57
import { AppHeaders } from '@o2s/api-harmonization/utils/headers';
68

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

3436
return forkJoin([cms, order]).pipe(
35-
map(([cms, order]) => {
37+
switchMap(([cms, order]) => {
3638
if (!order) {
3739
throw new NotFoundException();
3840
}
39-
return mapOrderDetails(
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(
40106
cms,
41-
order,
107+
order as Orders.Model.Order & { totalItems: number },
42108
headers['x-locale'],
43109
headers['x-client-timezone'] || '',
44110
this.defaultProductUnit,
45-
);
46-
}),
111+
),
112+
),
47113
);
48114
}
49115
}

0 commit comments

Comments
 (0)