diff --git a/src/common/enums/message.enum.ts b/src/common/enums/message.enum.ts index 5f22a8d..2ff484d 100755 --- a/src/common/enums/message.enum.ts +++ b/src/common/enums/message.enum.ts @@ -189,6 +189,8 @@ export const enum ServiceMessage { IS_ACTIVE_SHOULD_BE_1_0 = "وضعیت سرویس باید یکی از مقادیر ۰ و ۱ باشد", IS_SUGGEST_SHOULD_BE_1_0 = "وضعیت پیشنهادی بودن سرویس باید یکی از مقادیر ۰ و ۱ باشد", REVIEW_STATUS_REQUIRED = "وضعیت نظر سرویس مورد نیاز است", + SHOW_IN_SLIDER_REQUIRED = "وضعیت نمایش در اسلایدر سرویس مورد نیاز است", + SHOW_IN_SLIDER_BOOLEAN = "وضعیت نمایش در اسلایدر سرویس باید یک بولین باشد", } export const enum AnnouncementMessage { diff --git a/src/modules/danak-services/DTO/create-service.dto.ts b/src/modules/danak-services/DTO/create-service.dto.ts index 5a024a0..7bfad5b 100755 --- a/src/modules/danak-services/DTO/create-service.dto.ts +++ b/src/modules/danak-services/DTO/create-service.dto.ts @@ -70,6 +70,11 @@ export class CreateServiceDto { @ApiProperty({ description: "Is the service a Danak suggest?", example: true }) isDanakSuggest: boolean; + @IsNotEmpty({ message: ServiceMessage.SHOW_IN_SLIDER_REQUIRED }) + @IsBoolean({ message: ServiceMessage.SHOW_IN_SLIDER_BOOLEAN }) + @ApiProperty({ description: "Is the service show in slider?", example: true }) + showInSlider: boolean; + @IsNotEmpty({ message: ServiceMessage.ICON_REQUIRED }) @IsUrl({ protocols: ["http", "https"], require_protocol: true }, { message: ServiceMessage.ICON_SHOULD_BE_URL }) @ApiProperty({ description: "The icon url of the service", example: "https://example.com/icon.png" }) diff --git a/src/modules/danak-services/danak-services.controller.ts b/src/modules/danak-services/danak-services.controller.ts index a0e72c7..83882e2 100755 --- a/src/modules/danak-services/danak-services.controller.ts +++ b/src/modules/danak-services/danak-services.controller.ts @@ -128,12 +128,27 @@ export class DanakServicesController { return this.danakServicesService.toggleServiceStatus(paramDto); } + @AuthGuards() + @PermissionsDec(PermissionEnum.SERVICES) + @ApiOperation({ summary: "toggle status of danak service slider => admin route" }) + @HttpCode(HttpStatus.OK) + @Post("toggle-slider/:id") + toggleServiceSlider(@Param() paramDto: ParamDto) { + return this.danakServicesService.toggleServiceSlider(paramDto); + } + @ApiOperation({ summary: "get services for user side" }) @Get("suggested") getDanakSuggestServices() { return this.danakServicesService.getDanakSuggestServices(); } + @ApiOperation({ summary: "get danak service slider" }) + @Get("slider") + getDanakServicesSlider() { + return this.danakServicesService.getDanakServicesSlider(); + } + @ApiOperation({ summary: "get danak service by id" }) @AuthGuards() @Get(":id") diff --git a/src/modules/danak-services/entities/danak-service.entity.ts b/src/modules/danak-services/entities/danak-service.entity.ts index dea052c..c7ea278 100755 --- a/src/modules/danak-services/entities/danak-service.entity.ts +++ b/src/modules/danak-services/entities/danak-service.entity.ts @@ -45,6 +45,9 @@ export class DanakService extends BaseEntity { @Column({ type: "boolean", default: false }) isActive: boolean; + @Column({ type: "boolean", default: false }) + showInSlider: boolean; + @Column({ type: "varchar", length: 255, nullable: false }) link: string; diff --git a/src/modules/danak-services/providers/danak-services.service.ts b/src/modules/danak-services/providers/danak-services.service.ts index 85304f9..70ac728 100755 --- a/src/modules/danak-services/providers/danak-services.service.ts +++ b/src/modules/danak-services/providers/danak-services.service.ts @@ -250,6 +250,20 @@ export class DanakServicesService { }; } /******************************************** */ + async toggleServiceSlider(paramDto: ParamDto) { + const service = await this.danakServicesRepository.findServiceById(paramDto.id); + if (!service) throw new BadRequestException(ServiceMessage.SERVICE_NOT_EXIST); + // + service.showInSlider = !service.showInSlider; + // + await this.danakServicesRepository.save(service); + // + return { + message: CommonMessage.UPDATE_SUCCESS, + showInSlider: service.showInSlider, + }; + } + /******************************************** */ async createService(createDto: CreateServiceDto) { const category = await this.danakServicesCategoryRepository.findOneById(createDto.categoryId); if (!category) throw new BadRequestException(CategoryMessage.CATEGORY_NOT_EXIST); @@ -358,12 +372,40 @@ export class DanakServicesService { }, }, order: { createdAt: "DESC" }, + withDeleted: false, }); return { danakServices, }; } /******************************************** */ + async getDanakServicesSlider() { + const danakServices = await this.danakServicesRepository.find({ + where: { showInSlider: true, isActive: true, deletedAt: IsNull(), category: { isActive: true, deletedAt: IsNull() } }, + relations: { category: true }, + select: { + id: true, + name: true, + title: true, + description: true, + createDate: true, + icon: true, + createdAt: true, + isActive: true, + isDanakSuggest: true, + showInSlider: true, + metaDescription: true, + category: { + id: true, + title: true, + }, + }, + order: { createdAt: "DESC" }, + withDeleted: false, + }); + return { danakServices }; + } + /******************************************** */ async getDanakServiceByIdWithSubs(serviceId: string, isAdmin: boolean, userId: string) { const danakService = await this.danakServicesRepository.getDanakServiceById(serviceId, isAdmin);