order refactored
This commit is contained in:
@@ -11,7 +11,6 @@ import { CartRepository } from '../repositories/cart.repository';
|
||||
import { CartValidationService } from './cart-validation.service';
|
||||
import { CartCalculationService } from './cart-calculation.service';
|
||||
import { CartItemService } from './cart-item.service';
|
||||
import { SetCarDeliveryDto } from '../dto/set-car-delivery.dto';
|
||||
import { CartMessage } from 'src/common/enums/message.enum';
|
||||
|
||||
@Injectable()
|
||||
@@ -42,34 +41,12 @@ export class CartService {
|
||||
|
||||
// Handle each delivery method with its specific requirements
|
||||
switch (deliveryMethod.method) {
|
||||
case DeliveryMethodEnum.DineIn:
|
||||
// DineIn requires table number and clears incompatible fields
|
||||
if (!tableNumber) {
|
||||
throw new BadRequestException(CartMessage.TABLE_NUMBER_REQUIRED);
|
||||
}
|
||||
this.clearFieldsIncompatibleWithDeliveryMethod(cart, DeliveryMethodEnum.DineIn);
|
||||
cart.tableNumber = tableNumber;
|
||||
break;
|
||||
|
||||
case DeliveryMethodEnum.CustomerPickup:
|
||||
// CustomerPickup just clears incompatible fields
|
||||
this.clearFieldsIncompatibleWithDeliveryMethod(cart, DeliveryMethodEnum.CustomerPickup);
|
||||
break;
|
||||
|
||||
case DeliveryMethodEnum.DeliveryCar:
|
||||
// DeliveryCar requires carAddress and clears incompatible fields
|
||||
if (!carAddress) {
|
||||
throw new BadRequestException(CartMessage.CAR_ADDRESS_REQUIRED);
|
||||
}
|
||||
this.clearFieldsIncompatibleWithDeliveryMethod(cart, DeliveryMethodEnum.DeliveryCar);
|
||||
const user = await this.validationService.getUserOrFail(userId);
|
||||
cart.carAddress = {
|
||||
carModel: carAddress.carModel,
|
||||
carColor: carAddress.carColor,
|
||||
plateNumber: carAddress.plateNumber,
|
||||
phone: user.phone,
|
||||
};
|
||||
break;
|
||||
|
||||
case DeliveryMethodEnum.DeliveryCourier:
|
||||
// DeliveryCourier requires addressId and clears incompatible fields
|
||||
@@ -364,61 +341,6 @@ export class CartService {
|
||||
return this.saveTouchedCart(cart);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set table number for cart
|
||||
*/
|
||||
async setTableNumber(userId: string, restaurantId: string, tableNumber: string): Promise<Cart> {
|
||||
const cart = await this.findOneOrFail(userId, restaurantId);
|
||||
|
||||
const deliveryMethodId = this.validationService.requireDeliveryMethodId(
|
||||
cart,
|
||||
'Delivery method must be set before setting table number',
|
||||
);
|
||||
const deliveryMethod = await this.validationService.getDeliveryMethodForRestaurantOrFail(
|
||||
restaurantId,
|
||||
deliveryMethodId,
|
||||
);
|
||||
this.validationService.assertDeliveryMethod(
|
||||
deliveryMethod.method,
|
||||
DeliveryMethodEnum.DineIn,
|
||||
'Delivery method must be DineIn',
|
||||
);
|
||||
|
||||
this.clearFieldsIncompatibleWithDeliveryMethod(cart, DeliveryMethodEnum.DineIn);
|
||||
cart.tableNumber = tableNumber;
|
||||
return this.saveTouchedCart(cart);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set car delivery for cart
|
||||
*/
|
||||
async setCarDelivery(userId: string, restaurantId: string, setCarDeliveryDto: SetCarDeliveryDto): Promise<Cart> {
|
||||
const cart = await this.findOneOrFail(userId, restaurantId);
|
||||
|
||||
const deliveryMethodId = this.validationService.requireDeliveryMethodId(
|
||||
cart,
|
||||
'Delivery method must be set before setting car delivery',
|
||||
);
|
||||
const deliveryMethod = await this.validationService.getDeliveryMethodForRestaurantOrFail(
|
||||
restaurantId,
|
||||
deliveryMethodId,
|
||||
);
|
||||
this.validationService.assertDeliveryMethod(
|
||||
deliveryMethod.method,
|
||||
DeliveryMethodEnum.DeliveryCar,
|
||||
'Delivery method must be DeliveryCar',
|
||||
);
|
||||
const user = await this.validationService.getUserOrFail(userId);
|
||||
|
||||
this.clearFieldsIncompatibleWithDeliveryMethod(cart, DeliveryMethodEnum.DeliveryCar);
|
||||
cart.carAddress = {
|
||||
carModel: setCarDeliveryDto.carModel,
|
||||
carColor: setCarDeliveryDto.carColor,
|
||||
plateNumber: setCarDeliveryDto.plateNumber,
|
||||
phone: user.phone,
|
||||
};
|
||||
return this.saveTouchedCart(cart);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear cart from cache
|
||||
@@ -431,30 +353,20 @@ export class CartService {
|
||||
* Clears cart fields that are not applicable for a given delivery method.
|
||||
*/
|
||||
private clearFieldsIncompatibleWithDeliveryMethod(cart: Cart, method: DeliveryMethodEnum): void {
|
||||
if (method === DeliveryMethodEnum.DineIn) {
|
||||
cart.userAddress = null;
|
||||
cart.carAddress = null;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (method === DeliveryMethodEnum.CustomerPickup) {
|
||||
cart.userAddress = null;
|
||||
cart.carAddress = null;
|
||||
cart.tableNumber = undefined;
|
||||
return;
|
||||
}
|
||||
|
||||
if (method === DeliveryMethodEnum.DeliveryCourier) {
|
||||
cart.carAddress = null;
|
||||
cart.tableNumber = undefined;
|
||||
return;
|
||||
}
|
||||
|
||||
if (method === DeliveryMethodEnum.DeliveryCar) {
|
||||
cart.userAddress = null;
|
||||
cart.tableNumber = undefined;
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user