diff --git a/src/modules/businesses/businesses.service.ts b/src/modules/businesses/businesses.service.ts index e911530..7e195e7 100644 --- a/src/modules/businesses/businesses.service.ts +++ b/src/modules/businesses/businesses.service.ts @@ -11,7 +11,10 @@ import { deleteBusinessCascade } from '../../common/utils/business-cascade.util' import { resolveUniqueSlug, normalizeSlugInput } from '../../common/utils/slug.util'; import { BusinessImagesService } from './business-images.service'; import { BusinessCategoryEntity } from '../../entities/business-category.entity'; -import { parseHmToMinute } from '../../common/utils/booking-schedule.util'; +import { + normalizeHmTimeInput, + parseHmToMinute, +} from '../../common/utils/booking-schedule.util'; import { BusinessAvailabilitySlotEntity } from '../../entities/business-availability-slot.entity'; import { BusinessEntity } from '../../entities/business.entity'; import { UserEntity, UserRole } from '../../entities/user.entity'; @@ -176,8 +179,15 @@ export class BusinessesService { const entities: BusinessAvailabilitySlotEntity[] = []; for (const slot of dto.slots) { - const startMinute = parseHmToMinute(slot.startTime); - const endMinute = parseHmToMinute(slot.endTime); + const startTime = normalizeHmTimeInput(slot.startTime); + const endTime = normalizeHmTimeInput(slot.endTime); + if (!startTime || !endTime) { + throw new BadRequestException( + 'ساعت باید به صورت HH:mm باشد (مثلاً 09:00)', + ); + } + const startMinute = parseHmToMinute(startTime); + const endMinute = parseHmToMinute(endTime); if (endMinute <= startMinute) { throw new BadRequestException('endTime must be after startTime'); } diff --git a/src/modules/businesses/dto/set-availability.dto.ts b/src/modules/businesses/dto/set-availability.dto.ts index 09871bb..742df00 100644 --- a/src/modules/businesses/dto/set-availability.dto.ts +++ b/src/modules/businesses/dto/set-availability.dto.ts @@ -1,16 +1,14 @@ import { ApiProperty } from '@nestjs/swagger'; -import { Transform, Type } from 'class-transformer'; +import { Type } from 'class-transformer'; import { ArrayMaxSize, IsArray, IsInt, IsString, - Matches, Max, Min, ValidateNested, } from 'class-validator'; -import { normalizeHmTimeInput } from '../../../common/utils/booking-schedule.util'; export class AvailabilitySlotDto { @ApiProperty({ description: '0=شنبه … 6=جمعه', minimum: 0, maximum: 6 }) @@ -20,16 +18,12 @@ export class AvailabilitySlotDto { @Max(6) dayOfWeek!: number; - @ApiProperty({ example: '09:00' }) - @Transform(({ value }) => normalizeHmTimeInput(value) ?? value) + @ApiProperty({ example: '09:00', description: 'HH:mm 24h (9:00 also accepted)' }) @IsString() - @Matches(/^([01]\d|2[0-3]):[0-5]\d]$/) startTime!: string; - @ApiProperty({ example: '17:00' }) - @Transform(({ value }) => normalizeHmTimeInput(value) ?? value) + @ApiProperty({ example: '17:00', description: 'HH:mm 24h (17:30 also accepted)' }) @IsString() - @Matches(/^([01]\d|2[0-3]):[0-5]\d]$/) endTime!: string; }