order
This commit is contained in:
@@ -7,6 +7,7 @@ import { Restaurant } from '../../restaurants/entities/restaurant.entity';
|
|||||||
import { UserAddress } from '../../users/entities/user-address.entity';
|
import { UserAddress } from '../../users/entities/user-address.entity';
|
||||||
import { PaymentMethod } from '../../payments/entities/payment-method.entity';
|
import { PaymentMethod } from '../../payments/entities/payment-method.entity';
|
||||||
import { OrderItem } from './order-item.entity';
|
import { OrderItem } from './order-item.entity';
|
||||||
|
import { Delivery } from '../../delivery/entities/delivery.entity';
|
||||||
|
|
||||||
@Entity({ tableName: 'orders' })
|
@Entity({ tableName: 'orders' })
|
||||||
export class Order extends BaseEntity {
|
export class Order extends BaseEntity {
|
||||||
@@ -16,6 +17,9 @@ export class Order extends BaseEntity {
|
|||||||
@ManyToOne(() => Restaurant)
|
@ManyToOne(() => Restaurant)
|
||||||
restaurant!: Restaurant;
|
restaurant!: Restaurant;
|
||||||
|
|
||||||
|
@ManyToOne(() => Delivery)
|
||||||
|
deliveryMethod!: Delivery;
|
||||||
|
|
||||||
@OneToMany(() => OrderItem, item => item.order, {
|
@OneToMany(() => OrderItem, item => item.order, {
|
||||||
cascade: [Cascade.ALL],
|
cascade: [Cascade.ALL],
|
||||||
orphanRemoval: true,
|
orphanRemoval: true,
|
||||||
|
|||||||
@@ -30,13 +30,14 @@ export class OrdersService {
|
|||||||
|
|
||||||
const { order } = await this.createOrder(userId, restaurantId, cart);
|
const { order } = await this.createOrder(userId, restaurantId, cart);
|
||||||
|
|
||||||
await this.cartService.clearCart(userId, restaurantId);
|
|
||||||
|
|
||||||
if (!order.paymentMethod) {
|
if (!order.paymentMethod) {
|
||||||
throw new BadRequestException('Payment method is required for checkout');
|
throw new BadRequestException('Payment method is required for checkout');
|
||||||
}
|
}
|
||||||
|
|
||||||
const { paymentUrl } = await this.paymentsService.initializePayment(order.paymentMethod.id, order.total, order.id);
|
const { paymentUrl } = await this.paymentsService.initializePayment(order.paymentMethod.id, order.total, order.id);
|
||||||
|
|
||||||
|
await this.cartService.clearCart(userId, restaurantId);
|
||||||
|
|
||||||
return { order, paymentUrl };
|
return { order, paymentUrl };
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,6 +49,7 @@ export class OrdersService {
|
|||||||
const order = em.create(Order, {
|
const order = em.create(Order, {
|
||||||
user: validationResult.user,
|
user: validationResult.user,
|
||||||
restaurant: validationResult.restaurant,
|
restaurant: validationResult.restaurant,
|
||||||
|
deliveryMethod: validationResult.delivery,
|
||||||
address: validationResult.address,
|
address: validationResult.address,
|
||||||
paymentMethod: validationResult.paymentMethod,
|
paymentMethod: validationResult.paymentMethod,
|
||||||
couponDiscount: cart.couponDiscount || 0,
|
couponDiscount: cart.couponDiscount || 0,
|
||||||
@@ -107,6 +109,7 @@ export class OrdersService {
|
|||||||
): Promise<{
|
): Promise<{
|
||||||
user: User;
|
user: User;
|
||||||
restaurant: Restaurant;
|
restaurant: Restaurant;
|
||||||
|
delivery: Delivery;
|
||||||
address: UserAddress | null;
|
address: UserAddress | null;
|
||||||
paymentMethod: PaymentMethod;
|
paymentMethod: PaymentMethod;
|
||||||
orderItemsData: Array<{ food: Food; quantity: number; unitPrice: number; discount: number }>;
|
orderItemsData: Array<{ food: Food; quantity: number; unitPrice: number; discount: number }>;
|
||||||
@@ -139,7 +142,8 @@ export class OrdersService {
|
|||||||
throw new NotFoundException('Restaurant not found');
|
throw new NotFoundException('Restaurant not found');
|
||||||
}
|
}
|
||||||
|
|
||||||
const delivery = await this.em.findOne(Delivery, { id: cart.deliveryMethodId });
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
||||||
|
const delivery = await this.em.findOne(Delivery, { id: cart.deliveryMethodId! });
|
||||||
if (!delivery) {
|
if (!delivery) {
|
||||||
throw new NotFoundException('Delivery not found');
|
throw new NotFoundException('Delivery not found');
|
||||||
}
|
}
|
||||||
@@ -157,10 +161,6 @@ export class OrdersService {
|
|||||||
if (address.user.id !== userId) {
|
if (address.user.id !== userId) {
|
||||||
throw new BadRequestException('Address does not belong to the current user');
|
throw new BadRequestException('Address does not belong to the current user');
|
||||||
}
|
}
|
||||||
// Verify address belongs to the user
|
|
||||||
if (address.user.id !== userId) {
|
|
||||||
throw new BadRequestException('Address does not belong to the current user');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const paymentMethod = await this.em.findOne(
|
const paymentMethod = await this.em.findOne(
|
||||||
@@ -217,6 +217,7 @@ export class OrdersService {
|
|||||||
return {
|
return {
|
||||||
user,
|
user,
|
||||||
restaurant,
|
restaurant,
|
||||||
|
delivery,
|
||||||
address,
|
address,
|
||||||
paymentMethod,
|
paymentMethod,
|
||||||
orderItemsData,
|
orderItemsData,
|
||||||
@@ -224,7 +225,11 @@ export class OrdersService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async findAll() {
|
async findAll() {
|
||||||
const orders = await this.em.find(Order, {}, { populate: ['user', 'restaurant', 'address', 'paymentMethod'] });
|
const orders = await this.em.find(
|
||||||
|
Order,
|
||||||
|
{},
|
||||||
|
{ populate: ['user', 'restaurant', 'deliveryMethod', 'address', 'paymentMethod'] },
|
||||||
|
);
|
||||||
if (!orders) {
|
if (!orders) {
|
||||||
throw new NotFoundException('No orders found');
|
throw new NotFoundException('No orders found');
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user