From 4f59d689510f8e68b9378e4e2de4d5dab7872b1e Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Mon, 22 Dec 2025 16:23:37 +0330 Subject: [PATCH] add : dmenu:get restarants --- src/modules/dmenu/dmenu.controller.ts | 9 +++- src/modules/dmenu/dmenu.module.ts | 2 + .../dmenu/providers/restaurant.service.ts | 44 +++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 src/modules/dmenu/providers/restaurant.service.ts diff --git a/src/modules/dmenu/dmenu.controller.ts b/src/modules/dmenu/dmenu.controller.ts index 42b510c..12d31ca 100644 --- a/src/modules/dmenu/dmenu.controller.ts +++ b/src/modules/dmenu/dmenu.controller.ts @@ -3,6 +3,7 @@ import { ApiBearerAuth, ApiOperation, ApiParam, ApiTags } from "@nestjs/swagger" import { ContactService } from "./providers/contact.service"; import { IconsService } from "./providers/icons.service"; +import { RestaurantService } from "./providers/restaurant.service"; import { CreateIconDto } from "./DTO/create-icon.dto"; import { UpdateIconDto } from "./DTO/update-icon.dto"; import { CreateGroupDto } from "./DTO/create-group.dto"; @@ -20,7 +21,7 @@ export class DmenuController { constructor( private readonly iconsService: IconsService, private readonly contactService: ContactService, - + private readonly restaurantService: RestaurantService, ) {} // Icon endpoints @@ -99,4 +100,10 @@ export class DmenuController { findOne(@Param("id") id: string) { return this.contactService.findOne(+id); } + + @Get('restaurants') + @ApiOperation({ summary: "Get all restaurants" }) + findAllRestaurant() { + return this.restaurantService.findAll(); + } } diff --git a/src/modules/dmenu/dmenu.module.ts b/src/modules/dmenu/dmenu.module.ts index b57ccd8..57f7a39 100644 --- a/src/modules/dmenu/dmenu.module.ts +++ b/src/modules/dmenu/dmenu.module.ts @@ -4,6 +4,7 @@ import { DMENU_CONFIG } from "./constants"; import { DmenuController } from "./dmenu.controller"; import { ContactService } from "./providers/contact.service"; import { IconsService } from "./providers/icons.service"; +import { RestaurantService } from "./providers/restaurant.service"; import { dmenuConfig } from "../../configs/icons.config"; @Module({ @@ -12,6 +13,7 @@ import { dmenuConfig } from "../../configs/icons.config"; providers: [ IconsService, ContactService, + RestaurantService, { provide: DMENU_CONFIG, useFactory: dmenuConfig().useFactory, diff --git a/src/modules/dmenu/providers/restaurant.service.ts b/src/modules/dmenu/providers/restaurant.service.ts new file mode 100644 index 0000000..25235cd --- /dev/null +++ b/src/modules/dmenu/providers/restaurant.service.ts @@ -0,0 +1,44 @@ +import { HttpService } from "@nestjs/axios"; +import { Injectable, Logger } from "@nestjs/common"; +import { Inject } from "@nestjs/common"; +import { AxiosError } from "axios"; +import { catchError, firstValueFrom, throwError } from "rxjs"; + +import { IDmenuConfig } from "../../../configs/icons.config"; +import { DMENU_CONFIG } from "../constants"; + +@Injectable() +export class RestaurantService { + private readonly logger = new Logger(RestaurantService.name); + + constructor( + @Inject(DMENU_CONFIG) private readonly config: IDmenuConfig, + private readonly httpService: HttpService, + ) {} + + private getHeaders(): Record { + const credentials = Buffer.from(`${this.config.username}:${this.config.password}`).toString("base64"); + return { + "Content-Type": "application/json", + Authorization: `Basic ${credentials}`, + }; + } + + async findAll() { + try { + const { data } = await firstValueFrom( + this.httpService.get(`${this.config.baseUrl}/super-admin/restaurants`, { headers: this.getHeaders() }).pipe( + catchError((err: AxiosError) => { + this.logger.error(`Failed to fetch restaurants: ${err.message}`, err.stack); + return throwError(() => err); + }), + ), + ); + return data; + } catch (error: unknown) { + this.logger.error(`Error fetching restaurants: ${error instanceof Error ? error.message : "Unknown error"}`); + throw error; + } + } +} +