ordder init
This commit is contained in:
@@ -20,6 +20,7 @@ import { CartModule } from './modules/cart/cart.module';
|
|||||||
import { RolesModule } from './modules/roles/roles.module';
|
import { RolesModule } from './modules/roles/roles.module';
|
||||||
import { PaymentsModule } from './modules/payments/payments.module';
|
import { PaymentsModule } from './modules/payments/payments.module';
|
||||||
import { ShipmentsModule } from './modules/shipments/shipments.module';
|
import { ShipmentsModule } from './modules/shipments/shipments.module';
|
||||||
|
import { OrdersModule } from './modules/orders/orders.module';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
@@ -53,6 +54,7 @@ import { ShipmentsModule } from './modules/shipments/shipments.module';
|
|||||||
RolesModule,
|
RolesModule,
|
||||||
PaymentsModule,
|
PaymentsModule,
|
||||||
ShipmentsModule,
|
ShipmentsModule,
|
||||||
|
OrdersModule,
|
||||||
],
|
],
|
||||||
controllers: [],
|
controllers: [],
|
||||||
providers: [],
|
providers: [],
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
export class CreateOrderDto {}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
import { PartialType } from '@nestjs/swagger';
|
||||||
|
import { CreateOrderDto } from './create-order.dto';
|
||||||
|
|
||||||
|
export class UpdateOrderDto extends PartialType(CreateOrderDto) {}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
import { Entity, ManyToOne, Property } from '@mikro-orm/core';
|
||||||
|
import { BaseEntity } from '../../../common/entities/base.entity';
|
||||||
|
import { Order } from './order.entity';
|
||||||
|
import { Food } from '../../foods/entities/food.entity';
|
||||||
|
|
||||||
|
@Entity({ tableName: 'order_items' })
|
||||||
|
export class OrderItem extends BaseEntity {
|
||||||
|
@ManyToOne(() => Order)
|
||||||
|
order!: Order;
|
||||||
|
|
||||||
|
@ManyToOne(() => Food)
|
||||||
|
food!: Food;
|
||||||
|
|
||||||
|
@Property({ type: 'int' })
|
||||||
|
quantity!: number;
|
||||||
|
|
||||||
|
@Property({ type: 'decimal', precision: 10, scale: 0 })
|
||||||
|
unitPrice!: number;
|
||||||
|
|
||||||
|
@Property({ type: 'decimal', precision: 10, scale: 0, default: 0 })
|
||||||
|
discount: number = 0;
|
||||||
|
|
||||||
|
@Property({ type: 'decimal', precision: 10, scale: 0 })
|
||||||
|
totalPrice!: number;
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
import { Entity, ManyToOne, OneToMany, Property, Collection, Cascade, Enum } from '@mikro-orm/core';
|
||||||
|
import { BaseEntity } from '../../../common/entities/base.entity';
|
||||||
|
import { PaymentStatus } from '../../payments/interface/payment-status';
|
||||||
|
import { OrderStatus } from '../interface/order-status';
|
||||||
|
import { User } from '../../users/entities/user.entity';
|
||||||
|
import { Restaurant } from '../../restaurants/entities/restaurant.entity';
|
||||||
|
import { UserAddress } from '../../users/entities/user-address.entity';
|
||||||
|
import { RestaurantPaymentMethod } from '../../payments/entities/restaurant-payment-method.entity';
|
||||||
|
import { OrderItem } from './order-item.entity';
|
||||||
|
|
||||||
|
@Entity({ tableName: 'orders' })
|
||||||
|
export class Order extends BaseEntity {
|
||||||
|
@ManyToOne(() => User)
|
||||||
|
user!: User;
|
||||||
|
|
||||||
|
@ManyToOne(() => Restaurant)
|
||||||
|
restaurant!: Restaurant;
|
||||||
|
|
||||||
|
@OneToMany(() => OrderItem, item => item.order, {
|
||||||
|
cascade: [Cascade.ALL],
|
||||||
|
orphanRemoval: true,
|
||||||
|
})
|
||||||
|
items = new Collection<OrderItem>(this);
|
||||||
|
|
||||||
|
@ManyToOne(() => UserAddress, { nullable: true })
|
||||||
|
address?: UserAddress;
|
||||||
|
|
||||||
|
@ManyToOne(() => RestaurantPaymentMethod, { nullable: true })
|
||||||
|
paymentMethod?: RestaurantPaymentMethod;
|
||||||
|
|
||||||
|
@Property({ type: 'decimal', precision: 10, scale: 0, default: 0 })
|
||||||
|
couponDiscount: number = 0;
|
||||||
|
|
||||||
|
@Property({ type: 'decimal', precision: 10, scale: 0, default: 0 })
|
||||||
|
itemsDiscount: number = 0;
|
||||||
|
|
||||||
|
@Property({ type: 'decimal', precision: 10, scale: 0, default: 0 })
|
||||||
|
totalDiscount: number = 0;
|
||||||
|
|
||||||
|
@Property({ type: 'decimal', precision: 10, scale: 0 })
|
||||||
|
subTotal!: number;
|
||||||
|
|
||||||
|
@Property({ type: 'decimal', precision: 10, scale: 0, default: 0 })
|
||||||
|
tax: number = 0;
|
||||||
|
|
||||||
|
@Property({ type: 'decimal', precision: 10, scale: 0, default: 0 })
|
||||||
|
deliveryFee: number = 0;
|
||||||
|
|
||||||
|
@Property({ type: 'decimal', precision: 10, scale: 0 })
|
||||||
|
total!: number;
|
||||||
|
|
||||||
|
@Property({ type: 'int', default: 0 })
|
||||||
|
totalItems: number = 0;
|
||||||
|
|
||||||
|
@Enum(() => OrderStatus)
|
||||||
|
status!: OrderStatus;
|
||||||
|
|
||||||
|
@Enum(() => PaymentStatus)
|
||||||
|
paymentStatus!: PaymentStatus;
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
export enum OrderStatus {
|
||||||
|
Pending = 'pending',
|
||||||
|
Confirmed = 'confirmed',
|
||||||
|
Delivered = 'delivered',
|
||||||
|
Cancelled = 'cancelled',
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
|
||||||
|
import { OrdersService } from './orders.service';
|
||||||
|
import { CreateOrderDto } from './dto/create-order.dto';
|
||||||
|
import { UpdateOrderDto } from './dto/update-order.dto';
|
||||||
|
|
||||||
|
@Controller('orders')
|
||||||
|
export class OrdersController {
|
||||||
|
constructor(private readonly ordersService: OrdersService) {}
|
||||||
|
|
||||||
|
@Post()
|
||||||
|
create(@Body() createOrderDto: CreateOrderDto) {
|
||||||
|
return this.ordersService.create(createOrderDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get()
|
||||||
|
findAll() {
|
||||||
|
return this.ordersService.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get(':id')
|
||||||
|
findOne(@Param('id') id: string) {
|
||||||
|
return this.ordersService.findOne(+id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Patch(':id')
|
||||||
|
update(@Param('id') id: string, @Body() updateOrderDto: UpdateOrderDto) {
|
||||||
|
return this.ordersService.update(+id, updateOrderDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Delete(':id')
|
||||||
|
remove(@Param('id') id: string) {
|
||||||
|
return this.ordersService.remove(+id);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
import { OrdersService } from './orders.service';
|
||||||
|
import { OrdersController } from './orders.controller';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
controllers: [OrdersController],
|
||||||
|
providers: [OrdersService],
|
||||||
|
})
|
||||||
|
export class OrdersModule {}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { CreateOrderDto } from './dto/create-order.dto';
|
||||||
|
import { UpdateOrderDto } from './dto/update-order.dto';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class OrdersService {
|
||||||
|
create(createOrderDto: CreateOrderDto) {
|
||||||
|
return 'This action adds a new order';
|
||||||
|
}
|
||||||
|
|
||||||
|
findAll() {
|
||||||
|
return `This action returns all orders`;
|
||||||
|
}
|
||||||
|
|
||||||
|
findOne(id: number) {
|
||||||
|
return `This action returns a #${id} order`;
|
||||||
|
}
|
||||||
|
|
||||||
|
update(id: number, updateOrderDto: UpdateOrderDto) {
|
||||||
|
return `This action updates a #${id} order`;
|
||||||
|
}
|
||||||
|
|
||||||
|
remove(id: number) {
|
||||||
|
return `This action removes a #${id} order`;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
export enum PaymentStatus {
|
||||||
|
Pending = 'pending',
|
||||||
|
Paid = 'paid',
|
||||||
|
Failed = 'failed',
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user