ordder init

This commit is contained in:
2025-11-30 23:36:23 +03:30
parent dc6a528150
commit e5ad2e3b3a
10 changed files with 173 additions and 0 deletions
+2
View File
@@ -20,6 +20,7 @@ import { CartModule } from './modules/cart/cart.module';
import { RolesModule } from './modules/roles/roles.module';
import { PaymentsModule } from './modules/payments/payments.module';
import { ShipmentsModule } from './modules/shipments/shipments.module';
import { OrdersModule } from './modules/orders/orders.module';
@Module({
imports: [
@@ -53,6 +54,7 @@ import { ShipmentsModule } from './modules/shipments/shipments.module';
RolesModule,
PaymentsModule,
ShipmentsModule,
OrdersModule,
],
controllers: [],
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',
}
+34
View File
@@ -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);
}
}
+9
View File
@@ -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 {}
+26
View File
@@ -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',
}