From 390df394e9a615c0b3535cdaaa0ed8e7685a5d75 Mon Sep 17 00:00:00 2001 From: Mahdi Date: Sun, 31 May 2026 15:42:20 +0330 Subject: [PATCH] edit admin --- ...-NullableServiceTemplateDefaultDuration.ts | 28 +++++++++++++++++++ src/entities/service-template.entity.ts | 4 +-- .../business-service-requests.service.ts | 1 - .../dto/create-business-service.dto.ts | 2 +- .../dto/create-service-template.dto.ts | 10 ------- .../dto/update-service-template.dto.ts | 10 ------- .../service-templates.service.ts | 2 +- 7 files changed, 32 insertions(+), 25 deletions(-) create mode 100644 src/database/migrations/1789045000000-NullableServiceTemplateDefaultDuration.ts diff --git a/src/database/migrations/1789045000000-NullableServiceTemplateDefaultDuration.ts b/src/database/migrations/1789045000000-NullableServiceTemplateDefaultDuration.ts new file mode 100644 index 0000000..661468a --- /dev/null +++ b/src/database/migrations/1789045000000-NullableServiceTemplateDefaultDuration.ts @@ -0,0 +1,28 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class NullableServiceTemplateDefaultDuration1789045000000 + implements MigrationInterface +{ + name = 'NullableServiceTemplateDefaultDuration1789045000000'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "service_templates" + ALTER COLUMN "defaultDurationMinutes" DROP DEFAULT, + ALTER COLUMN "defaultDurationMinutes" DROP NOT NULL + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + UPDATE "service_templates" + SET "defaultDurationMinutes" = 30 + WHERE "defaultDurationMinutes" IS NULL + `); + await queryRunner.query(` + ALTER TABLE "service_templates" + ALTER COLUMN "defaultDurationMinutes" SET DEFAULT 30, + ALTER COLUMN "defaultDurationMinutes" SET NOT NULL + `); + } +} diff --git a/src/entities/service-template.entity.ts b/src/entities/service-template.entity.ts index 5dbe445..87f6171 100644 --- a/src/entities/service-template.entity.ts +++ b/src/entities/service-template.entity.ts @@ -25,8 +25,8 @@ export class ServiceTemplateEntity { @Column({ type: 'varchar', nullable: true, length: 400 }) description!: string | null; - @Column({ type: 'int', default: 30 }) - defaultDurationMinutes!: number; + @Column({ type: 'int', nullable: true }) + defaultDurationMinutes!: number | null; @Column({ default: true }) isActive!: boolean; diff --git a/src/modules/business-service-requests/business-service-requests.service.ts b/src/modules/business-service-requests/business-service-requests.service.ts index 11a73ad..705eed1 100644 --- a/src/modules/business-service-requests/business-service-requests.service.ts +++ b/src/modules/business-service-requests/business-service-requests.service.ts @@ -134,7 +134,6 @@ export class BusinessServiceRequestsService { title: request.title, categoryId: business.categoryId, description: request.description ?? undefined, - defaultDurationMinutes: request.durationMinutes ?? undefined, isActive: true, }); diff --git a/src/modules/business-services/dto/create-business-service.dto.ts b/src/modules/business-services/dto/create-business-service.dto.ts index bda7db8..2772418 100644 --- a/src/modules/business-services/dto/create-business-service.dto.ts +++ b/src/modules/business-services/dto/create-business-service.dto.ts @@ -16,7 +16,7 @@ export class CreateBusinessServiceDto { @Min(0) price!: number; - /** اگر خالی باشد از template.defaultDurationMinutes استفاده می‌شود */ + /** مدت خدمت به دقیقه — توسط کسب‌وکار تعیین می‌شود */ @ApiPropertyOptional({ example: 30, nullable: true }) @IsOptional() @IsInt() diff --git a/src/modules/service-templates/dto/create-service-template.dto.ts b/src/modules/service-templates/dto/create-service-template.dto.ts index c244076..f3cb0c2 100644 --- a/src/modules/service-templates/dto/create-service-template.dto.ts +++ b/src/modules/service-templates/dto/create-service-template.dto.ts @@ -1,14 +1,11 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; import { IsBoolean, - IsInt, IsOptional, IsString, IsUUID, Matches, - Max, MaxLength, - Min, } from 'class-validator'; export class CreateServiceTemplateDto { @@ -36,13 +33,6 @@ export class CreateServiceTemplateDto { @MaxLength(500) description?: string; - @ApiPropertyOptional({ example: 30 }) - @IsOptional() - @IsInt() - @Min(1) - @Max(1440) - defaultDurationMinutes?: number; - @ApiPropertyOptional({ example: true }) @IsOptional() @IsBoolean() diff --git a/src/modules/service-templates/dto/update-service-template.dto.ts b/src/modules/service-templates/dto/update-service-template.dto.ts index 3260a7e..c566cbf 100644 --- a/src/modules/service-templates/dto/update-service-template.dto.ts +++ b/src/modules/service-templates/dto/update-service-template.dto.ts @@ -1,14 +1,11 @@ import { ApiPropertyOptional } from '@nestjs/swagger'; import { IsBoolean, - IsInt, IsOptional, IsString, IsUUID, Matches, - Max, MaxLength, - Min, } from 'class-validator'; export class UpdateServiceTemplateDto { @@ -38,13 +35,6 @@ export class UpdateServiceTemplateDto { @MaxLength(500) description?: string | null; - @ApiPropertyOptional({ example: 30 }) - @IsOptional() - @IsInt() - @Min(1) - @Max(1440) - defaultDurationMinutes?: number; - @ApiPropertyOptional({ example: true }) @IsOptional() @IsBoolean() diff --git a/src/modules/service-templates/service-templates.service.ts b/src/modules/service-templates/service-templates.service.ts index 3367222..0e6b932 100644 --- a/src/modules/service-templates/service-templates.service.ts +++ b/src/modules/service-templates/service-templates.service.ts @@ -81,7 +81,7 @@ export class ServiceTemplatesService { slug, categoryId: p.categoryId, description: p.description ?? null, - defaultDurationMinutes: p.defaultDurationMinutes ?? 30, + defaultDurationMinutes: null, isActive: p.isActive ?? true, });