delivery update

This commit is contained in:
2025-12-11 12:20:05 +03:30
parent c244834656
commit d1c72b81dc
5 changed files with 44 additions and 3 deletions
@@ -1,7 +1,7 @@
import { IsNumber, IsBoolean, IsOptional, IsString, Min, IsEnum } from 'class-validator'; import { IsNumber, IsBoolean, IsOptional, IsString, Min, IsEnum } from 'class-validator';
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { Type } from 'class-transformer'; import { Type } from 'class-transformer';
import { DeliveryMethodEnum } from '../interface/delivery'; import { DeliveryFeeTypeEnum, DeliveryMethodEnum } from '../interface/delivery';
export class CreateDeliveryDto { export class CreateDeliveryDto {
@ApiProperty({ example: 'dineIn', description: 'Delivery method name', enum: DeliveryMethodEnum }) @ApiProperty({ example: 'dineIn', description: 'Delivery method name', enum: DeliveryMethodEnum })
@@ -40,4 +40,25 @@ export class CreateDeliveryDto {
@IsNumber() @IsNumber()
@Type(() => Number) @Type(() => Number)
order?: 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;
} }
@@ -1,7 +1,7 @@
import { Entity, Property, Enum, ManyToOne } from '@mikro-orm/core'; import { Entity, Property, Enum, ManyToOne } from '@mikro-orm/core';
import { BaseEntity } from '../../../common/entities/base.entity'; import { BaseEntity } from '../../../common/entities/base.entity';
import { Restaurant } from '../../restaurants/entities/restaurant.entity'; import { Restaurant } from '../../restaurants/entities/restaurant.entity';
import { DeliveryMethodEnum } from '../interface/delivery'; import { DeliveryFeeTypeEnum, DeliveryMethodEnum } from '../interface/delivery';
@Entity({ tableName: 'deliveries' }) @Entity({ tableName: 'deliveries' })
export class Delivery extends BaseEntity { export class Delivery extends BaseEntity {
@@ -17,6 +17,15 @@ export class Delivery extends BaseEntity {
@Property({ type: 'decimal', precision: 10, scale: 0, default: 0 }) @Property({ type: 'decimal', precision: 10, scale: 0, default: 0 })
deliveryFee: number = 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 }) @Property({ type: 'decimal', precision: 10, scale: 0, default: 0 })
minOrderPrice: number = 0; minOrderPrice: number = 0;
@@ -4,3 +4,8 @@ export enum DeliveryMethodEnum {
DeliveryCar = 'deliveryCar', DeliveryCar = 'deliveryCar',
DeliveryCourier = 'deliveryCourier', DeliveryCourier = 'deliveryCourier',
} }
export enum DeliveryFeeTypeEnum {
FIXED = 'fixed',
DISTANCE_BASED = 'distanceBased',
}
@@ -40,6 +40,9 @@ export class DeliveryService {
description: createDto.description, description: createDto.description,
enabled: createDto.enabled ?? true, enabled: createDto.enabled ?? true,
order: createDto.order ?? 0, order: createDto.order ?? 0,
deliveryFeeType: createDto.deliveryFeeType,
kilometerNumber: createDto.kilometerNumber,
deliveryFeeForKilometer: createDto.deliveryFeeForKilometer ?? 0,
}; };
const delivery = this.deliveryRepository.create(data); const delivery = this.deliveryRepository.create(data);
+4 -1
View File
@@ -2,6 +2,7 @@ import type { EntityManager } from '@mikro-orm/core';
import { Delivery } from '../modules/delivery/entities/delivery.entity'; import { Delivery } from '../modules/delivery/entities/delivery.entity';
import { Restaurant } from '../modules/restaurants/entities/restaurant.entity'; import { Restaurant } from '../modules/restaurants/entities/restaurant.entity';
import { deliveryMethodsData } from './data/delivery-methods.data'; import { deliveryMethodsData } from './data/delivery-methods.data';
import { DeliveryFeeTypeEnum } from 'src/modules/delivery/interface/delivery';
export class DeliveryMethodsSeeder { export class DeliveryMethodsSeeder {
async run(em: EntityManager, restaurants: Restaurant[]): Promise<void> { async run(em: EntityManager, restaurants: Restaurant[]): Promise<void> {
@@ -24,6 +25,9 @@ export class DeliveryMethodsSeeder {
minOrderPrice: methodData.minOrderPrice, minOrderPrice: methodData.minOrderPrice,
enabled: methodData.enabled, enabled: methodData.enabled,
order: methodData.order, order: methodData.order,
deliveryFeeType: DeliveryFeeTypeEnum.FIXED,
kilometerNumber: null,
deliveryFeeForKilometer: null,
}); });
em.persist(delivery); em.persist(delivery);
} else { } else {
@@ -49,4 +53,3 @@ export class DeliveryMethodsSeeder {
await em.flush(); await em.flush();
} }
} }