|
1 | 1 | import { Injectable, NotFoundException } from '@nestjs/common';
|
2 | 2 | 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'; |
6 | 4 |
|
7 | 5 | import { AppHeaders } from '@o2s/api-harmonization/utils/headers';
|
8 | 6 |
|
@@ -34,82 +32,18 @@ export class OrderDetailsService {
|
34 | 32 | const order = this.orderService.getOrder({ ...params }, headers['authorization']);
|
35 | 33 |
|
36 | 34 | return forkJoin([cms, order]).pipe(
|
37 |
| - switchMap(([cms, order]) => { |
| 35 | + map(([cms, order]) => { |
38 | 36 | if (!order) {
|
39 | 37 | throw new NotFoundException();
|
40 | 38 | }
|
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( |
106 | 40 | cms,
|
107 |
| - order as Orders.Model.Order & { totalItems: number }, |
| 41 | + order, |
108 | 42 | headers['x-locale'],
|
109 | 43 | headers['x-client-timezone'] || '',
|
110 | 44 | this.defaultProductUnit,
|
111 |
| - ), |
112 |
| - ), |
| 45 | + ); |
| 46 | + }), |
113 | 47 | );
|
114 | 48 | }
|
115 | 49 | }
|
0 commit comments