From d1c72b81dca651d98279e70175b1f413df582b7a Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Thu, 11 Dec 2025 12:20:05 +0330 Subject: [PATCH] delivery update --- .../delivery/dto/create-delivery.dto.ts | 23 ++++++++++++++++++- .../delivery/entities/delivery.entity.ts | 11 ++++++++- src/modules/delivery/interface/delivery.ts | 5 ++++ .../delivery/providers/delivery.service.ts | 3 +++ src/seeders/delivery-methods.seeder.ts | 5 +++- 5 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/modules/delivery/dto/create-delivery.dto.ts b/src/modules/delivery/dto/create-delivery.dto.ts index 20ba0ce..447798f 100644 --- a/src/modules/delivery/dto/create-delivery.dto.ts +++ b/src/modules/delivery/dto/create-delivery.dto.ts @@ -1,7 +1,7 @@ import { IsNumber, IsBoolean, IsOptional, IsString, Min, IsEnum } from 'class-validator'; import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; import { Type } from 'class-transformer'; -import { DeliveryMethodEnum } from '../interface/delivery'; +import { DeliveryFeeTypeEnum, DeliveryMethodEnum } from '../interface/delivery'; export class CreateDeliveryDto { @ApiProperty({ example: 'dineIn', description: 'Delivery method name', enum: DeliveryMethodEnum }) @@ -40,4 +40,25 @@ export class CreateDeliveryDto { @IsNumber() @Type(() => Number) order?: number; + + @ApiPropertyOptional({ example: 0, description: 'Kilometer number' }) + @IsOptional() + @IsNumber() + @Type(() => Number) + kilometerNumber?: number; + + @ApiPropertyOptional({ example: 0, description: 'Delivery fee for kilometer' }) + @IsOptional() + @IsNumber() + @Type(() => Number) + deliveryFeeForKilometer?: number; + + @ApiPropertyOptional({ + example: DeliveryFeeTypeEnum.FIXED, + description: 'Delivery fee type', + enum: DeliveryFeeTypeEnum, + }) + @IsOptional() + @IsEnum(DeliveryFeeTypeEnum) + deliveryFeeType!: DeliveryFeeTypeEnum; } diff --git a/src/modules/delivery/entities/delivery.entity.ts b/src/modules/delivery/entities/delivery.entity.ts index 924ca3e..01a38cd 100644 --- a/src/modules/delivery/entities/delivery.entity.ts +++ b/src/modules/delivery/entities/delivery.entity.ts @@ -1,7 +1,7 @@ import { Entity, Property, Enum, ManyToOne } from '@mikro-orm/core'; import { BaseEntity } from '../../../common/entities/base.entity'; import { Restaurant } from '../../restaurants/entities/restaurant.entity'; -import { DeliveryMethodEnum } from '../interface/delivery'; +import { DeliveryFeeTypeEnum, DeliveryMethodEnum } from '../interface/delivery'; @Entity({ tableName: 'deliveries' }) export class Delivery extends BaseEntity { @@ -17,6 +17,15 @@ export class Delivery extends BaseEntity { @Property({ type: 'decimal', precision: 10, scale: 0, default: 0 }) deliveryFee: number = 0; + @Enum(() => DeliveryFeeTypeEnum) + deliveryFeeType: DeliveryFeeTypeEnum = DeliveryFeeTypeEnum.FIXED; + + @Property({ type: 'decimal', precision: 10, scale: 0, default: 0 }) + kilometerNumber: number | null = null; + + @Property({ type: 'decimal', precision: 10, scale: 0, default: 0 }) + deliveryFeeForKilometer: number | null = null; + @Property({ type: 'decimal', precision: 10, scale: 0, default: 0 }) minOrderPrice: number = 0; diff --git a/src/modules/delivery/interface/delivery.ts b/src/modules/delivery/interface/delivery.ts index 0d334ee..c8b756d 100644 --- a/src/modules/delivery/interface/delivery.ts +++ b/src/modules/delivery/interface/delivery.ts @@ -4,3 +4,8 @@ export enum DeliveryMethodEnum { DeliveryCar = 'deliveryCar', DeliveryCourier = 'deliveryCourier', } + +export enum DeliveryFeeTypeEnum { + FIXED = 'fixed', + DISTANCE_BASED = 'distanceBased', +} diff --git a/src/modules/delivery/providers/delivery.service.ts b/src/modules/delivery/providers/delivery.service.ts index fbb47d5..48f11cd 100644 --- a/src/modules/delivery/providers/delivery.service.ts +++ b/src/modules/delivery/providers/delivery.service.ts @@ -40,6 +40,9 @@ export class DeliveryService { description: createDto.description, enabled: createDto.enabled ?? true, order: createDto.order ?? 0, + deliveryFeeType: createDto.deliveryFeeType, + kilometerNumber: createDto.kilometerNumber, + deliveryFeeForKilometer: createDto.deliveryFeeForKilometer ?? 0, }; const delivery = this.deliveryRepository.create(data); diff --git a/src/seeders/delivery-methods.seeder.ts b/src/seeders/delivery-methods.seeder.ts index 085c74e..e2a05d8 100644 --- a/src/seeders/delivery-methods.seeder.ts +++ b/src/seeders/delivery-methods.seeder.ts @@ -2,6 +2,7 @@ import type { EntityManager } from '@mikro-orm/core'; import { Delivery } from '../modules/delivery/entities/delivery.entity'; import { Restaurant } from '../modules/restaurants/entities/restaurant.entity'; import { deliveryMethodsData } from './data/delivery-methods.data'; +import { DeliveryFeeTypeEnum } from 'src/modules/delivery/interface/delivery'; export class DeliveryMethodsSeeder { async run(em: EntityManager, restaurants: Restaurant[]): Promise { @@ -24,6 +25,9 @@ export class DeliveryMethodsSeeder { minOrderPrice: methodData.minOrderPrice, enabled: methodData.enabled, order: methodData.order, + deliveryFeeType: DeliveryFeeTypeEnum.FIXED, + kilometerNumber: null, + deliveryFeeForKilometer: null, }); em.persist(delivery); } else { @@ -49,4 +53,3 @@ export class DeliveryMethodsSeeder { await em.flush(); } } -