From 5548e2f43e7ad23b196d7e37149d0a48df1d61e1 Mon Sep 17 00:00:00 2001 From: Gabsousa2203 Date: Thu, 16 Jan 2025 13:13:31 -0400 Subject: [PATCH 1/5] refactor: :recycle: streamline order retrieval logic in ODM repository for improved state handling --- ...-all-orders-by-user-application.service.ts | 120 +----------------- .../odm-order-query-repository.ts | 38 +++++- 2 files changed, 33 insertions(+), 125 deletions(-) diff --git a/src/order/application/service/query/find-all-orders-by-user-application.service.ts b/src/order/application/service/query/find-all-orders-by-user-application.service.ts index b5ac26c4..12a6d2b3 100644 --- a/src/order/application/service/query/find-all-orders-by-user-application.service.ts +++ b/src/order/application/service/query/find-all-orders-by-user-application.service.ts @@ -38,125 +38,7 @@ export class FindAllOdersByUserApplicationService extends IApplicationService 0) products.push({ - // products: order.Products, orderid: order.getId().orderId - // }); - // if (order.Bundles && order.Bundles.length > 0) bundles.push({ - // bundles: order.Bundles, - // orderid: order.getId().orderId - // }); - // }; - - // let domainProducts: productsOrderResponse[]=[]; - // let domainBundles: bundlesOrderResponse[]=[]; - - // if(products){ - // for (const product of products){ - // for (const prod of product.products){ - // let domain=await this.productRepository.findProductById(ProductID.create(prod.ProductDetailId.productDetailId)) - - // if(!domain.isSuccess()) - // return Result.fail(new ErrorCreatingOrderProductNotFoundApplicationException()) - - // domainProducts.push({ - // id: domain.getValue.getId().Value, - // name: domain.getValue.ProductName.Value, - // description: domain.getValue.ProductDescription.Value, - // quantity: prod.Quantity.Quantity, - // price: Number(prod.Price.Price), - // images: domain.getValue.ProductImages.map((image)=>image.Value), - // currency: domain.getValue.ProductPrice.Currency, - // orderid: product.orderid - // }); - // } - // }; - // }; - - // if(bundles){ - // for (const bundle of bundles){ - // for (const bund of bundle.bundles){ - // let domain=await this.bundleRepository.findBundleById(BundleId.create(bund.BundleDetailId.BundleDetailId)) - - // if(!domain.isSuccess()) return Result.fail(new ErrorCreatingOrderBundleNotFoundApplicationException()) - - - // domainBundles.push({ - // id: domain.getValue.getId().Value, - // name: domain.getValue.BundleName.Value, - // description: domain.getValue.BundleDescription.Value, - // quantity: bund.Quantity.Quantity, - // price: Number(bund.Price.Price), - // images: domain.getValue.BundleImages.map((image)=>image.Value), - // currency: domain.getValue.BundlePrice.Currency, - // orderid: bundle.orderid - // }); - // } - // }; - // }; - - // console.log("domainProducts") - - // let courierResponse = await this.ormCourierQueryRepository.findAllCouriers(); - - // orders.forEach( (order) => { - - // let associatedProducts: productsOrderResponse[]; - // let associatedBundles: bundlesOrderResponse[]; - // let associatedCourier: courierOrderResponse; - - // if (domainProducts) associatedProducts = domainProducts.filter((product) => product.orderid === order.getId().orderId); - - // if (domainBundles) associatedBundles = domainBundles.filter((bundle) => bundle.orderid === order.getId().orderId); - - // if (order.OrderCourierId){ - // let courier = courierResponse.getValue.find( - // (courier) => courier.getId().courierId === order.OrderCourierId.OrderCourierId - // ); - - // associatedCourier = { - // courierName: courier.CourierName.courierName, - // courierImage: courier.CourierImage.Value, - // location: { - // lat: courier.CourierDirection.Latitude, - // long: courier.CourierDirection.Longitude - // } - // }; - // } - - // ordersDto.push({ - // orderId: order.getId().orderId, - // orderState: order.OrderState.orderState, - // orderCreatedDate: order.OrderCreatedDate.OrderCreatedDate, - // orderTimeCreated: new Date(order.OrderCreatedDate.OrderCreatedDate).toTimeString().split(' ')[0], - // totalAmount: order.TotalAmount.OrderAmount, - // orderReceivedDate: order.OrderReceivedDate? order.OrderReceivedDate.OrderReceivedDate : null, - // orderPayment: { - // paymetAmount: order.OrderPayment.PaymentAmount.Value, - // paymentCurrency: order.OrderPayment.PaymentCurrency.Value, - // payementMethod: order.OrderPayment.PaymentMethods.Value - // }, - // orderDirection: { - // lat: order.OrderDirection.Latitude, - // long: order.OrderDirection.Longitude - // }, - // products: associatedProducts, - // bundles: associatedBundles, - // orderReport: order.OrderReport ? { - // id: order.OrderReport.getId().OrderReportId, - // description: order.OrderReport.Description.Value, - // orderid: order.getId().orderId - // } : null, - // orderCourier: order.OrderCourierId ? associatedCourier : null - // }); - // }); - + const ord = await Promise.all( orders.map(async order => { diff --git a/src/order/infraestructure/repositories/odm-repository/odm-order-query-repository.ts b/src/order/infraestructure/repositories/odm-repository/odm-order-query-repository.ts index d22ba54f..69c4ab34 100644 --- a/src/order/infraestructure/repositories/odm-repository/odm-order-query-repository.ts +++ b/src/order/infraestructure/repositories/odm-repository/odm-order-query-repository.ts @@ -201,9 +201,22 @@ export class OdmOrderQueryRepository implements IQueryOrderRepository { let orders: IOrderModel[] = []; - for (const odmOrder of odmOrders) { - let order = await this.transformToDataModel(odmOrder); - orders.push(order); + if (data.state){ + for(let odmOrder of odmOrders){ + if(data.state === "active" && (odmOrder.state == "ongoing" || + odmOrder.state == "waiting" || odmOrder.state == "delivering")) { + orders.push( await this.transformToDataModel(odmOrder)); + } + + if(data.state === "past" && (odmOrder.state === "cancelled" || + odmOrder.state === "delivered")) { + orders.push( await this.transformToDataModel(odmOrder)); + } + }; + } else { + let o = odmOrders.map(async (ormOrder) => await this.transformToDataModel(ormOrder)); + + orders = await Promise.all(o); } return Result.success(orders); @@ -225,9 +238,22 @@ export class OdmOrderQueryRepository implements IQueryOrderRepository { let orders: IOrderModel[] = []; - for (const odmOrder of odmOrders) { - let order = await this.transformToDataModel(odmOrder); - orders.push(order); + if (data.state){ + for(let odmOrder of odmOrders){ + if(data.state === "active" && (odmOrder.state == "ongoing" || + odmOrder.state == "waiting" || odmOrder.state == "delivering")) { + orders.push( await this.transformToDataModel(odmOrder)); + } + + if(data.state === "past" && (odmOrder.state === "cancelled" || + odmOrder.state === "delivered")) { + orders.push( await this.transformToDataModel(odmOrder)); + } + }; + } else { + let o = odmOrders.map(async (ormOrder) => await this.transformToDataModel(ormOrder)); + + orders = await Promise.all(o); } return Result.success(orders); From d6d6e35aec79355e4e7cb08745c340acbbc041d9 Mon Sep 17 00:00:00 2001 From: Gabsousa2203 Date: Thu, 16 Jan 2025 13:34:02 -0400 Subject: [PATCH 2/5] refactor: :recycle: enhance order state handling in ODM repository for improved data processing --- .../odm-order-query-repository.ts | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/order/infraestructure/repositories/odm-repository/odm-order-query-repository.ts b/src/order/infraestructure/repositories/odm-repository/odm-order-query-repository.ts index 69c4ab34..c8d430bf 100644 --- a/src/order/infraestructure/repositories/odm-repository/odm-order-query-repository.ts +++ b/src/order/infraestructure/repositories/odm-repository/odm-order-query-repository.ts @@ -203,19 +203,22 @@ export class OdmOrderQueryRepository implements IQueryOrderRepository { if (data.state){ for(let odmOrder of odmOrders){ - if(data.state === "active" && (odmOrder.state == "ongoing" || + if(data.state.toLowerCase() === "active" && (odmOrder.state == "ongoing" || odmOrder.state == "waiting" || odmOrder.state == "delivering")) { - orders.push( await this.transformToDataModel(odmOrder)); + let o = await this.transformToDataModel(odmOrder); + orders.push( o ); } - if(data.state === "past" && (odmOrder.state === "cancelled" || + if(data.state.toLowerCase() === "past" && (odmOrder.state === "cancelled" || odmOrder.state === "delivered")) { - orders.push( await this.transformToDataModel(odmOrder)); + let o = await this.transformToDataModel(odmOrder); + orders.push( o ); } }; - } else { + } + if (!data.state){ let o = odmOrders.map(async (ormOrder) => await this.transformToDataModel(ormOrder)); - + orders = await Promise.all(o); } @@ -240,19 +243,22 @@ export class OdmOrderQueryRepository implements IQueryOrderRepository { if (data.state){ for(let odmOrder of odmOrders){ - if(data.state === "active" && (odmOrder.state == "ongoing" || + if(data.state.toLowerCase() === "active" && (odmOrder.state == "ongoing" || odmOrder.state == "waiting" || odmOrder.state == "delivering")) { - orders.push( await this.transformToDataModel(odmOrder)); + let o = await this.transformToDataModel(odmOrder); + orders.push( o ); } - if(data.state === "past" && (odmOrder.state === "cancelled" || + if(data.state.toLowerCase() === "past" && (odmOrder.state === "cancelled" || odmOrder.state === "delivered")) { - orders.push( await this.transformToDataModel(odmOrder)); + let o = await this.transformToDataModel(odmOrder); + orders.push( o ); } }; - } else { + } + if (!data.state){ let o = odmOrders.map(async (ormOrder) => await this.transformToDataModel(ormOrder)); - + orders = await Promise.all(o); } From a77b9adcac8878165a47f876b313ae355097cb93 Mon Sep 17 00:00:00 2001 From: Gabsousa2203 Date: Thu, 16 Jan 2025 14:18:36 -0400 Subject: [PATCH 3/5] fix: :ambulance: Update account retrieval method to use user ID instead of account ID --- .../command/wallet/save-card-to-user-application.service.ts | 2 +- .../services/query/wallet/get-user-cards-application.service.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/user/application/services/command/wallet/save-card-to-user-application.service.ts b/src/user/application/services/command/wallet/save-card-to-user-application.service.ts index c85578c1..65085819 100644 --- a/src/user/application/services/command/wallet/save-card-to-user-application.service.ts +++ b/src/user/application/services/command/wallet/save-card-to-user-application.service.ts @@ -28,7 +28,7 @@ export class SaveCardToUserApplicationService extends IApplicationService Date: Thu, 16 Jan 2025 14:20:45 -0400 Subject: [PATCH 4/5] refactor: :recycle: update account retrieval method to use user ID for consistency in wallet services --- .../command/wallet/save-card-to-user-application.service.ts | 2 +- .../services/query/wallet/get-user-cards-application.service.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/user/application/services/command/wallet/save-card-to-user-application.service.ts b/src/user/application/services/command/wallet/save-card-to-user-application.service.ts index c85578c1..65085819 100644 --- a/src/user/application/services/command/wallet/save-card-to-user-application.service.ts +++ b/src/user/application/services/command/wallet/save-card-to-user-application.service.ts @@ -28,7 +28,7 @@ export class SaveCardToUserApplicationService extends IApplicationService Date: Thu, 16 Jan 2025 14:57:42 -0400 Subject: [PATCH 5/5] refactor: :building_construction: add exception for already reported orders to prevent duplicate reporting --- src/order/domain/aggregate/order.ts | 4 ++++ .../domain/exception/order-already-reported.exception.ts | 7 +++++++ 2 files changed, 11 insertions(+) create mode 100644 src/order/domain/exception/order-already-reported.exception.ts diff --git a/src/order/domain/aggregate/order.ts b/src/order/domain/aggregate/order.ts index 119dc185..b266a02d 100644 --- a/src/order/domain/aggregate/order.ts +++ b/src/order/domain/aggregate/order.ts @@ -19,6 +19,7 @@ import { BundleDetail } from "../entities/bundle-detail/bundle-detail-entity"; import { OrderCourierId } from "../value_objects/order-courier-id"; import { OrderCuponId } from "../value_objects/order-cupon-id"; import { OrderReported } from "../domain-events/order-reported"; +import { OrderAlreadyReportedException } from "../exception/order-already-reported.exception"; export class Order extends AggregateRoot{ @@ -208,6 +209,9 @@ export class Order extends AggregateRoot{ } addOrderReport(orderReport: OrderReport): void { + if (this.orderReport) + throw new OrderAlreadyReportedException(); + this.apply( OrderReported.create( this.getId(), diff --git a/src/order/domain/exception/order-already-reported.exception.ts b/src/order/domain/exception/order-already-reported.exception.ts new file mode 100644 index 00000000..18eb32a3 --- /dev/null +++ b/src/order/domain/exception/order-already-reported.exception.ts @@ -0,0 +1,7 @@ +import { DomainException } from "src/common/domain/domain-exception/domain-exception"; + +export class OrderAlreadyReportedException extends DomainException { + constructor() { + super('The order already has already been reported'); + } +} \ No newline at end of file