From 9a7010dceaf38c7c6483c1a27740b23447779783 Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Sun, 8 Feb 2026 09:18:20 +0330 Subject: [PATCH] change entity names --- src/app.module.ts | 8 +- src/common/decorators/rest-id.decorator.ts | 2 +- src/common/enums/message.enum.ts | 46 +- src/common/enums/permission.enum.ts | 2 +- .../interceptors/pagination.interceptor.ts | 2 +- src/modules/admin/admin.module.ts | 2 +- .../admin/controllers/admin.controller.ts | 20 +- src/modules/admin/entities/admin.entity.ts | 4 +- .../admin/entities/adminRole.entity.ts | 16 +- src/modules/admin/providers/admin.service.ts | 52 +- .../admin/repositories/admin.repository.ts | 18 +- .../transformers/admin-detail.transformer.ts | 10 +- src/modules/auth/auth.module.ts | 2 +- .../auth/controllers/auth.controller.ts | 2 +- src/modules/auth/dto/direct-login.dto.ts | 2 +- src/modules/auth/dto/request-otp.dto.ts | 2 +- src/modules/auth/dto/verify-otp.dto.ts | 2 +- .../auth/entities/refresh-token.entity.ts | 2 +- src/modules/auth/guards/adminAuth.guard.ts | 2 +- src/modules/auth/services/auth.service.ts | 10 +- src/modules/auth/services/tokens.service.ts | 12 +- .../transformers/admin-login.transformer.ts | 36 +- .../transformers/user-login.transformer.ts | 16 +- src/modules/cart/cart.module.ts | 8 +- .../cart/controllers/cart.controller.ts | 10 +- src/modules/cart/dto/bulk-add-items.dto.ts | 8 +- src/modules/cart/dto/create-cart.dto.ts | 4 +- .../providers/cart-calculation.service.ts | 44 +- .../cart/providers/cart-item.service.ts | 40 +- .../cart/providers/cart-validation.service.ts | 102 +- src/modules/cart/providers/cart.service.ts | 26 +- .../cart/repositories/cart.repository.ts | 4 +- src/modules/contact/dto/create-contact.dto.ts | 2 +- .../contact/entities/contact.entity.ts | 8 +- src/modules/contact/interface/interface.ts | 2 +- .../contact/providers/contact.service.ts | 18 +- .../repositories/contact.repository.ts | 2 +- .../coupons/controllers/coupon.controller.ts | 2 +- src/modules/coupons/coupon.module.ts | 2 +- src/modules/coupons/dto/create-coupon.dto.ts | 8 +- src/modules/coupons/entities/coupon.entity.ts | 18 +- .../coupons/providers/coupon.service.ts | 28 +- .../coupons/repositories/coupon.repository.ts | 2 +- .../controllers/delivery.controller.ts | 24 +- src/modules/delivery/delivery.module.ts | 2 +- .../delivery/entities/delivery.entity.ts | 8 +- .../delivery/providers/delivery.service.ts | 22 +- src/modules/foods/entities/favorite.entity.ts | 8 +- src/modules/foods/entities/food.entity.ts | 18 +- src/modules/foods/food.module.ts | 24 +- src/modules/icons/entities/group.entity.ts | 2 +- src/modules/icons/entities/icon.entity.ts | 2 +- .../inventory/dto/bulk-reserve-food.dto.ts | 8 +- .../inventory/dto/bulk-set-stock.dto.ts | 6 +- .../inventory/entities/inventory.entity.ts | 8 +- src/modules/inventory/inventory.controller.ts | 10 +- src/modules/inventory/inventory.service.ts | 110 +- .../controllers/notifications.controller.ts | 16 +- .../decorators/ws-rest-id.decorator.ts | 4 +- .../dto/send-notification.dto.ts | 2 +- .../notification-preference.entity.ts | 10 +- .../entities/notification.entity.ts | 10 +- .../notifications/entities/smsLogs.entity.ts | 6 +- .../guards/ws-admin-auth.guard.ts | 2 +- .../notifications/listeners/sms.listeners.ts | 14 +- .../notifications/notifications.gateway.ts | 2 +- .../notifications/notifications.module.ts | 6 +- .../repositories/sms-log.repository.ts | 8 +- .../notification-preference.service.ts | 18 +- .../services/notification.service.ts | 30 +- .../orders/controllers/orders.controller.ts | 10 +- src/modules/orders/crone/order.crone.ts | 22 +- src/modules/orders/dto/find-orders.dto.ts | 2 +- .../orders/entities/order-item.entity.ts | 10 +- src/modules/orders/entities/order.entity.ts | 34 +- .../orders/listeners/order.listeners.ts | 18 +- src/modules/orders/orders.module.ts | 6 +- .../orders/providers/orders.service.ts | 102 +- .../orders/repositories/order.repository.ts | 30 +- .../pager/controllers/pager.controller.ts | 8 +- .../pager/decorators/ws-rest-id.decorator.ts | 6 +- .../pager/dto/pager-socket-connection.dto.ts | 4 +- src/modules/pager/entities/pager.entity.ts | 10 +- .../pager/guards/ws-admin-auth.guard.ts | 2 +- .../pager/listeners/notification.listeners.ts | 2 +- src/modules/pager/providers/pager.service.ts | 38 +- .../controllers/payments.controller.ts | 18 +- .../entities/payment-method.entity.ts | 12 +- .../payments/entities/payment.entity.ts | 4 +- .../payments/listeners/payment.listeners.ts | 6 +- src/modules/payments/payments.module.ts | 4 +- .../services/payment-method.service.ts | 16 +- .../payments/services/payments.service.ts | 20 +- .../controllers/category.controller.ts | 10 +- .../controllers/product.controller.ts} | 46 +- .../crone/product.crone.ts} | 2 +- .../dto/create-category.dto.ts | 0 .../dto/create-product.dto.ts} | 0 .../dto/find-products.dto.ts} | 0 .../dto/update-category.dto.ts | 0 .../dto/update-product.dto.ts} | 2 +- .../entities/category.entity.ts | 16 +- .../products/entities/favorite.entity.ts | 14 + .../products/entities/product.entity.ts | 61 + .../interface/product.interface.ts} | 0 src/modules/products/product.module.ts | 30 + .../providers/category.service.ts | 26 +- .../providers/product.service.ts} | 124 +- .../repositories/category.repository.ts | 0 .../repositories/product.repository.ts} | 16 +- .../restaurants/entities/restaurant.entity.ts | 6 +- src/modules/restaurants/restaurants.module.ts | 16 +- .../review/controllers/review.controller.ts | 2 +- src/modules/review/dto/create-review.dto.ts | 8 +- src/modules/review/dto/find-reviews.dto.ts | 6 +- src/modules/review/dto/update-review.dto.ts | 4 +- src/modules/review/entities/review.entity.ts | 14 +- .../review/listeners/review.listeners.ts | 6 +- ...vice.ts => product-rating-cron.service.ts} | 32 +- .../review/providers/review.service.ts | 80 +- .../review/repositories/review.repository.ts | 6 +- src/modules/review/review.module.ts | 4 +- .../roles/controllers/roles.controller.ts | 2 +- .../roles/entities/permission.entity.ts | 2 +- src/modules/roles/entities/role.entity.ts | 10 +- .../roles/providers/permissions.service.ts | 8 +- src/modules/roles/providers/roles.service.ts | 34 +- .../controllers/schedule.controller.ts | 8 +- .../controllers/shops.controller.ts} | 64 +- .../crone/shop.crone.ts} | 18 +- .../dto/create-schedule.dto.ts | 0 .../dto/create-shop.dto.ts} | 0 .../dto/find-schedules.dto.ts | 0 .../dto/find-shops.dto.ts} | 0 .../dto/shop-specification.dto.ts} | 6 +- .../dto/update-schedule.dto.ts | 0 .../dto/update-shop.dto.ts} | 2 +- .../dto/upgrade-subscription.dto.ts | 0 .../entities/schedule.entity.ts | 2 +- src/modules/shops/entities/shop.entity.ts | 112 + .../interface/plan.interface.ts | 0 .../providers/schedule.service.ts | 14 +- .../providers/shops.service.ts} | 168 +- .../repositories/rest.repository.ts | 12 +- .../repositories/schedule.repository.ts | 0 src/modules/shops/shops.module.ts | 21 + .../controllers/uploader.controller.ts | 4 +- .../uploader/providers/uploader.service.ts | 2 +- .../entities/point-transaction.entity.ts | 10 +- .../users/entities/user-address.entity.ts | 2 +- src/modules/users/entities/user.entity.ts | 4 +- .../entities/wallet-transaction.entity.ts | 12 +- src/modules/users/providers/user.service.ts | 48 +- src/modules/users/providers/wallet.service.ts | 18 +- .../point-transaction.repository.ts | 2 +- .../wallet-transaction.repository.ts | 2 +- src/modules/users/user.module.ts | 2 +- src/seeders/DatabaseSeeder.ts | 50 +- src/seeders/admins.seeder.ts | 14 +- src/seeders/categories.seeder.ts | 32 +- src/seeders/coupons.seeder.ts | 12 +- src/seeders/data/coupons.data.ts | 2 +- src/seeders/data/delivery-methods.data.ts | 2 +- .../data/notification-preferences.data.ts | 2 +- src/seeders/data/payment-methods.data.ts | 2 +- src/seeders/data/permissions.data.ts | 2 +- .../data/{foods.data.ts => products.data.ts} | 2360 ++++++++--------- src/seeders/data/roles.data.ts | 4 +- .../{restaurants.data.ts => shops.data.ts} | 6 +- src/seeders/delivery-methods.seeder.ts | 12 +- src/seeders/foods.seeder.ts | 67 - src/seeders/inventory.seeder.ts | 12 +- .../notification-preferences.seeder.ts | 12 +- src/seeders/notifications.seeder.ts | 24 +- src/seeders/payment-methods.seeder.ts | 12 +- src/seeders/products.seeder.ts | 67 + src/seeders/restaurants.seeder.ts | 26 - src/seeders/schedules.seeder.ts | 14 +- src/seeders/shops.seeder.ts | 26 + src/seeders/user-wallets.seeder.ts | 12 +- 180 files changed, 2751 insertions(+), 2513 deletions(-) rename src/modules/{foods => products}/controllers/category.controller.ts (91%) rename src/modules/{foods/controllers/food.controller.ts => products/controllers/product.controller.ts} (77%) rename src/modules/{foods/crone/food.crone.ts => products/crone/product.crone.ts} (94%) rename src/modules/{foods => products}/dto/create-category.dto.ts (100%) rename src/modules/{foods/dto/create-food.dto.ts => products/dto/create-product.dto.ts} (100%) rename src/modules/{foods/dto/find-foods.dto.ts => products/dto/find-products.dto.ts} (100%) rename src/modules/{foods => products}/dto/update-category.dto.ts (100%) rename src/modules/{foods/dto/update-food.dto.ts => products/dto/update-product.dto.ts} (67%) rename src/modules/{foods => products}/entities/category.entity.ts (52%) create mode 100644 src/modules/products/entities/favorite.entity.ts create mode 100644 src/modules/products/entities/product.entity.ts rename src/modules/{foods/interface/food.interface.ts => products/interface/product.interface.ts} (100%) create mode 100644 src/modules/products/product.module.ts rename src/modules/{foods => products}/providers/category.service.ts (72%) rename src/modules/{foods/providers/food.service.ts => products/providers/product.service.ts} (56%) rename src/modules/{foods => products}/repositories/category.repository.ts (100%) rename src/modules/{foods/repositories/food.repository.ts => products/repositories/product.repository.ts} (77%) rename src/modules/review/providers/{food-rating-cron.service.ts => product-rating-cron.service.ts} (59%) rename src/modules/{restaurants => shops}/controllers/schedule.controller.ts (93%) rename src/modules/{restaurants/controllers/restaurants.controller.ts => shops/controllers/shops.controller.ts} (64%) rename src/modules/{restaurants/crone/restaurant.crone.ts => shops/crone/shop.crone.ts} (68%) rename src/modules/{restaurants => shops}/dto/create-schedule.dto.ts (100%) rename src/modules/{restaurants/dto/create-restaurant.dto.ts => shops/dto/create-shop.dto.ts} (100%) rename src/modules/{restaurants => shops}/dto/find-schedules.dto.ts (100%) rename src/modules/{restaurants/dto/find-restaurants.dto.ts => shops/dto/find-shops.dto.ts} (100%) rename src/modules/{restaurants/dto/restaurant-specification.dto.ts => shops/dto/shop-specification.dto.ts} (93%) rename src/modules/{restaurants => shops}/dto/update-schedule.dto.ts (100%) rename src/modules/{restaurants/dto/update-restaurant.dto.ts => shops/dto/update-shop.dto.ts} (66%) rename src/modules/{restaurants => shops}/dto/upgrade-subscription.dto.ts (100%) rename src/modules/{restaurants => shops}/entities/schedule.entity.ts (84%) create mode 100644 src/modules/shops/entities/shop.entity.ts rename src/modules/{restaurants => shops}/interface/plan.interface.ts (100%) rename src/modules/{restaurants => shops}/providers/schedule.service.ts (92%) rename src/modules/{restaurants/providers/restaurants.service.ts => shops/providers/shops.service.ts} (53%) rename src/modules/{restaurants => shops}/repositories/rest.repository.ts (84%) rename src/modules/{restaurants => shops}/repositories/schedule.repository.ts (100%) create mode 100644 src/modules/shops/shops.module.ts rename src/seeders/data/{foods.data.ts => products.data.ts} (87%) rename src/seeders/data/{restaurants.data.ts => shops.data.ts} (99%) delete mode 100644 src/seeders/foods.seeder.ts create mode 100644 src/seeders/products.seeder.ts delete mode 100644 src/seeders/restaurants.seeder.ts create mode 100644 src/seeders/shops.seeder.ts diff --git a/src/app.module.ts b/src/app.module.ts index 2013949..3f188e2 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -9,8 +9,8 @@ import { UploaderModule } from './modules/uploader/uploader.module'; import { AdminModule } from './modules/admin/admin.module'; import { ThrottlerModule } from '@nestjs/throttler'; import { ScheduleModule } from '@nestjs/schedule'; -import { RestaurantsModule } from './modules/restaurants/restaurants.module'; -import { FoodModule } from './modules/foods/food.module'; +import { ShopsModule } from './modules/shops/shops.module'; +import { ProductModule } from './modules/products/product.module'; import { CartModule } from './modules/cart/cart.module'; import { RolesModule } from './modules/roles/roles.module'; import { PaymentsModule } from './modules/payments/payments.module'; @@ -44,8 +44,8 @@ import { cacheConfig } from './config/cache.config'; }, ]), ScheduleModule.forRoot(), - RestaurantsModule, - FoodModule, + ShopsModule, + ProductModule, CartModule, RolesModule, PaymentsModule, diff --git a/src/common/decorators/rest-id.decorator.ts b/src/common/decorators/rest-id.decorator.ts index afebf8c..295fc72 100644 --- a/src/common/decorators/rest-id.decorator.ts +++ b/src/common/decorators/rest-id.decorator.ts @@ -6,7 +6,7 @@ import type { Request } from 'express'; * Must be used after AdminAuthGuard or AuthGuard that sets request.restId. * * @example - * @Get('/restaurants') + * @Get('/shops') * @UseGuards(AdminAuthGuard) * getRestaurants(@RestId() restId: string) { * return this.restaurantService.findById(restId); diff --git a/src/common/enums/message.enum.ts b/src/common/enums/message.enum.ts index f635400..c13f728 100755 --- a/src/common/enums/message.enum.ts +++ b/src/common/enums/message.enum.ts @@ -71,8 +71,8 @@ export const enum AuthMessage { INVALID_SLUG = 'اسلاگ نامعتبر است', INVALID_OR_EXPIRED_TOKEN = 'توکن نامعتبر یا منقضی شده است', } -export const enum FoodMessage { - NOT_FOUND = 'غذایی با این مشخصات یافت نشد', +export const enum ProductMessage { + NOT_FOUND = 'محصولی با این مشخصات یافت نشد', } export const enum CategoryMessage { NOT_FOUND = 'دسته‌بندی مورد نظر یافت نشد', @@ -82,7 +82,7 @@ export const enum CategoryMessage { } export const enum UserMessage { USER_NOT_FOUND = 'کاربری با این مشخصات یافت نشد', - Rest_NOT_FOUND = 'رستورانی با این مشخصات یافت نشد', + Rest_NOT_FOUND = 'فروشگاهی با این مشخصات یافت نشد', USER_EXISTS = 'با این شماره قبلا ثبت نام شده است', USER_REGISTER_SUCCESS = 'ثبت نام موفقیت آمیز بود', EMAIL_ADDRESS_ALREADY_EXISTS = 'ایمیل قبلا ثبت شده است', @@ -651,7 +651,7 @@ export const enum CouponMessage { export const enum ReviewMessage { NOT_FOUND = 'نظر یافت نشد', - ALREADY_COMMENTED = 'شما قبلاً برای این غذا نظر داده‌اید', + ALREADY_COMMENTED = 'شما قبلاً برای این محصول نظر داده‌اید', CAN_ONLY_UPDATE_OWN = 'شما فقط می‌توانید نظرات خود را ویرایش کنید', CAN_ONLY_DELETE_OWN = 'شما فقط می‌توانید نظرات خود را حذف کنید', RATING_REQUIRED = 'امتیاز الزامی است', @@ -683,7 +683,7 @@ export const enum OrderMessage { DELIVERY_METHOD_NOT_FOUND = 'روش ارسال یافت نشد', PAYMENT_METHOD_REQUIRED = 'روش پرداخت الزامی است. لطفا قبل از ایجاد سفارش، روش پرداخت را تنظیم کنید', USER_NOT_FOUND = 'کاربر یافت نشد', - RESTAURANT_NOT_FOUND = 'رستوران یافت نشد', + SHOP_NOT_FOUND = 'فروشگاه یافت نشد', DELIVERY_NOT_FOUND = 'روش ارسال یافت نشد', MIN_ORDER_AMOUNT_NOT_MET = 'مبلغ سفارش کمتر از حداقل مجاز برای این روش ارسال است', TABLE_NUMBER_REQUIRED = 'شماره میز برای سفارش در محل الزامی است', @@ -691,8 +691,8 @@ export const enum OrderMessage { CAR_ADDRESS_REQUIRED = 'آدرس خودرو الزامی است. لطفا قبل از ایجاد سفارش، آدرس خودرو را تنظیم کنید', PAYMENT_METHOD_NOT_FOUND = 'روش پرداخت یافت نشد', PAYMENT_METHOD_NOT_ENABLED = 'روش پرداخت برای این رستوران فعال نیست', - FOOD_NOT_FOUND = 'غذا یافت نشد', - FOOD_NOT_BELONGS_TO_RESTAURANT = 'غذا به این رستوران تعلق ندارد', + PRODUCT_NOT_FOUND = 'محصول یافت نشد', + PRODUCT_NOT_BELONGS_TO_SHOP = 'محصول به این فروشگاه تعلق ندارد', } export const enum CartMessage { @@ -701,30 +701,30 @@ export const enum CartMessage { ADDRESS_REQUIRED = 'آدرس برای تحویل پیک الزامی است', NOT_FOUND = 'سبد خرید یافت نشد', COUPON_NOT_FOUND = 'کوپن یافت نشد', - FOOD_NOT_FOUND = 'غذا یافت نشد', - FOOD_NOT_BELONGS_TO_RESTAURANT = 'غذا به این رستوران تعلق ندارد', - FOOD_NO_INVENTORY = 'غذا موجودی ندارد', + PRODUCT_NOT_FOUND = 'محصول یافت نشد', + PRODUCT_NOT_BELONGS_TO_SHOP = 'محصول به این فروشگاه تعلق ندارد', + PRODUCT_NO_INVENTORY = 'محصول موجودی ندارد', INSUFFICIENT_STOCK = 'موجودی کافی نیست', USER_NOT_FOUND = 'کاربر یافت نشد', ADDRESS_NOT_FOUND = 'آدرس یافت نشد', - RESTAURANT_NOT_FOUND = 'رستوران یافت نشد', + SHOP_NOT_FOUND = 'فروشگاه یافت نشد', ADDRESS_NOT_BELONGS_TO_USER = 'آدرس به کاربر فعلی تعلق ندارد', ADDRESS_NO_COORDINATES = 'آدرس مختصات جغرافیایی ندارد', ADDRESS_OUTSIDE_SERVICE_AREA = 'آدرس خارج از محدوده سرویس رستوران است', DELIVERY_METHOD_NOT_FOUND = 'روش ارسال یافت نشد', - DELIVERY_METHOD_NOT_ENABLED = 'روش ارسال برای این رستوران فعال نیست', + DELIVERY_METHOD_NOT_ENABLED = 'روش ارسال برای این فروشگاه فعال نیست', PAYMENT_METHOD_NOT_FOUND = 'روش پرداخت یافت نشد', PAYMENT_METHOD_NOT_ENABLED = 'روش پرداخت برای این رستوران فعال نیست', WALLET_NOT_FOUND = 'کیف پول کاربر یافت نشد', WALLET_INSUFFICIENT = 'موجودی کیف پول کافی نیست', COUPON_MAX_USES_REACHED = 'حداکثر استفاده از کوپن به پایان رسیده است', ITEM_NOT_FOUND = 'آیتم در سبد خرید یافت نشد', - DELIVERY_METHOD_NOT_FOUND_FOR_RESTAURANT = 'روش ارسال برای این رستوران یافت نشد', + DELIVERY_METHOD_NOT_FOUND_FOR_SHOP = 'روش ارسال برای این فروشگاه یافت نشد', COUPON_CANNOT_BE_APPLIED = 'این کوپن قابل اعمال بر روی آیتم‌های سبد خرید شما نیست. لطفا آیتم‌هایی از دسته‌بندی‌ها یا غذاهای مشخص شده اضافه کنید', - FOODS_MUST_HAVE_PICKUP_SERVE_FOR_COURIER = 'تمام غذاها باید قابلیت تحویل پیک داشته باشند. غذاهای زیر این قابلیت را ندارند: [foodTitles]', - FOOD_ONLY_AVAILABLE_DURING_MEAL_TIMES = 'غذا [foodTitle] فقط در ساعات وعده‌های غذایی (صبحانه، ناهار، عصرانه یا شام) در دسترس است. زمان فعلی خارج از ساعات وعده‌های غذایی است', - FOOD_ONLY_AVAILABLE_FOR_MEAL_TYPES = 'غذا [foodTitle] فقط برای [allowedMealTypes] در دسترس است. زمان فعلی [mealType] است که با این غذا سازگار نیست', - FOOD_ONLY_AVAILABLE_ON_DAYS = 'غذا [foodTitle] فقط در روزهای [allowedDays] در دسترس است. امروز [currentDay] است که این غذا در دسترس نیست', + PRODUCTS_MUST_HAVE_PICKUP_SERVE_FOR_COURIER = 'تمام محصولات باید قابلیت تحویل پیک داشته باشند. محصولات زیر این قابلیت را ندارند: [productTitles]', + PRODUCT_ONLY_AVAILABLE_DURING_MEAL_TIMES = 'محصول [productTitle] فقط در ساعات وعده‌های غذایی (صبحانه، ناهار، عصرانه یا شام) در دسترس است. زمان فعلی خارج از ساعات وعده‌های غذایی است', + PRODUCT_ONLY_AVAILABLE_FOR_MEAL_TYPES = 'محصول [productTitle] فقط برای [allowedMealTypes] در دسترس است. زمان فعلی [mealType] است که با این محصول سازگار نیست', + PRODUCT_ONLY_AVAILABLE_ON_DAYS = 'محصول [productTitle] فقط در روزهای [allowedDays] در دسترس است. امروز [currentDay] است که این محصول در دسترس نیست', } export const enum PaymentMessage { @@ -734,7 +734,7 @@ export const enum PaymentMessage { PAYMENT_METHOD_NOT_FOUND = 'روش پرداخت یافت نشد', GATEWAY_REQUIRED = 'درگاه پرداخت برای پرداخت آنلاین الزامی است', MERCHANT_ID_REQUIRED = 'شناسه مرچنت برای پرداخت آنلاین الزامی است', - RESTAURANT_DOMAIN_REQUIRED = 'دامنه رستوران برای پرداخت آنلاین الزامی است', + SHOP_DOMAIN_REQUIRED = 'دامنه فروشگاه برای پرداخت آنلاین الزامی است', WALLET_NOT_FOUND = 'کیف پول کاربر یافت نشد', INSUFFICIENT_WALLET_BALANCE = 'موجودی کیف پول کافی نیست', PAYMENT_NOT_FOUND = 'پرداخت یافت نشد', @@ -749,16 +749,16 @@ export const enum PaymentMessage { } export const enum DeliveryMessage { - RESTAURANT_NOT_FOUND = 'رستوران یافت نشد', + SHOP_NOT_FOUND = 'فروشگاه یافت نشد', DELIVERY_METHOD_NOT_FOUND = 'روش ارسال یافت نشد', } export const enum InventoryMessage { AVAILABLE_STOCK_EXCEEDS_TOTAL = 'موجودی موجود نمی‌تواند از موجودی کل بیشتر باشد', - FOOD_NOT_FOUND = 'غذا یافت نشد', - FOOD_NOT_BELONGS_TO_RESTAURANT = 'غذا به این رستوران تعلق ندارد', - RESTAURANT_NOT_FOUND = 'رستوران یافت نشد', - FOODS_NOT_FOUND = 'غذاها یافت نشدند', + PRODUCT_NOT_FOUND = 'محصول یافت نشد', + PRODUCT_NOT_BELONGS_TO_SHOP = 'محصول به این فروشگاه تعلق ندارد', + SHOP_NOT_FOUND = 'فروشگاه یافت نشد', + PRODUCTS_NOT_FOUND = 'محصولات یافت نشدند', } diff --git a/src/common/enums/permission.enum.ts b/src/common/enums/permission.enum.ts index 5dbb207..23ab58f 100644 --- a/src/common/enums/permission.enum.ts +++ b/src/common/enums/permission.enum.ts @@ -4,7 +4,7 @@ */ export enum Permission { MANAGE_PAGER = 'manage_pager', - // Food Management + // Product Management MANAGE_FOODS = 'manage_foods', MANAGE_CATEGORIES = 'manage_categories', diff --git a/src/core/interceptors/pagination.interceptor.ts b/src/core/interceptors/pagination.interceptor.ts index 84b169f..e109c01 100755 --- a/src/core/interceptors/pagination.interceptor.ts +++ b/src/core/interceptors/pagination.interceptor.ts @@ -2,7 +2,7 @@ // import { FastifyRequest } from 'fastify'; // import { Observable, map } from 'rxjs'; -// import { IPageFormat } from '../../../../danak_dsc_api/src/common/interfaces/IPagination'; +// import { IPageFormat } from '../../../../../danak_dsc_api/src/common/interfaces/IPagination'; // @Injectable() // export class PaginationInterceptor implements NestInterceptor { diff --git a/src/modules/admin/admin.module.ts b/src/modules/admin/admin.module.ts index c474d15..157a894 100644 --- a/src/modules/admin/admin.module.ts +++ b/src/modules/admin/admin.module.ts @@ -9,7 +9,7 @@ import { Permission } from '../roles/entities/permission.entity'; import { RolePermission } from '../roles/entities/rolePermission.entity'; import { AdminController } from './controllers/admin.controller'; import { UtilsModule } from '../utils/utils.module'; -import { RestaurantsModule } from '../restaurants/restaurants.module'; +import { RestaurantsModule } from ../../..shops.module'; import { AdminRole } from './entities/adminRole.entity'; @Module({ diff --git a/src/modules/admin/controllers/admin.controller.ts b/src/modules/admin/controllers/admin.controller.ts index 3bea57b..c54ef64 100644 --- a/src/modules/admin/controllers/admin.controller.ts +++ b/src/modules/admin/controllers/admin.controller.ts @@ -10,7 +10,7 @@ import { AdminId } from 'src/common/decorators/admin-id.decorator'; import { Admin } from '../entities/admin.entity'; import { Permission } from 'src/common/enums/permission.enum'; import { Permissions } from 'src/common/decorators/permissions.decorator'; -import { CreateMyRestaurantAdminDto } from '../dto/create-my-restaurant-admin.dto'; +import { CreateMyRestaurantAdminDto } from '../dto/create-my-shop-admin.dto'; @ApiBearerAuth() @ApiTags('admin') @@ -77,17 +77,17 @@ export class AdminController { /** Super Admin Endpoints */ @UseGuards(SuperAdminAuthGuard) - @Get('super-admin/restaurants/:restaurantId/admins') - @ApiOperation({ summary: 'Get admins for a specific restaurant (Super Admin only)' }) - @ApiParam({ name: 'restaurantId', description: 'Restaurant ID' }) + @Get('super-admin/shops/:restaurantId/admins') + @ApiOperation({ summary: 'Get admins for a specific shop (Super Admin only)' }) + @ApiParam({ name: 'restaurantId', description: 'Shop ID' }) getAdminForRestaurant(@Param('restaurantId') restaurantId: string): Promise { return this.adminService.getAdminsForRestaurantBySuperAdmin(restaurantId); } @UseGuards(SuperAdminAuthGuard) - @Post('super-admin/restaurants/:restaurantId/admins') - @ApiOperation({ summary: 'Create admin for a specific restaurant (Super Admin only)' }) - @ApiParam({ name: 'restaurantId', description: 'Restaurant ID' }) + @Post('super-admin/shops/:restaurantId/admins') + @ApiOperation({ summary: 'Create admin for a specific shop (Super Admin only)' }) + @ApiParam({ name: 'restaurantId', description: 'Shop ID' }) @ApiBody({ type: CreateMyRestaurantAdminDto }) createAdminForRestaurant( @Param('restaurantId') restaurantId: string, @@ -97,9 +97,9 @@ export class AdminController { } @UseGuards(SuperAdminAuthGuard) - @Delete('super-admin/restaurants/:restaurantId/admins/:adminId') - @ApiOperation({ summary: 'Revoke admin role from a restaurant (Super Admin only)' }) - @ApiParam({ name: 'restaurantId', description: 'Restaurant ID' }) + @Delete('super-admin/shops/:restaurantId/admins/:adminId') + @ApiOperation({ summary: 'Revoke admin role from a shop (Super Admin only)' }) + @ApiParam({ name: 'restaurantId', description: 'Shop ID' }) @ApiParam({ name: 'adminId', description: 'Admin ID' }) revokeAdminFromRestaurant( @Param('restaurantId') restaurantId: string, diff --git a/src/modules/admin/entities/admin.entity.ts b/src/modules/admin/entities/admin.entity.ts index a9d8a54..14cc592 100644 --- a/src/modules/admin/entities/admin.entity.ts +++ b/src/modules/admin/entities/admin.entity.ts @@ -1,7 +1,7 @@ import { Cascade, Collection, Entity, OneToMany, Property } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; import { AdminRole } from './adminRole.entity'; -import { normalizePhone } from '../../utils/phone.util'; +import { normalizePhone } from '../../../utils/phone.util'; @Entity({ tableName: 'admins' }) export class Admin extends BaseEntity { diff --git a/src/modules/admin/entities/adminRole.entity.ts b/src/modules/admin/entities/adminRole.entity.ts index 1e001c3..b53aaed 100644 --- a/src/modules/admin/entities/adminRole.entity.ts +++ b/src/modules/admin/entities/adminRole.entity.ts @@ -1,14 +1,14 @@ import { Entity, Index, ManyToOne, Unique } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; -import { Role } from '../../roles/entities/role.entity'; -import { Restaurant } from 'src/modules/restaurants/entities/restaurant.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; +import { Role } from '../../../roles/entities/role.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; import { Admin } from './admin.entity'; @Entity({ tableName: 'admin_roles' }) -@Unique({ properties: ['admin', 'restaurant'] }) -@Index({ properties: ['admin', 'restaurant'] }) +@Unique({ properties: ['admin', 'shop'] }) +@Index({ properties: ['admin', 'shop'] }) @Index({ properties: ['admin'] }) -@Index({ properties: ['restaurant'] }) +@Index({ properties: ['shop'] }) export class AdminRole extends BaseEntity { @ManyToOne(() => Admin) admin!: Admin; @@ -16,6 +16,6 @@ export class AdminRole extends BaseEntity { @ManyToOne(() => Role) role!: Role; - @ManyToOne(() => Restaurant, { nullable: true }) - restaurant?: Restaurant; + @ManyToOne(() => Shop, { nullable: true }) + shop?: Shop; } diff --git a/src/modules/admin/providers/admin.service.ts b/src/modules/admin/providers/admin.service.ts index dcda64d..ef1f4c5 100644 --- a/src/modules/admin/providers/admin.service.ts +++ b/src/modules/admin/providers/admin.service.ts @@ -2,14 +2,14 @@ import { ConflictException, Injectable, NotFoundException } from '@nestjs/common import { InjectRepository } from '@mikro-orm/nestjs'; import { EntityRepository } from '@mikro-orm/core'; import { Admin } from '../entities/admin.entity'; -import { Role } from '../../roles/entities/role.entity'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; +import { Role } from '../../../roles/entities/role.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; import { EntityManager } from '@mikro-orm/postgresql'; -import { CacheService } from '../../utils/cache.service'; -import { CreateMyRestaurantAdminDto } from '../dto/create-my-restaurant-admin.dto'; +import { CacheService } from '../../../utils/cache.service'; +import { CreateMyRestaurantAdminDto } from '../dto/create-my-shop-admin.dto'; import { UpdateAdminDto } from '../dto/update-admin.dto'; import { AdminRole } from '../entities/adminRole.entity'; -import { normalizePhone } from '../../utils/phone.util'; +import { normalizePhone } from '../../../utils/phone.util'; @Injectable() export class AdminService { @@ -29,14 +29,14 @@ export class AdminService { async findById(adminId: string, restId: string): Promise { const admin = await this.adminRepository.findOne( - { id: adminId, roles: { restaurant: { id: restId } } }, + { id: adminId, roles: { shop: { id: restId } } }, { populate: ['roles', 'roles.role'] }, ); return admin; } async findAllByRestaurantId(restId: string): Promise { - return this.adminRepository.find({ roles: { restaurant: { id: restId } } }, { populate: ['roles', 'roles.role'] }); + return this.adminRepository.find({ roles: { shop: { id: restId } } }, { populate: ['roles', 'roles.role'] }); } async createAdminForMyRestaurant(restId: string, dto: CreateMyRestaurantAdminDto) { @@ -57,19 +57,19 @@ export class AdminService { const role = await this.em.findOne(Role, { id: roleId, isSystem: false }); if (!role) throw new NotFoundException('Role not found'); - const restaurant = await this.em.findOne(Restaurant, { id: restId }); - if (!restaurant) throw new NotFoundException('Restaurant not found'); + const shop = await this.em.findOne(Shop, { id: restId }); + if (!shop) throw new NotFoundException('Shop not found'); let adminRole = await this.adminRoleRepository.findOne({ admin: admin, - restaurant: restaurant, + shop: shop, }); if (!adminRole) { adminRole = this.adminRoleRepository.create({ admin: admin, role, - restaurant, + shop, }); } else { adminRole.role = role; @@ -97,19 +97,19 @@ export class AdminService { const role = await this.em.findOne(Role, { id: roleId }); if (!role) throw new NotFoundException('Role* not found' + roleId); - const restaurant = await this.em.findOne(Restaurant, { id: restId }); - if (!restaurant) throw new NotFoundException('Restaurant not found'); + const shop = await this.em.findOne(Shop, { id: restId }); + if (!shop) throw new NotFoundException('Shop not found'); let adminRole = await this.adminRoleRepository.findOne({ admin: admin, - restaurant: restaurant, + shop: shop, }); if (!adminRole) { adminRole = this.adminRoleRepository.create({ admin: admin, role, - restaurant, + shop, }); } else { adminRole.role = role; @@ -120,16 +120,16 @@ export class AdminService { } async getAdminsForRestaurantBySuperAdmin(restId: string): Promise { - const restaurant = await this.em.findOne(Restaurant, { id: restId }); - if (!restaurant) throw new NotFoundException('Restaurant not found'); + const shop = await this.em.findOne(Shop, { id: restId }); + if (!shop) throw new NotFoundException('Shop not found'); - return this.adminRepository.find({ roles: { restaurant: restaurant } }, { populate: ['roles', 'roles.role'] }); + return this.adminRepository.find({ roles: { shop: shop } }, { populate: ['roles', 'roles.role'] }); } async update(adminId: string, restId: string, dto: UpdateAdminDto): Promise { const admin = await this.adminRepository.findOne( - { id: adminId, roles: { restaurant: { id: restId } } }, - { populate: ['roles', 'roles.role', 'roles.restaurant'] }, + { id: adminId, roles: { shop: { id: restId } } }, + { populate: ['roles', 'roles.role', 'roles.shop'] }, ); if (!admin) { @@ -161,23 +161,23 @@ export class AdminService { throw new NotFoundException('Role not found'); } - // Find existing AdminRole for this admin and restaurant + // Find existing AdminRole for this admin and shop const existingAdminRole = await this.em.findOne(AdminRole, { admin: { id: adminId }, - restaurant: { id: restId }, + shop: { id: restId }, }); if (existingAdminRole) { // Update existing role existingAdminRole.role = role; } else { - const restaurant = await this.em.findOne(Restaurant, { id: restId }); - if (!restaurant) throw new NotFoundException('Restaurant not found'); + const shop = await this.em.findOne(Shop, { id: restId }); + if (!shop) throw new NotFoundException('Shop not found'); // Create new AdminRole const newAdminRole = this.em.create(AdminRole, { admin, role, - restaurant, + shop, }); admin.roles.add(newAdminRole); } @@ -188,7 +188,7 @@ export class AdminService { } async remove(adminId: string, restId: string): Promise { - const adminRole = await this.adminRoleRepository.findOne({ admin: { id: adminId }, restaurant: { id: restId } }); + const adminRole = await this.adminRoleRepository.findOne({ admin: { id: adminId }, shop: { id: restId } }); if (!adminRole) { throw new NotFoundException('Admin role not found'); } diff --git a/src/modules/admin/repositories/admin.repository.ts b/src/modules/admin/repositories/admin.repository.ts index 04868a5..b6c90da 100644 --- a/src/modules/admin/repositories/admin.repository.ts +++ b/src/modules/admin/repositories/admin.repository.ts @@ -1,9 +1,9 @@ import { EntityManager, EntityRepository } from '@mikro-orm/postgresql'; import { Admin } from '../entities/admin.entity'; import { AdminRole } from '../entities/adminRole.entity'; -import { RestRepository } from '../../restaurants/repositories/rest.repository'; +import { RestRepository } from ../../..shops/repositories/rest.repository'; import { Injectable } from '@nestjs/common'; -import { normalizePhone } from '../../utils/phone.util'; +import { normalizePhone } from '../../../utils/phone.util'; @Injectable() export class AdminRepository extends EntityRepository { @@ -17,20 +17,20 @@ export class AdminRepository extends EntityRepository { async findByPhoneAndRestaurantSlug(phone: string, slug: string): Promise { console.log('phone', phone); const normalizedPhone = normalizePhone(phone); - // First, find the restaurant by slug using the same repository as auth service - const restaurant = await this.restRepository.findOne({ slug }); - if (!restaurant) { + // First, find the shop by slug using the same repository as auth service + const shop = await this.restRepository.findOne({ slug }); + if (!shop) { return null; } - // Find AdminRole that matches the admin phone and restaurant + // Find AdminRole that matches the admin phone and shop const adminRole = await this.em.findOne( AdminRole, { admin: { phone: normalizedPhone }, - restaurant: { id: restaurant.id }, + shop: { id: shop.id }, }, - { populate: ['admin', 'admin.roles', 'role', 'role.permissions', 'restaurant'] }, + { populate: ['admin', 'admin.roles', 'role', 'role.permissions', 'shop'] }, ); if (!adminRole || !adminRole.admin) { @@ -50,7 +50,7 @@ export class AdminRepository extends EntityRepository { async findAdminsWithPermission(restaurantId: string, permission: string): Promise { const admins = await this.em.find( Admin, - { roles: { restaurant: { id: restaurantId }, role: { permissions: { name: permission } } } }, + { roles: { shop: { id: restaurantId }, role: { permissions: { name: permission } } } }, { populate: ['roles', 'roles.role', 'roles.role.permissions'] }, ); return admins; diff --git a/src/modules/admin/transformers/admin-detail.transformer.ts b/src/modules/admin/transformers/admin-detail.transformer.ts index 84704a0..45b4718 100644 --- a/src/modules/admin/transformers/admin-detail.transformer.ts +++ b/src/modules/admin/transformers/admin-detail.transformer.ts @@ -10,7 +10,7 @@ export interface AdminDetailResponse { name: string; }; permissions: string[]; - restaurant?: { + shop?: { id: string; name: string; slug: string; @@ -38,10 +38,10 @@ export class AdminDetailTransformer { name: role.name, }, permissions: role.permissions.getItems().map(p => p.name) || [], - restaurant: { - id: role.restaurant?.id || '', - name: role.restaurant?.name || '', - slug: role.restaurant?.slug || '', + shop: { + id: role.shop?.id || '', + name: role.shop?.name || '', + slug: role.shop?.slug || '', }, }; } diff --git a/src/modules/auth/auth.module.ts b/src/modules/auth/auth.module.ts index ebb6d27..1ecac38 100644 --- a/src/modules/auth/auth.module.ts +++ b/src/modules/auth/auth.module.ts @@ -7,7 +7,7 @@ import { JwtModule } from '@nestjs/jwt'; import { ConfigService } from '@nestjs/config'; import { AdminModule } from '../admin/admin.module'; import { TokensService } from './services/tokens.service'; -import { RestaurantsModule } from '../restaurants/restaurants.module'; +import { RestaurantsModule } from ../../..shops.module'; import { MikroOrmModule } from '@mikro-orm/nestjs'; import { User } from '../users/entities/user.entity'; import { AdminAuthGuard } from './guards/adminAuth.guard'; diff --git a/src/modules/auth/controllers/auth.controller.ts b/src/modules/auth/controllers/auth.controller.ts index 6a4b7b9..b48fd81 100644 --- a/src/modules/auth/controllers/auth.controller.ts +++ b/src/modules/auth/controllers/auth.controller.ts @@ -63,7 +63,7 @@ export class AuthController { @UseGuards(SuperAdminAuthGuard) @Post('super-admin/auth/direct-login') @ApiOperation({ summary: 'Direct login for DSC - returns login credentials' }) - @ApiBody({ type: DirectLoginDto, description: 'Phone number and restaurant slug for direct login' }) + @ApiBody({ type: DirectLoginDto, description: 'Phone number and shop slug for direct login' }) directloginForDsc(@Body() dto: DirectLoginDto) { return this.authService.loginAdminForDsc(dto.phone, dto.slug); } diff --git a/src/modules/auth/dto/direct-login.dto.ts b/src/modules/auth/dto/direct-login.dto.ts index 05833cd..93eeede 100644 --- a/src/modules/auth/dto/direct-login.dto.ts +++ b/src/modules/auth/dto/direct-login.dto.ts @@ -10,6 +10,6 @@ export class DirectLoginDto { @IsNotEmpty() @IsString() - @ApiProperty({ example: 'zhivan', description: 'Restaurant slug' }) + @ApiProperty({ example: 'zhivan', description: 'Shop slug' }) slug: string; } diff --git a/src/modules/auth/dto/request-otp.dto.ts b/src/modules/auth/dto/request-otp.dto.ts index 83984af..72168f6 100644 --- a/src/modules/auth/dto/request-otp.dto.ts +++ b/src/modules/auth/dto/request-otp.dto.ts @@ -10,6 +10,6 @@ export class RequestOtpDto { @IsNotEmpty() @IsString() - @ApiProperty({ example: 'zhivan', description: 'restaurant slug' }) + @ApiProperty({ example: 'zhivan', description: 'shop slug' }) slug: string; } diff --git a/src/modules/auth/dto/verify-otp.dto.ts b/src/modules/auth/dto/verify-otp.dto.ts index ec1c6f1..84f5596 100644 --- a/src/modules/auth/dto/verify-otp.dto.ts +++ b/src/modules/auth/dto/verify-otp.dto.ts @@ -16,6 +16,6 @@ export class VerifyOtpDto { @IsNotEmpty() @IsString() - @ApiProperty({ example: 'zhivan', description: 'restaurant slug' }) + @ApiProperty({ example: 'zhivan', description: 'shop slug' }) slug: string; } diff --git a/src/modules/auth/entities/refresh-token.entity.ts b/src/modules/auth/entities/refresh-token.entity.ts index 6ff4db1..b980d9f 100644 --- a/src/modules/auth/entities/refresh-token.entity.ts +++ b/src/modules/auth/entities/refresh-token.entity.ts @@ -1,6 +1,6 @@ import { Entity, Enum, Index, Property } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; export enum RefreshTokenType { USER = 'user', diff --git a/src/modules/auth/guards/adminAuth.guard.ts b/src/modules/auth/guards/adminAuth.guard.ts index 1683ea9..7410aa3 100644 --- a/src/modules/auth/guards/adminAuth.guard.ts +++ b/src/modules/auth/guards/adminAuth.guard.ts @@ -12,7 +12,7 @@ import { Request } from 'express'; import { JwtService } from '@nestjs/jwt'; import { ConfigService } from '@nestjs/config'; import { IAdminTokenPayload } from '../interfaces/IToken-payload'; -import { PERMISSIONS_KEY } from '../../../common/decorators/permissions.decorator'; +import { PERMISSIONS_KEY } from '../../../../common/decorators/permissions.decorator'; import { PermissionsService } from 'src/modules/roles/providers/permissions.service'; export interface AdminAuthRequest extends Request { diff --git a/src/modules/auth/services/auth.service.ts b/src/modules/auth/services/auth.service.ts index b6844eb..6fce2c0 100644 --- a/src/modules/auth/services/auth.service.ts +++ b/src/modules/auth/services/auth.service.ts @@ -1,17 +1,17 @@ import { Injectable, BadRequestException } from '@nestjs/common'; import { RequestOtpDto } from '../dto/request-otp.dto'; -import { CacheService } from '../../utils/cache.service'; -import { SmsService } from '../../notifications/services/sms.service'; -import { UserService } from '../../users/providers/user.service'; +import { CacheService } from '../../../utils/cache.service'; +import { SmsService } from '../../../notifications/services/sms.service'; +import { UserService } from '../../../users/providers/user.service'; import { randomInt } from 'crypto'; import { TokensService } from './tokens.service'; -import { RestRepository } from 'src/modules/restaurants/repositories/rest.repository'; +import { RestRepository } from ../../..shops/repositories/rest.repository'; import { AuthMessage, RestMessage } from 'src/common/enums/message.enum'; import { AdminRepository } from 'src/modules/admin/repositories/admin.repository'; import { AdminLoginTransformer } from '../transformers/admin-login.transformer'; import { UserLoginTransformer } from '../transformers/user-login.transformer'; import { ConfigService } from '@nestjs/config'; -import { normalizePhone } from '../../utils/phone.util'; +import { normalizePhone } from '../../../utils/phone.util'; @Injectable() export class AuthService { diff --git a/src/modules/auth/services/tokens.service.ts b/src/modules/auth/services/tokens.service.ts index 69a0412..d929029 100755 --- a/src/modules/auth/services/tokens.service.ts +++ b/src/modules/auth/services/tokens.service.ts @@ -6,10 +6,10 @@ import { ConfigService } from '@nestjs/config'; import { JwtService } from '@nestjs/jwt'; import dayjs from 'dayjs'; -import { AuthMessage } from '../../../common/enums/message.enum'; +import { AuthMessage } from '../../../../common/enums/message.enum'; import { RefreshToken, RefreshTokenType } from '../entities/refresh-token.entity'; import { IAdminTokenPayload, ITokenPayload } from '../interfaces/IToken-payload'; -import { Restaurant } from 'src/modules/restaurants/entities/restaurant.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; @Injectable() export class TokensService { @@ -109,16 +109,16 @@ export class TokensService { const restId = token.restId; const isAdmin = token.type === RefreshTokenType.ADMIN; - // Verify restaurant still exists - const restaurant = await em.findOne(Restaurant, { id: restId }); - if (!restaurant) { + // Verify shop still exists + const shop = await em.findOne(Shop, { id: restId }); + if (!shop) { throw new UnauthorizedException(AuthMessage.INVALID_REFRESH_TOKEN); } try { // Generate new tokens first (before removing old token) // Pass the transaction EntityManager to ensure operations are within the transaction - const tokens = await this.generateAccessAndRefreshToken(ownerId, restaurant.id, isAdmin, restaurant.slug, em); + const tokens = await this.generateAccessAndRefreshToken(ownerId, shop.id, isAdmin, shop.slug, em); // Remove old token only after new token is created em.remove(token); diff --git a/src/modules/auth/transformers/admin-login.transformer.ts b/src/modules/auth/transformers/admin-login.transformer.ts index c58ed4b..9bf97ca 100644 --- a/src/modules/auth/transformers/admin-login.transformer.ts +++ b/src/modules/auth/transformers/admin-login.transformer.ts @@ -1,5 +1,5 @@ -import type { Admin } from '../../admin/entities/admin.entity'; -import type { Restaurant } from '../../restaurants/entities/restaurant.entity'; +import type { Admin } from '../../../admin/entities/admin.entity'; +import type { Shop } from ../../..shops/entities/shop.entity'; export interface AdminLoginResponse { id: string; @@ -8,7 +8,7 @@ export interface AdminLoginResponse { phone: string; role: string; permissions: string[]; - restaurant?: { + shop?: { id: string; name: string; slug: string; @@ -16,9 +16,9 @@ export interface AdminLoginResponse { } export class AdminLoginTransformer { - static async transform(admin: Admin, restaurant?: Restaurant): Promise { - // Find the AdminRole that matches the restaurant (or get the first one) - let adminRole = admin.roles.getItems().find(r => (restaurant ? r.restaurant?.id === restaurant.id : true)); + static async transform(admin: Admin, shop?: Shop): Promise { + // Find the AdminRole that matches the shop (or get the first one) + let adminRole = admin.roles.getItems().find(r => (shop ? r.shop?.id === shop.id : true)); // If no match found, get the first one if (!adminRole && admin.roles.getItems().length > 0) { @@ -33,11 +33,11 @@ export class AdminLoginTransformer { phone: admin.phone, role: '', permissions: [], - restaurant: restaurant + shop: shop ? { - id: restaurant.id, - name: restaurant.name, - slug: restaurant.slug, + id: shop.id, + name: shop.name, + slug: shop.slug, } : undefined, }; @@ -53,11 +53,11 @@ export class AdminLoginTransformer { phone: admin.phone, role: '', permissions: [], - restaurant: restaurant + shop: shop ? { - id: restaurant.id, - name: restaurant.name, - slug: restaurant.slug, + id: shop.id, + name: shop.name, + slug: shop.slug, } : undefined, }; @@ -81,11 +81,11 @@ export class AdminLoginTransformer { phone: admin.phone, role: role.name, permissions, - restaurant: restaurant + shop: shop ? { - id: restaurant.id, - name: restaurant.name, - slug: restaurant.slug, + id: shop.id, + name: shop.name, + slug: shop.slug, } : undefined, }; diff --git a/src/modules/auth/transformers/user-login.transformer.ts b/src/modules/auth/transformers/user-login.transformer.ts index 6148def..d025706 100644 --- a/src/modules/auth/transformers/user-login.transformer.ts +++ b/src/modules/auth/transformers/user-login.transformer.ts @@ -1,5 +1,5 @@ -import type { User } from '../../users/entities/user.entity'; -import type { Restaurant } from '../../restaurants/entities/restaurant.entity'; +import type { User } from '../../../users/entities/user.entity'; +import type { Shop } from ../../..shops/entities/shop.entity'; export interface UserLoginResponse { id: string; @@ -8,7 +8,7 @@ export interface UserLoginResponse { phone: string; isActive?: boolean; - restaurant: { + shop: { id: string; name: string; slug: string; @@ -16,17 +16,17 @@ export interface UserLoginResponse { } export class UserLoginTransformer { - static transform(user: User, restaurant: Restaurant): UserLoginResponse { + static transform(user: User, shop: Shop): UserLoginResponse { return { id: user.id, firstName: user.firstName, lastName: user.lastName, phone: user.phone, isActive: user.isActive, - restaurant: { - id: restaurant.id, - name: restaurant.name, - slug: restaurant.slug, + shop: { + id: shop.id, + name: shop.name, + slug: shop.slug, }, }; } diff --git a/src/modules/cart/cart.module.ts b/src/modules/cart/cart.module.ts index 0549845..516e1bf 100644 --- a/src/modules/cart/cart.module.ts +++ b/src/modules/cart/cart.module.ts @@ -2,8 +2,8 @@ import { Module } from '@nestjs/common'; import { MikroOrmModule } from '@mikro-orm/nestjs'; import { CartService } from './providers/cart.service'; import { CartController } from './controllers/cart.controller'; -import { Food } from '../foods/entities/food.entity'; -import { Restaurant } from '../restaurants/entities/restaurant.entity'; +import { Product } from '../products/entities/product.entity'; +import { Shop } from '../shops/entities/shop.entity'; import { PaymentMethod } from '../payments/entities/payment-method.entity'; import { UserAddress } from '../users/entities/user-address.entity'; import { User } from '../users/entities/user.entity'; @@ -24,8 +24,8 @@ import { WalletTransaction } from '../users/entities/wallet-transaction.entity'; @Module({ imports: [ MikroOrmModule.forFeature([ - Food, - Restaurant, + Product, + Shop, PaymentMethod, UserAddress, User, diff --git a/src/modules/cart/controllers/cart.controller.ts b/src/modules/cart/controllers/cart.controller.ts index 59ce4bf..de9d959 100644 --- a/src/modules/cart/controllers/cart.controller.ts +++ b/src/modules/cart/controllers/cart.controller.ts @@ -3,7 +3,7 @@ import { CartService } from '../providers/cart.service'; import { BulkAddItemsToCartDto } from '../dto/bulk-add-items.dto'; import { ApplyCouponDto } from '../dto/apply-coupon.dto'; import { ApiTags, ApiOperation, ApiBearerAuth, ApiBody, ApiParam, ApiHeader } from '@nestjs/swagger'; -import { AuthGuard } from '../../auth/guards/auth.guard'; +import { AuthGuard } from '../../../auth/guards/auth.guard'; import { UserId } from 'src/common/decorators/user-id.decorator'; import { RestId } from 'src/common/decorators/rest-id.decorator'; import { SetAllCartParmsDto } from '../dto/set-all-cart-params.dto'; @@ -17,7 +17,7 @@ export class CartController { constructor(private readonly cartService: CartService) {} @Get() - @ApiOperation({ summary: 'Get cart for current user and restaurant' }) + @ApiOperation({ summary: 'Get cart for current user and shop' }) @ApiHeader(API_HEADER_SLUG) async findOne(@UserId() userId: string, @RestId() restaurantId: string) { return this.cartService.getOrCreateCart(userId, restaurantId); @@ -26,7 +26,7 @@ export class CartController { @Post('items/:foodId/increment') @ApiOperation({ summary: 'Increment item quantity in cart by 1' }) @ApiHeader(API_HEADER_SLUG) - @ApiParam({ name: 'foodId', description: 'Food ID to increment in cart' }) + @ApiParam({ name: 'foodId', description: 'Product ID to increment in cart' }) async incrementItem(@UserId() userId: string, @RestId() restaurantId: string, @Param('foodId') foodId: string) { return this.cartService.incrementItem(userId, restaurantId, foodId, 1); } @@ -34,7 +34,7 @@ export class CartController { @Post('items/:foodId/decrement') @ApiOperation({ summary: 'Decrement item quantity in cart by 1 (removes item if quantity reaches 0)' }) @ApiHeader(API_HEADER_SLUG) - @ApiParam({ name: 'foodId', description: 'Food ID to decrement in cart' }) + @ApiParam({ name: 'foodId', description: 'Product ID to decrement in cart' }) async decrementItem(@UserId() userId: string, @RestId() restaurantId: string, @Param('foodId') foodId: string) { return this.cartService.decrementItem(userId, restaurantId, foodId); } @@ -54,7 +54,7 @@ export class CartController { @Delete('items/:foodId') @ApiOperation({ summary: 'Remove item from cart' }) @ApiHeader(API_HEADER_SLUG) - @ApiParam({ name: 'foodId', description: 'Food ID in the cart' }) + @ApiParam({ name: 'foodId', description: 'Product ID in the cart' }) async removeItem(@UserId() userId: string, @RestId() restaurantId: string, @Param('foodId') foodId: string) { return this.cartService.removeItem(userId, restaurantId, foodId); } diff --git a/src/modules/cart/dto/bulk-add-items.dto.ts b/src/modules/cart/dto/bulk-add-items.dto.ts index 71ac392..347edbd 100644 --- a/src/modules/cart/dto/bulk-add-items.dto.ts +++ b/src/modules/cart/dto/bulk-add-items.dto.ts @@ -3,14 +3,14 @@ import { IsNotEmpty, IsArray, ValidateNested, ArrayMinSize, IsInt, Min, IsString import { Type } from 'class-transformer'; class AddItemToCartDto { - @ApiProperty({ description: 'Quantity of the food item', example: 1, minimum: 1 }) + @ApiProperty({ description: 'Quantity of the product item', example: 1, minimum: 1 }) @IsNotEmpty() @Type(() => Number) @IsInt() @Min(1) quantity!: number; - @ApiProperty({ description: 'Food ID' }) + @ApiProperty({ description: 'Product ID' }) @IsNotEmpty() @IsString() foodId!: string; @@ -21,8 +21,8 @@ export class BulkAddItemsToCartDto { description: 'Array of items to add to cart', type: [AddItemToCartDto], example: [ - { foodId: 'food-123', quantity: 2 }, - { foodId: 'food-456', quantity: 1 }, + { foodId: 'product-123', quantity: 2 }, + { foodId: 'product-456', quantity: 1 }, ], }) @IsNotEmpty() diff --git a/src/modules/cart/dto/create-cart.dto.ts b/src/modules/cart/dto/create-cart.dto.ts index ec5763b..e263c9d 100644 --- a/src/modules/cart/dto/create-cart.dto.ts +++ b/src/modules/cart/dto/create-cart.dto.ts @@ -3,12 +3,12 @@ import { IsNotEmpty, IsString, IsArray, ValidateNested, IsInt, Min } from 'class import { Type } from 'class-transformer'; export class CartItemDto { - @ApiProperty({ description: 'Food ID' }) + @ApiProperty({ description: 'Product ID' }) @IsNotEmpty() @IsString() foodId!: string; - @ApiProperty({ description: 'Quantity of the food item', example: 2, minimum: 1 }) + @ApiProperty({ description: 'Quantity of the product item', example: 2, minimum: 1 }) @IsNotEmpty() @Type(() => Number) @IsInt() diff --git a/src/modules/cart/providers/cart-calculation.service.ts b/src/modules/cart/providers/cart-calculation.service.ts index bd2e714..b4acf15 100644 --- a/src/modules/cart/providers/cart-calculation.service.ts +++ b/src/modules/cart/providers/cart-calculation.service.ts @@ -1,12 +1,12 @@ import { Injectable } from '@nestjs/common'; import { EntityManager } from '@mikro-orm/postgresql'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; +import { Shop } from '../../shops/entities/shop.entity'; import { Delivery } from '../../delivery/entities/delivery.entity'; import { DeliveryFeeTypeEnum } from '../../delivery/interface/delivery'; import { CouponType } from '../../coupons/interface/coupon'; -import { Food } from '../../foods/entities/food.entity'; +import { Product } from '../../products/entities/product.entity'; import { Cart } from '../interfaces/cart.interface'; -import { CouponService } from '../../coupons/providers/coupon.service'; +import { CouponService } from '../../../coupons/providers/coupon.service'; import { GeographicUtils } from '../utils/geographic.utils'; @Injectable() @@ -59,7 +59,7 @@ export class CartCalculationService { if (!cart.coupon || !coupon) return 0; const hasCategoryRestriction = (coupon.foodCategories?.length ?? 0) > 0; - const hasFoodRestriction = (coupon.foods?.length ?? 0) > 0; + const hasFoodRestriction = (coupon.products?.length ?? 0) > 0; let eligibleItemsTotal = subTotal; let eligibleItemsDiscount = itemsDiscount; @@ -71,12 +71,12 @@ export class CartCalculationService { const foodMap = await this.getFoodsInCartWithCategories(cart); for (const item of cart.items) { - const food = foodMap.get(item.foodId); - if (!food) continue; + const product = foodMap.get(item.foodId); + if (!product) continue; const matchesCategory = - hasCategoryRestriction && food.category && (coupon.foodCategories ?? []).includes(food.category.id); - const matchesFood = hasFoodRestriction && (coupon.foods ?? []).includes(food.id); + hasCategoryRestriction && product.category && (coupon.foodCategories ?? []).includes(product.category.id); + const matchesFood = hasFoodRestriction && (coupon.products ?? []).includes(product.id); if (matchesCategory || matchesFood) { const unitPrice = Number(item.price) || 0; @@ -104,8 +104,8 @@ export class CartCalculationService { * Calculate tax */ async calculateTax(restaurantId: string, amountAfterDiscounts: number): Promise { - const restaurant = await this.em.findOne(Restaurant, { id: restaurantId }); - const vat = restaurant?.vat ? Number(restaurant.vat) : 0; + const shop = await this.em.findOne(Shop, { id: restaurantId }); + const vat = shop?.vat ? Number(shop.vat) : 0; if (!vat || vat <= 0) return 0; return (Math.max(0, amountAfterDiscounts) * vat) / 100; } @@ -117,7 +117,7 @@ export class CartCalculationService { const deliveryMethodId = cart.deliveryMethodId; if (!deliveryMethodId) return 0; - const deliveryMethod = await this.em.findOne(Delivery, { id: deliveryMethodId }, { populate: ['restaurant'] }); + const deliveryMethod = await this.em.findOne(Delivery, { id: deliveryMethodId }, { populate: ['shop'] }); if (!deliveryMethod || !deliveryMethod.enabled) return 0; // If not distance based, return fixed delivery fee @@ -125,11 +125,11 @@ export class CartCalculationService { return Number(deliveryMethod.deliveryFee) || 0; } - // For distance based calculation we need restaurant and user coordinates - const restaurant = (deliveryMethod as any).restaurant as Restaurant | undefined; + // For distance based calculation we need shop and user coordinates + const shop = (deliveryMethod as any).shop as Shop | undefined; const userAddr = cart.userAddress; - if (!restaurant || restaurant.latitude == null || restaurant.longitude == null) { + if (!shop || shop.latitude == null || shop.longitude == null) { // fallback to configured fixed fee when coordinates are missing return Number(deliveryMethod.deliveryFee) || 0; } @@ -138,8 +138,8 @@ export class CartCalculationService { return Number(deliveryMethod.deliveryFee) || 0; } - const restLat = Number(restaurant.latitude); - const restLng = Number(restaurant.longitude); + const restLat = Number(shop.latitude); + const restLng = Number(shop.longitude); const userLat = Number(userAddr.latitude); const userLng = Number(userAddr.longitude); @@ -190,7 +190,7 @@ export class CartCalculationService { startDate?: Date; endDate?: Date; foodCategories?: string[]; - foods?: string[]; + products?: string[]; } | null> { if (!cart.coupon) return null; @@ -215,7 +215,7 @@ export class CartCalculationService { startDate: c.startDate, endDate: c.endDate, foodCategories: c.foodCategories, - foods: c.foods, + products: c.products, }; } catch { cart.coupon = undefined; @@ -224,14 +224,14 @@ export class CartCalculationService { } /** - * Get foods in cart with categories + * Get products in cart with categories */ - private async getFoodsInCartWithCategories(cart: Cart): Promise> { + private async getFoodsInCartWithCategories(cart: Cart): Promise> { const foodIds = cart.items.map(item => item.foodId); if (foodIds.length === 0) return new Map(); - const foods = await this.em.find(Food, { id: { $in: foodIds } }, { populate: ['category'] }); - return new Map(foods.map(f => [f.id, f])); + const products = await this.em.find(Product, { id: { $in: foodIds } }, { populate: ['category'] }); + return new Map(products.map(f => [f.id, f])); } /** diff --git a/src/modules/cart/providers/cart-item.service.ts b/src/modules/cart/providers/cart-item.service.ts index 26c2ed1..5c21c42 100644 --- a/src/modules/cart/providers/cart-item.service.ts +++ b/src/modules/cart/providers/cart-item.service.ts @@ -1,5 +1,5 @@ import { Injectable, NotFoundException } from '@nestjs/common'; -import { Food } from '../../foods/entities/food.entity'; +import { Product } from ../../..products/entities/product.entity'; import { Cart, CartItem } from '../interfaces/cart.interface'; import { CartValidationService } from './cart-validation.service'; import { CartCalculationService } from './cart-calculation.service'; @@ -13,15 +13,15 @@ export class CartItemService { ) {} /** - * Create a new cart item from food + * Create a new cart item from product */ - createCartItem(food: Food, quantity: number): CartItem { - const itemPrice = food.price || 0; - const itemDiscount = food.discount || 0; + createCartItem(product: Product, quantity: number): CartItem { + const itemPrice = product.price || 0; + const itemDiscount = product.discount || 0; return { - foodId: food.id, - foodTitle: food.title, + foodId: product.id, + foodTitle: product.title, quantity, price: itemPrice, discount: itemDiscount, @@ -30,15 +30,15 @@ export class CartItemService { } /** - * Build cart item from food (updating existing item if provided) + * Build cart item from product (updating existing item if provided) */ - buildCartItemFromFood(food: Food, quantity: number, previous?: CartItem): CartItem { - const itemPrice = food.price || 0; - const itemDiscount = food.discount || 0; + buildCartItemFromFood(product: Product, quantity: number, previous?: CartItem): CartItem { + const itemPrice = product.price || 0; + const itemDiscount = product.discount || 0; return { ...(previous ?? ({} as CartItem)), - foodId: food.id, - foodTitle: food.title, + foodId: product.id, + foodTitle: product.title, quantity, price: itemPrice, discount: itemDiscount, @@ -57,19 +57,19 @@ export class CartItemService { * Add or increment item in cart */ async addOrIncrementItem(cart: Cart, foodId: string, restaurantId: string, quantityToAdd: number): Promise { - const food = await this.validationService.validateAndGetFood(foodId, restaurantId, quantityToAdd); + const product = await this.validationService.validateAndGetFood(foodId, restaurantId, quantityToAdd); - const index = this.getItemIndex(cart, food.id); + const index = this.getItemIndex(cart, product.id); if (index < 0) { - cart.items.push(this.createCartItem(food, quantityToAdd)); + cart.items.push(this.createCartItem(product, quantityToAdd)); return; } const existingItem = cart.items[index]; const newQuantity = existingItem.quantity + quantityToAdd; - this.validationService.validateStock(food, newQuantity); - cart.items[index] = this.buildCartItemFromFood(food, newQuantity, existingItem); + this.validationService.validateStock(product, newQuantity); + cart.items[index] = this.buildCartItemFromFood(product, newQuantity, existingItem); } /** @@ -100,8 +100,8 @@ export class CartItemService { return; } - const food = await this.validationService.getFoodOrFail(foodId); - cart.items[itemIndex] = this.buildCartItemFromFood(food, newQuantity, existingItem); + const product = await this.validationService.getFoodOrFail(foodId); + cart.items[itemIndex] = this.buildCartItemFromFood(product, newQuantity, existingItem); } } diff --git a/src/modules/cart/providers/cart-validation.service.ts b/src/modules/cart/providers/cart-validation.service.ts index 33bb42f..1989fbe 100644 --- a/src/modules/cart/providers/cart-validation.service.ts +++ b/src/modules/cart/providers/cart-validation.service.ts @@ -1,15 +1,15 @@ import { Injectable, NotFoundException, BadRequestException } from '@nestjs/common'; import { EntityManager } from '@mikro-orm/postgresql'; -import { Food } from '../../foods/entities/food.entity'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; -import { UserAddress } from '../../users/entities/user-address.entity'; -import { User } from '../../users/entities/user.entity'; -import { PaymentMethod } from '../../payments/entities/payment-method.entity'; -import { Delivery } from '../../delivery/entities/delivery.entity'; -import { DeliveryMethodEnum } from '../../delivery/interface/delivery'; -import { PointTransaction } from '../../users/entities/point-transaction.entity'; -import { Order } from '../../orders/entities/order.entity'; -import { OrderStatus } from '../../orders/interface/order.interface'; +import { Product } from ../../..products/entities/product.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; +import { UserAddress } from '../../../users/entities/user-address.entity'; +import { User } from '../../../users/entities/user.entity'; +import { PaymentMethod } from '../../../payments/entities/payment-method.entity'; +import { Delivery } from '../../../delivery/entities/delivery.entity'; +import { DeliveryMethodEnum } from '../../../delivery/interface/delivery'; +import { PointTransaction } from '../../../users/entities/point-transaction.entity'; +import { Order } from '../../../orders/entities/order.entity'; +import { OrderStatus } from '../../../orders/interface/order.interface'; import { Cart } from '../interfaces/cart.interface'; import { GeographicUtils } from '../utils/geographic.utils'; import { CartMessage } from 'src/common/enums/message.enum'; @@ -23,33 +23,33 @@ export class CartValidationService { ) { } /** - * Validate food exists, belongs to restaurant, has inventory, and check stock + * Validate product exists, belongs to shop, has inventory, and check stock */ - async validateAndGetFood(foodId: string, restaurantId: string, quantity: number): Promise { - const food = await this.em.findOne(Food, { id: foodId }, { populate: ['restaurant', 'inventory'] }); - if (!food) { + async validateAndGetFood(foodId: string, restaurantId: string, quantity: number): Promise { + const product = await this.em.findOne(Product, { id: foodId }, { populate: ['shop', 'inventory'] }); + if (!product) { throw new NotFoundException(CartMessage.FOOD_NOT_FOUND); } - if (food.restaurant.id !== restaurantId) { + if (product.shop.id !== restaurantId) { throw new BadRequestException(CartMessage.FOOD_NOT_BELONGS_TO_RESTAURANT); } - if (!food.inventory) { + if (!product.inventory) { throw new BadRequestException(CartMessage.FOOD_NO_INVENTORY); } - this.validateStock(food, quantity); - return food; + this.validateStock(product, quantity); + return product; } /** - * Validate stock availability for food + * Validate stock availability for product */ - validateStock(food: Food, quantity: number): void { - const availableStock = food.inventory!.availableStock; + validateStock(product: Product, quantity: number): void { + const availableStock = product.inventory!.availableStock; if (availableStock < quantity) { - throw new BadRequestException(CartMessage.INSUFFICIENT_STOCK + food.title); + throw new BadRequestException(CartMessage.INSUFFICIENT_STOCK + product.title); } } @@ -76,25 +76,25 @@ export class CartValidationService { } /** - * Get food or throw if not found + * Get product or throw if not found */ - async getFoodOrFail(foodId: string): Promise { - const food = await this.em.findOne(Food, { id: foodId }); - if (!food) { + async getFoodOrFail(foodId: string): Promise { + const product = await this.em.findOne(Product, { id: foodId }); + if (!product) { throw new NotFoundException(CartMessage.FOOD_NOT_FOUND); } - return food; + return product; } /** - * Get restaurant or throw if not found + * Get shop or throw if not found */ - async getRestaurantOrFail(restaurantId: string): Promise { - const restaurant = await this.em.findOne(Restaurant, { id: restaurantId }); - if (!restaurant) { + async getRestaurantOrFail(restaurantId: string): Promise { + const shop = await this.em.findOne(Shop, { id: restaurantId }); + if (!shop) { throw new NotFoundException(CartMessage.RESTAURANT_NOT_FOUND); } - return restaurant; + return shop; } /** @@ -107,7 +107,7 @@ export class CartValidationService { } /** - * Assert address is inside restaurant service area + * Assert address is inside shop service area */ async assertAddressInsideServiceArea( restaurantId: string, @@ -118,9 +118,9 @@ export class CartValidationService { throw new BadRequestException(CartMessage.ADDRESS_NO_COORDINATES); } - const restaurant = await this.getRestaurantOrFail(restaurantId); + const shop = await this.getRestaurantOrFail(restaurantId); - const serviceArea = restaurant.serviceArea; + const serviceArea = shop.serviceArea; // If no service area is defined, assume service is available everywhere if (!serviceArea || !serviceArea.coordinates || !Array.isArray(serviceArea.coordinates)) return; @@ -142,7 +142,7 @@ export class CartValidationService { } /** - * Get delivery method for restaurant or throw if not found + * Get delivery method for shop or throw if not found */ async getDeliveryMethodForRestaurantOrFail( restaurantId: string, @@ -150,7 +150,7 @@ export class CartValidationService { ): Promise { const deliveryMethod = await this.em.findOne(Delivery, { id: deliveryMethodId, - restaurant: { id: restaurantId }, + shop: { id: restaurantId }, }); if (!deliveryMethod) { @@ -166,8 +166,8 @@ export class CartValidationService { async getEnabledDeliveryMethodOrFail(restaurantId: string, deliveryMethodId: string): Promise { const deliveryMethod = await this.em.findOne( Delivery, - { id: deliveryMethodId, restaurant: { id: restaurantId } }, - { populate: ['restaurant'] }, + { id: deliveryMethodId, shop: { id: restaurantId } }, + { populate: ['shop'] }, ); if (!deliveryMethod) { throw new NotFoundException(CartMessage.DELIVERY_METHOD_NOT_FOUND); @@ -203,8 +203,8 @@ export class CartValidationService { async getEnabledPaymentMethodOrFail(restaurantId: string, paymentMethodId: string): Promise { const paymentMethod = await this.em.findOne( PaymentMethod, - { id: paymentMethodId, restaurant: { id: restaurantId } }, - { populate: ['restaurant'] }, + { id: paymentMethodId, shop: { id: restaurantId } }, + { populate: ['shop'] }, ); if (!paymentMethod) { throw new NotFoundException(CartMessage.PAYMENT_METHOD_NOT_FOUND); @@ -250,10 +250,10 @@ export class CartValidationService { async assertCouponMatchesCartIfRestricted( cart: Cart, foodCategories?: string[] | null, - foods?: string[] | null, + products?: string[] | null, ): Promise { const categoryRestriction = foodCategories?.filter(Boolean) ?? []; - const foodRestriction = foods?.filter(Boolean) ?? []; + const foodRestriction = products?.filter(Boolean) ?? []; const hasCategoryRestriction = categoryRestriction.length > 0; const hasFoodRestriction = foodRestriction.length > 0; if (!hasCategoryRestriction && !hasFoodRestriction) return; @@ -261,11 +261,11 @@ export class CartValidationService { const foodMap = await this.getFoodsInCartWithCategories(cart); for (const item of cart.items) { - const food = foodMap.get(item.foodId); - if (!food) continue; + const product = foodMap.get(item.foodId); + if (!product) continue; - const matchesCategory = hasCategoryRestriction && food.category && categoryRestriction.includes(food.category.id); - const matchesFood = hasFoodRestriction && foodRestriction.includes(food.id); + const matchesCategory = hasCategoryRestriction && product.category && categoryRestriction.includes(product.category.id); + const matchesFood = hasFoodRestriction && foodRestriction.includes(product.id); if (matchesCategory || matchesFood) return; } @@ -273,14 +273,14 @@ export class CartValidationService { } /** - * Get foods in cart with categories + * Get products in cart with categories */ - async getFoodsInCartWithCategories(cart: Cart): Promise> { + async getFoodsInCartWithCategories(cart: Cart): Promise> { const foodIds = cart.items.map(item => item.foodId); if (foodIds.length === 0) return new Map(); - const foods = await this.em.find(Food, { id: { $in: foodIds } }, { populate: ['category'] }); - return new Map(foods.map(f => [f.id, f])); + const products = await this.em.find(Product, { id: { $in: foodIds } }, { populate: ['category'] }); + return new Map(products.map(f => [f.id, f])); } } diff --git a/src/modules/cart/providers/cart.service.ts b/src/modules/cart/providers/cart.service.ts index f292ffd..27a20dc 100644 --- a/src/modules/cart/providers/cart.service.ts +++ b/src/modules/cart/providers/cart.service.ts @@ -1,12 +1,12 @@ import { Injectable, NotFoundException, BadRequestException } from '@nestjs/common'; -import { DeliveryMethodEnum } from '../../delivery/interface/delivery'; -import { PaymentMethodEnum } from '../../payments/interface/payment'; -import { OrderCouponDetail } from '../../orders/interface/order.interface'; +import { DeliveryMethodEnum } from '../../../delivery/interface/delivery'; +import { PaymentMethodEnum } from '../../../payments/interface/payment'; +import { OrderCouponDetail } from '../../../orders/interface/order.interface'; import { Cart } from '../interfaces/cart.interface'; import { BulkAddItemsToCartDto } from '../dto/bulk-add-items.dto'; import { ApplyCouponDto } from '../dto/apply-coupon.dto'; import { SetAllCartParmsDto } from '../dto/set-all-cart-params.dto'; -import { CouponService } from '../../coupons/providers/coupon.service'; +import { CouponService } from '../../../coupons/providers/coupon.service'; import { CartRepository } from '../repositories/cart.repository'; import { CartValidationService } from './cart-validation.service'; import { CartCalculationService } from './cart-calculation.service'; @@ -80,7 +80,7 @@ export class CartService { const address = await this.validationService.getUserAddressOrFail(addressId); this.validationService.validateAddressOwnership(address, userId); - // ensure address is within restaurant service area + // ensure address is within shop service area await this.validationService.assertAddressInsideServiceArea( restaurantId, address.latitude, @@ -125,7 +125,7 @@ export class CartService { } /** - * Get or create cart for user and restaurant + * Get or create cart for user and shop */ async getOrCreateCart(userId: string, restaurantId: string): Promise { const existingCart = await this.cartRepository.findByUserAndRestaurant(userId, restaurantId); @@ -133,15 +133,15 @@ export class CartService { return existingCart; } - // Find restaurant - const restaurant = await this.validationService.getRestaurantOrFail(restaurantId); + // Find shop + const shop = await this.validationService.getRestaurantOrFail(restaurantId); // Create new cart const now = this.nowIso(); const cart: Cart = { userId, restaurantId, - restaurantName: restaurant.name, + restaurantName: shop.name, items: [], deliveryFee: 0, subTotal: 0, @@ -160,7 +160,7 @@ export class CartService { } /** - * Find cart by user and restaurant + * Find cart by user and shop */ async findOneOrFail(userId: string, restaurantId: string): Promise { const cart = await this.cartRepository.findByUserAndRestaurant(userId, restaurantId); @@ -218,7 +218,7 @@ export class CartService { const orderAmount = cart.subTotal - cart.itemsDiscount; const user = await this.validationService.getUserOrFail(userId); - // check if coupon is valid and belong to the restaurant + // check if coupon is valid and belong to the shop const { valid, coupon, message } = await this.couponService.validateCoupon( applyCouponDto.code, restaurantId, @@ -239,7 +239,7 @@ export class CartService { await this.validationService.assertCouponMatchesCartIfRestricted( cart, coupon.foodCategories, - coupon.foods, + coupon.products, ); const couponDetail: OrderCouponDetail = { @@ -291,7 +291,7 @@ export class CartService { // Verify address belongs to the user this.validationService.validateAddressOwnership(address, userId); - // ensure address is within restaurant service area + // ensure address is within shop service area await this.validationService.assertAddressInsideServiceArea( restaurantId, address.latitude, diff --git a/src/modules/cart/repositories/cart.repository.ts b/src/modules/cart/repositories/cart.repository.ts index 4c1a6f4..fa24f7b 100644 --- a/src/modules/cart/repositories/cart.repository.ts +++ b/src/modules/cart/repositories/cart.repository.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { CacheService } from '../../utils/cache.service'; +import { CacheService } from '../../../utils/cache.service'; import { Cart } from '../interfaces/cart.interface'; @Injectable() @@ -10,7 +10,7 @@ export class CartRepository { constructor(private readonly cacheService: CacheService) {} /** - * Get cart by user and restaurant + * Get cart by user and shop */ async findByUserAndRestaurant(userId: string, restaurantId: string): Promise { const cacheKey = this.getCacheKey(userId, restaurantId); diff --git a/src/modules/contact/dto/create-contact.dto.ts b/src/modules/contact/dto/create-contact.dto.ts index 134bd54..636d33e 100644 --- a/src/modules/contact/dto/create-contact.dto.ts +++ b/src/modules/contact/dto/create-contact.dto.ts @@ -14,7 +14,7 @@ export class CreateContactDto { content!: string; @IsNotEmpty() - @IsEnum(['application', 'restaurant']) + @IsEnum(['application', 'shop']) @ApiProperty({ description: 'Contact Scope' }) scope!: ContactScope; diff --git a/src/modules/contact/entities/contact.entity.ts b/src/modules/contact/entities/contact.entity.ts index 281855c..f26caf6 100644 --- a/src/modules/contact/entities/contact.entity.ts +++ b/src/modules/contact/entities/contact.entity.ts @@ -1,7 +1,7 @@ import { Entity, Enum, ManyToOne, Property } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; import { ContactScope, ContactStatusEnum } from '../interface/interface'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; @Entity({ tableName: 'contacts' }) export class Contact extends BaseEntity { @@ -17,8 +17,8 @@ export class Contact extends BaseEntity { @Enum(() => ContactScope) scope: ContactScope - @ManyToOne(() => Restaurant, { nullable: true }) - restaurant?: Restaurant | null = null; + @ManyToOne(() => Shop, { nullable: true }) + shop?: Shop | null = null; @Property({ default: ContactStatusEnum.New }) diff --git a/src/modules/contact/interface/interface.ts b/src/modules/contact/interface/interface.ts index 70cb107..827a6f6 100644 --- a/src/modules/contact/interface/interface.ts +++ b/src/modules/contact/interface/interface.ts @@ -5,5 +5,5 @@ export enum ContactStatusEnum { export enum ContactScope { APPLICATION = 'application', - RESTAURANT = 'restaurant', + RESTAURANT = 'shop', } diff --git a/src/modules/contact/providers/contact.service.ts b/src/modules/contact/providers/contact.service.ts index 48fad03..807f51a 100644 --- a/src/modules/contact/providers/contact.service.ts +++ b/src/modules/contact/providers/contact.service.ts @@ -8,7 +8,7 @@ import { PaginatedResult } from 'src/common/interfaces/pagination.interface'; import { ContactStatusEnum } from '../interface/interface'; import { EntityManager } from '@mikro-orm/postgresql'; import { ContactScope } from '../interface/interface'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; @Injectable() export class ContactService { @@ -20,22 +20,22 @@ export class ContactService { async create(dto: CreateContactDto, restId?: string, slug?: string): Promise { - let restaurant: Restaurant | null = null; + let shop: Shop | null = null; if ((restId || slug) && dto.scope === ContactScope.RESTAURANT) { - restaurant = await this.em.findOne(Restaurant, { + shop = await this.em.findOne(Shop, { ...(restId ? { id: restId } : {}) , ...(slug ? { slug: slug } : {}) }); - if (!restaurant) { - throw new NotFoundException(`Restaurant with ID ${restId} not found`); + if (!shop) { + throw new NotFoundException(`Shop with ID ${restId} not found`); } } const contact = this.contactRepository.create({ ...dto, status: ContactStatusEnum.New, - restaurant, + shop, }); await this.em.persistAndFlush(contact); return contact; @@ -68,7 +68,7 @@ export class ContactService { async findOne(id: string, restaurantId?: string): Promise { const where: any = { id }; if (restaurantId) { - where.restaurant = restaurantId; + where.shop = restaurantId; } const contact = await this.contactRepository.findOne(where); @@ -81,7 +81,7 @@ export class ContactService { async updateStatus(id: string, dto: UpdateContactStatusDto, restaurantId?: string): Promise { const where: any = { id }; if (restaurantId) { - where.restaurant = restaurantId; + where.shop = restaurantId; } const contact = await this.contactRepository.findOne(where); @@ -96,7 +96,7 @@ export class ContactService { async remove(id: string, restaurantId?: string): Promise { const where: any = { id }; if (restaurantId) { - where.restaurant = restaurantId; + where.shop = restaurantId; } const contact = await this.contactRepository.findOne(where); diff --git a/src/modules/contact/repositories/contact.repository.ts b/src/modules/contact/repositories/contact.repository.ts index 01f6278..46decf3 100644 --- a/src/modules/contact/repositories/contact.repository.ts +++ b/src/modules/contact/repositories/contact.repository.ts @@ -40,7 +40,7 @@ export class ContactRepository extends EntityRepository { where.scope = scope; } if (restaurantId) { - where.restaurant = restaurantId; + where.shop = restaurantId; } if (search) { diff --git a/src/modules/coupons/controllers/coupon.controller.ts b/src/modules/coupons/controllers/coupon.controller.ts index ca54469..81634e7 100644 --- a/src/modules/coupons/controllers/coupon.controller.ts +++ b/src/modules/coupons/controllers/coupon.controller.ts @@ -30,7 +30,7 @@ export class CouponController { @UseGuards(AuthGuard) @ApiBearerAuth() @Get('public/coupons/me') - @ApiOperation({ summary: 'Get paginated list of restaurant coupons' }) + @ApiOperation({ summary: 'Get paginated list of shop coupons' }) @ApiHeader(API_HEADER_SLUG) @ApiQuery({ name: 'page', required: false, type: Number }) @ApiQuery({ name: 'limit', required: false, type: Number }) diff --git a/src/modules/coupons/coupon.module.ts b/src/modules/coupons/coupon.module.ts index 6e65e47..e857bf1 100644 --- a/src/modules/coupons/coupon.module.ts +++ b/src/modules/coupons/coupon.module.ts @@ -4,7 +4,7 @@ import { CouponController } from './controllers/coupon.controller'; import { CouponRepository } from './repositories/coupon.repository'; import { MikroOrmModule } from '@mikro-orm/nestjs'; import { Coupon } from './entities/coupon.entity'; -import { RestaurantsModule } from '../restaurants/restaurants.module'; +import { RestaurantsModule } from ../../..shops.module'; import { AuthModule } from '../auth/auth.module'; import { JwtModule } from '@nestjs/jwt'; diff --git a/src/modules/coupons/dto/create-coupon.dto.ts b/src/modules/coupons/dto/create-coupon.dto.ts index 05e2174..5a61813 100644 --- a/src/modules/coupons/dto/create-coupon.dto.ts +++ b/src/modules/coupons/dto/create-coupon.dto.ts @@ -90,7 +90,7 @@ export class CreateCouponDto { @IsString({ each: true }) @ApiPropertyOptional({ example: ['category-id-1', 'category-id-2'], - description: 'Array of food category IDs. If empty, coupon applies to all categories.', + description: 'Array of product category IDs. If empty, coupon applies to all categories.', type: [String], }) foodCategories?: string[]; @@ -99,11 +99,11 @@ export class CreateCouponDto { @IsArray() @IsString({ each: true }) @ApiPropertyOptional({ - example: ['food-id-1', 'food-id-2'], - description: 'Array of food IDs. If empty, coupon applies to all foods.', + example: ['product-id-1', 'product-id-2'], + description: 'Array of product IDs. If empty, coupon applies to all products.', type: [String], }) - foods?: string[]; + products?: string[]; @IsOptional() @IsString() diff --git a/src/modules/coupons/entities/coupon.entity.ts b/src/modules/coupons/entities/coupon.entity.ts index ab708c9..c97598a 100644 --- a/src/modules/coupons/entities/coupon.entity.ts +++ b/src/modules/coupons/entities/coupon.entity.ts @@ -1,17 +1,17 @@ import { Entity, Index, ManyToOne, Property, Enum, Unique } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; -import { normalizePhone } from '../../utils/phone.util'; +import { BaseEntity } from '../../../../common/entities/base.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; +import { normalizePhone } from '../../../utils/phone.util'; import { CouponType } from '../interface/coupon'; @Entity({ tableName: 'coupons' }) -@Unique({ properties: ['code', 'restaurant'] }) -@Index({ properties: ['restaurant', 'code', 'isActive'] }) -@Index({ properties: ['restaurant', 'isActive'] }) +@Unique({ properties: ['code', 'shop'] }) +@Index({ properties: ['shop', 'code', 'isActive'] }) +@Index({ properties: ['shop', 'isActive'] }) @Index({ properties: ['code'] }) export class Coupon extends BaseEntity { - @ManyToOne(() => Restaurant) - restaurant!: Restaurant; + @ManyToOne(() => Shop) + shop!: Shop; @Property() code!: string; @@ -56,7 +56,7 @@ export class Coupon extends BaseEntity { foodCategories?: string[]; // Array of category IDs @Property({ type: 'json', nullable: true }) - foods?: string[]; // Array of food IDs + products?: string[]; // Array of product IDs private _userPhone?: string; diff --git a/src/modules/coupons/providers/coupon.service.ts b/src/modules/coupons/providers/coupon.service.ts index 897c3e6..46ba35d 100644 --- a/src/modules/coupons/providers/coupon.service.ts +++ b/src/modules/coupons/providers/coupon.service.ts @@ -3,7 +3,7 @@ import { CreateCouponDto } from '../dto/create-coupon.dto'; import { UpdateCouponDto } from '../dto/update-coupon.dto'; import { FindCouponsDto } from '../dto/find-coupons.dto'; import { CouponRepository } from '../repositories/coupon.repository'; -import { RestRepository } from '../../restaurants/repositories/rest.repository'; +import { RestRepository } from ../../..shops/repositories/rest.repository'; import { EntityManager } from '@mikro-orm/postgresql'; import { RequiredEntityData } from '@mikro-orm/core'; import { Coupon } from '../entities/coupon.entity'; @@ -20,8 +20,8 @@ export class CouponService { ) {} async create(restId: string, createCouponDto: CreateCouponDto): Promise { - const restaurant = await this.restRepository.findOne({ id: restId }); - if (!restaurant) { + const shop = await this.restRepository.findOne({ id: restId }); + if (!shop) { throw new NotFoundException(RestMessage.NOT_FOUND); } @@ -48,7 +48,7 @@ export class CouponService { } const data: RequiredEntityData = { - restaurant, + shop, code: createCouponDto.code, name: createCouponDto.name, description: createCouponDto.description, @@ -63,7 +63,7 @@ export class CouponService { isActive: createCouponDto.isActive ?? true, usedCount: 0, foodCategories: createCouponDto.foodCategories, - foods: createCouponDto.foods, + products: createCouponDto.products, userPhone: createCouponDto.userPhone, }; @@ -81,7 +81,7 @@ export class CouponService { } async findById(id: string): Promise { - const coupon = await this.couponRepository.findOne({ id }, { populate: ['restaurant'] }); + const coupon = await this.couponRepository.findOne({ id }, { populate: ['shop'] }); if (!coupon) { throw new NotFoundException(CouponMessage.NOT_FOUND); } @@ -89,7 +89,7 @@ export class CouponService { } async findByCode(code: string, restId: string): Promise { - const coupon = await this.couponRepository.findOne({ code, restaurant: { id: restId } }); + const coupon = await this.couponRepository.findOne({ code, shop: { id: restId } }); if (!coupon) { throw new NotFoundException(CouponMessage.NOT_FOUND); } @@ -139,7 +139,7 @@ export class CouponService { if (dto.endDate !== undefined) coupon.endDate = dto.endDate ? new Date(dto.endDate) : undefined; if (dto.isActive !== undefined) coupon.isActive = dto.isActive; if (dto.foodCategories !== undefined) coupon.foodCategories = dto.foodCategories; - if (dto.foods !== undefined) coupon.foods = dto.foods; + if (dto.products !== undefined) coupon.products = dto.products; if (dto.userPhone !== undefined) coupon.userPhone = dto.userPhone; await this.em.persistAndFlush(coupon); @@ -169,8 +169,8 @@ export class CouponService { message?: string; }> { const coupon = await this.couponRepository.findOne( - { code, restaurant: { id: restId } }, - { populate: ['restaurant'] }, + { code, shop: { id: restId } }, + { populate: ['shop'] }, ); if (!coupon) { @@ -258,12 +258,12 @@ export class CouponService { } async generateCouponCode(restId: string): Promise { - const restaurant = await this.restRepository.findOne({ id: restId }); - if (!restaurant) { + const shop = await this.restRepository.findOne({ id: restId }); + if (!shop) { throw new NotFoundException(RestMessage.NOT_FOUND); } - const code = this.generateShortCode(restaurant.slug); - const existing = await this.couponRepository.findOne({ code, restaurant: { id: restId } }); + const code = this.generateShortCode(shop.slug); + const existing = await this.couponRepository.findOne({ code, shop: { id: restId } }); if (existing) return this.generateCouponCode(restId); return code; diff --git a/src/modules/coupons/repositories/coupon.repository.ts b/src/modules/coupons/repositories/coupon.repository.ts index 221b3b1..989d413 100644 --- a/src/modules/coupons/repositories/coupon.repository.ts +++ b/src/modules/coupons/repositories/coupon.repository.ts @@ -30,7 +30,7 @@ export class CouponRepository extends EntityRepository { const offset = (page - 1) * limit; - const where: FilterQuery = { restaurant: { id: restId } }; + const where: FilterQuery = { shop: { id: restId } }; if (typeof isActive === 'boolean') { where.isActive = isActive; diff --git a/src/modules/delivery/controllers/delivery.controller.ts b/src/modules/delivery/controllers/delivery.controller.ts index c2ece7c..6235983 100644 --- a/src/modules/delivery/controllers/delivery.controller.ts +++ b/src/modules/delivery/controllers/delivery.controller.ts @@ -28,8 +28,8 @@ export class DeliveryController { @UseGuards(AuthGuard) @ApiBearerAuth() - @Get('public/delivery-methods/restaurant') - @ApiOperation({ summary: 'Get restaurant delivery methods' }) + @Get('public/delivery-methods/shop') + @ApiOperation({ summary: 'Get shop delivery methods' }) @ApiHeader(API_HEADER_SLUG) findAllDeliveryMethods(@RestId() restId: string) { return this.deliveryService.findAllForRestaurantId(restId); @@ -39,8 +39,8 @@ export class DeliveryController { @UseGuards(AdminAuthGuard) @ApiBearerAuth() @Permissions(Permission.MANAGE_DELIVERY) - @Post('admin/delivery-methods/restaurant') - @ApiOperation({ summary: 'Create a delivery method for a restaurant' }) + @Post('admin/delivery-methods/shop') + @ApiOperation({ summary: 'Create a delivery method for a shop' }) @ApiBody({ type: CreateDeliveryDto }) create(@Body() createDto: CreateDeliveryDto, @RestId() restId: string) { return this.deliveryService.create(restId, createDto); @@ -49,8 +49,8 @@ export class DeliveryController { @UseGuards(AdminAuthGuard) @ApiBearerAuth() @Permissions(Permission.MANAGE_DELIVERY) - @Get('admin/delivery-methods/restaurant') - @ApiOperation({ summary: 'Get the restaurant delivery methods' }) + @Get('admin/delivery-methods/shop') + @ApiOperation({ summary: 'Get the shop delivery methods' }) findRestaurantDeliveryMethods(@RestId() restId: string) { return this.deliveryService.findAllForRestaurantId(restId); } @@ -58,8 +58,8 @@ export class DeliveryController { @UseGuards(AdminAuthGuard) @ApiBearerAuth() @Permissions(Permission.MANAGE_DELIVERY) - @Get('admin/delivery-methods/restaurant/:deliveryId') - @ApiOperation({ summary: 'Get a restaurant delivery method by delivery ID' }) + @Get('admin/delivery-methods/shop/:deliveryId') + @ApiOperation({ summary: 'Get a shop delivery method by delivery ID' }) @ApiParam({ name: 'deliveryId', description: 'Delivery method ID' }) findOne(@Param('deliveryId') deliveryId: string, @RestId() restId: string) { return this.deliveryService.findOne(restId, deliveryId); @@ -68,8 +68,8 @@ export class DeliveryController { @UseGuards(AdminAuthGuard) @ApiBearerAuth() @Permissions(Permission.MANAGE_DELIVERY) - @Patch('admin/delivery-methods/restaurant/:deliveryId') - @ApiOperation({ summary: 'Update a restaurant delivery method' }) + @Patch('admin/delivery-methods/shop/:deliveryId') + @ApiOperation({ summary: 'Update a shop delivery method' }) @ApiParam({ name: 'deliveryId', description: 'Delivery method ID' }) @ApiBody({ type: UpdateDeliveryDto }) update(@Param('deliveryId') deliveryId: string, @Body() updateDto: UpdateDeliveryDto, @RestId() restId: string) { @@ -79,8 +79,8 @@ export class DeliveryController { @UseGuards(AdminAuthGuard) @ApiBearerAuth() @Permissions(Permission.MANAGE_DELIVERY) - @Delete('admin/delivery-methods/restaurant/:deliveryId') - @ApiOperation({ summary: 'Delete a restaurant delivery method' }) + @Delete('admin/delivery-methods/shop/:deliveryId') + @ApiOperation({ summary: 'Delete a shop delivery method' }) @ApiParam({ name: 'deliveryId', description: 'Delivery method ID' }) remove(@Param('deliveryId') deliveryId: string, @RestId() restId: string) { return this.deliveryService.remove(restId, deliveryId); diff --git a/src/modules/delivery/delivery.module.ts b/src/modules/delivery/delivery.module.ts index bdf933a..d4257eb 100644 --- a/src/modules/delivery/delivery.module.ts +++ b/src/modules/delivery/delivery.module.ts @@ -3,7 +3,7 @@ import { MikroOrmModule } from '@mikro-orm/nestjs'; import { JwtModule } from '@nestjs/jwt'; import { DeliveryController } from './controllers/delivery.controller'; import { DeliveryService } from './providers/delivery.service'; -import { RestaurantsModule } from '../restaurants/restaurants.module'; +import { RestaurantsModule } from ../../..shops.module'; import { Delivery } from './entities/delivery.entity'; import { DeliveryRepository } from './repositories/delivery.repository'; diff --git a/src/modules/delivery/entities/delivery.entity.ts b/src/modules/delivery/entities/delivery.entity.ts index b1ae9da..910ff0b 100644 --- a/src/modules/delivery/entities/delivery.entity.ts +++ b/src/modules/delivery/entities/delivery.entity.ts @@ -1,6 +1,6 @@ import { Entity, Property, Enum, ManyToOne } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; +import { Shop } from '../../../shops/entities/shop.entity'; import { DeliveryFeeTypeEnum, DeliveryMethodEnum } from '../interface/delivery'; @Entity({ tableName: 'deliveries' }) @@ -8,8 +8,8 @@ export class Delivery extends BaseEntity { @Enum(() => DeliveryMethodEnum) method!: DeliveryMethodEnum; - @ManyToOne(() => Restaurant) - restaurant!: Restaurant; + @ManyToOne(() => Shop) + shop!: Shop; @Property({ type: 'decimal', precision: 10, scale: 0, default: 0 }) deliveryFee: number = 0; diff --git a/src/modules/delivery/providers/delivery.service.ts b/src/modules/delivery/providers/delivery.service.ts index b9b266c..079118d 100644 --- a/src/modules/delivery/providers/delivery.service.ts +++ b/src/modules/delivery/providers/delivery.service.ts @@ -4,7 +4,7 @@ import { Delivery } from '../entities/delivery.entity'; import { DeliveryRepository } from '../repositories/delivery.repository'; import { CreateDeliveryDto } from '../dto/create-delivery.dto'; import { UpdateDeliveryDto } from '../dto/update-delivery.dto'; -import { RestRepository } from '../../restaurants/repositories/rest.repository'; +import { RestRepository } from ../../..shops/repositories/rest.repository'; import { DeliveryMethodEnum } from '../interface/delivery'; import { DeliveryMessage } from 'src/common/enums/message.enum'; @@ -17,14 +17,14 @@ export class DeliveryService { ) {} async create(restId: string, createDto: CreateDeliveryDto): Promise { - const restaurant = await this.restRepository.findOne({ id: restId }); - if (!restaurant) { + const shop = await this.restRepository.findOne({ id: restId }); + if (!shop) { throw new NotFoundException(DeliveryMessage.RESTAURANT_NOT_FOUND); } - // Check if the delivery method with the same name already exists for this restaurant + // Check if the delivery method with the same name already exists for this shop const existing = await this.deliveryRepository.findOne({ - restaurant: { id: restId }, + shop: { id: restId }, method: createDto.method, }); @@ -33,7 +33,7 @@ export class DeliveryService { } const data: RequiredEntityData = { - restaurant, + shop, method: createDto.method, deliveryFee: createDto.deliveryFee, minOrderPrice: createDto.minOrderPrice, @@ -51,13 +51,13 @@ export class DeliveryService { } async findAllForRestaurantId(restId: string): Promise { - return this.deliveryRepository.find({ restaurant: { id: restId } }, { orderBy: { order: 'asc' } }); + return this.deliveryRepository.find({ shop: { id: restId } }, { orderBy: { order: 'asc' } }); } async findOne(restId: string, deliveryId: string): Promise { const delivery = await this.deliveryRepository.findOne({ id: deliveryId, - restaurant: { id: restId }, + shop: { id: restId }, }); if (!delivery) { @@ -69,7 +69,7 @@ export class DeliveryService { async update(restId: string, deliveryId: string, updateDto: UpdateDeliveryDto): Promise { const delivery = await this.deliveryRepository.findOne({ - restaurant: { id: restId }, + shop: { id: restId }, id: deliveryId, }); @@ -80,7 +80,7 @@ export class DeliveryService { // If method is being updated, check for conflicts if (updateDto.method !== undefined && updateDto.method !== delivery.method) { const existing = await this.deliveryRepository.findOne({ - restaurant: { id: restId }, + shop: { id: restId }, method: updateDto.method, id: { $ne: deliveryId }, }); @@ -98,7 +98,7 @@ export class DeliveryService { async remove(restId: string, deliveryId: string): Promise { const delivery = await this.deliveryRepository.findOne({ - restaurant: { id: restId }, + shop: { id: restId }, id: deliveryId, }); diff --git a/src/modules/foods/entities/favorite.entity.ts b/src/modules/foods/entities/favorite.entity.ts index 245e102..ff6b50e 100644 --- a/src/modules/foods/entities/favorite.entity.ts +++ b/src/modules/foods/entities/favorite.entity.ts @@ -1,14 +1,14 @@ import { Entity, ManyToOne, Unique } from '@mikro-orm/core'; import { BaseEntity } from '../../../common/entities/base.entity'; import { User } from '../../users/entities/user.entity'; -import { Food } from '../../foods/entities/food.entity'; +import { Product } from '../../products/entities/product.entity'; @Entity({ tableName: 'favorites' }) -@Unique({ properties: ['user', 'food'] }) +@Unique({ properties: ['user', 'product'] }) export class Favorite extends BaseEntity { @ManyToOne(() => User) user: User; - @ManyToOne(() => Food) - food: Food; + @ManyToOne(() => Product) + product: Product; } diff --git a/src/modules/foods/entities/food.entity.ts b/src/modules/foods/entities/food.entity.ts index 579fe9b..5cb8856 100644 --- a/src/modules/foods/entities/food.entity.ts +++ b/src/modules/foods/entities/food.entity.ts @@ -1,32 +1,32 @@ import { Cascade, Collection, Entity, Index, ManyToOne, OneToMany, Property, OneToOne } from '@mikro-orm/core'; import { Category } from './category.entity'; import { BaseEntity } from '../../../common/entities/base.entity'; -import { Restaurant } from '../../../modules/restaurants/entities/restaurant.entity'; +import { Shop } from '../../../modules/shops/entities/shop.entity'; import { Review } from 'src/modules/review/entities/review.entity'; import { Inventory } from 'src/modules/inventory/entities/inventory.entity'; import { Favorite } from './favorite.entity'; -@Entity({ tableName: 'foods' }) -@Index({ properties: ['restaurant', 'isActive'] }) +@Entity({ tableName: 'products' }) +@Index({ properties: ['shop', 'isActive'] }) @Index({ properties: ['category', 'isActive'] }) @Index({ properties: ['isActive'] }) -export class Food extends BaseEntity { - @ManyToOne(() => Restaurant) - restaurant: Restaurant; +export class Product extends BaseEntity { + @ManyToOne(() => Shop) + shop: Shop; @ManyToOne(() => Category) category: Category; - @OneToMany(() => Review, review => review.food, { cascade: [Cascade.ALL], orphanRemoval: true }) + @OneToMany(() => Review, review => review.product, { cascade: [Cascade.ALL], orphanRemoval: true }) reviews = new Collection(this); @OneToOne(() => Inventory, { - mappedBy: 'food', + mappedBy: 'product', nullable: true, }) inventory?: Inventory; - @OneToMany(() => Favorite, favorite => favorite.food) + @OneToMany(() => Favorite, favorite => favorite.product) favorites = new Collection(this); @Property({ nullable: true }) diff --git a/src/modules/foods/food.module.ts b/src/modules/foods/food.module.ts index 68b0569..4d36dfd 100644 --- a/src/modules/foods/food.module.ts +++ b/src/modules/foods/food.module.ts @@ -1,15 +1,15 @@ import { Module } from '@nestjs/common'; -import { FoodService } from './providers/food.service'; -import { FoodStockCrone } from './crone/food.crone'; -import { FoodController } from './controllers/food.controller'; +import { ProductService } from './providers/product.service'; +import { ProductStockCrone } from './crone/product.crone'; +import { ProductController } from './controllers/product.controller'; import { CategoryController } from './controllers/category.controller'; import { CategoryService } from './providers/category.service'; -import { FoodRepository } from './repositories/food.repository'; +import { ProductRepository } from './repositories/product.repository'; import { CategoryRepository } from './repositories/category.repository'; import { MikroOrmModule } from '@mikro-orm/nestjs'; import { Category } from './entities/category.entity'; -import { Food } from './entities/food.entity'; -import { RestaurantsModule } from '../restaurants/restaurants.module'; +import { Product } from './entities/product.entity'; +import { ShopsModule } from '../shops/shops.module'; import { AuthModule } from '../auth/auth.module'; import { JwtModule } from '@nestjs/jwt'; import { UtilsModule } from '../utils/utils.module'; @@ -17,14 +17,14 @@ import { Favorite } from './entities/favorite.entity'; @Module({ imports: [ - MikroOrmModule.forFeature([Food, Category, Favorite]), - RestaurantsModule, + MikroOrmModule.forFeature([Product, Category, Favorite]), + ShopsModule, AuthModule, JwtModule, UtilsModule, ], - controllers: [FoodController, CategoryController], - providers: [FoodService, CategoryService, FoodRepository, CategoryRepository, FoodStockCrone], - exports: [FoodRepository, CategoryRepository], + controllers: [ProductController, CategoryController], + providers: [ProductService, CategoryService, ProductRepository, CategoryRepository, ProductStockCrone], + exports: [ProductRepository, CategoryRepository], }) -export class FoodModule {} +export class ProductModule {} diff --git a/src/modules/icons/entities/group.entity.ts b/src/modules/icons/entities/group.entity.ts index a62c4e4..1f09959 100644 --- a/src/modules/icons/entities/group.entity.ts +++ b/src/modules/icons/entities/group.entity.ts @@ -1,5 +1,5 @@ import { Entity, Index, Property, Collection, OneToMany, Cascade } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; import { Icon } from './icon.entity'; @Entity({ tableName: 'icon_groups' }) diff --git a/src/modules/icons/entities/icon.entity.ts b/src/modules/icons/entities/icon.entity.ts index f848d7a..ddf34ec 100644 --- a/src/modules/icons/entities/icon.entity.ts +++ b/src/modules/icons/entities/icon.entity.ts @@ -1,5 +1,5 @@ import { Entity, Index, Property, ManyToOne } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; import { Group } from './group.entity'; @Entity({ tableName: 'icons' }) diff --git a/src/modules/inventory/dto/bulk-reserve-food.dto.ts b/src/modules/inventory/dto/bulk-reserve-food.dto.ts index d8ce346..35315c7 100644 --- a/src/modules/inventory/dto/bulk-reserve-food.dto.ts +++ b/src/modules/inventory/dto/bulk-reserve-food.dto.ts @@ -3,7 +3,7 @@ import { IsNotEmpty, IsArray, ValidateNested, ArrayMinSize, IsString, IsNumber, import { Type } from 'class-transformer'; export class BulkReserveFoodItemDto { - @ApiProperty({ example: 'food-123', description: 'Food ID' }) + @ApiProperty({ example: 'product-123', description: 'Product ID' }) @IsNotEmpty() @IsString() foodId!: string; @@ -18,11 +18,11 @@ export class BulkReserveFoodItemDto { export class BulkReserveFoodDto { @ApiProperty({ - description: 'Array of food reservations to create', + description: 'Array of product reservations to create', type: [BulkReserveFoodItemDto], example: [ - { foodId: 'food-123', quantity: 5 }, - { foodId: 'food-789', quantity: 3 }, + { foodId: 'product-123', quantity: 5 }, + { foodId: 'product-789', quantity: 3 }, ], }) @IsNotEmpty() diff --git a/src/modules/inventory/dto/bulk-set-stock.dto.ts b/src/modules/inventory/dto/bulk-set-stock.dto.ts index a4daf35..f28d1b8 100644 --- a/src/modules/inventory/dto/bulk-set-stock.dto.ts +++ b/src/modules/inventory/dto/bulk-set-stock.dto.ts @@ -4,7 +4,7 @@ import { Type } from 'class-transformer'; import { SetStockDto } from './set-stock.dto'; export class BulkSetStockItemDto extends SetStockDto { - @ApiProperty({ example: 'food-123', description: 'Food ID' }) + @ApiProperty({ example: 'product-123', description: 'Product ID' }) @IsNotEmpty() foodId!: string; } @@ -14,8 +14,8 @@ export class BulkSetStockDto { description: 'Array of stock items to set', type: [BulkSetStockItemDto], example: [ - { foodId: 'food-123', totalStock: 100, availableStock: 80 }, - { foodId: 'food-456', totalStock: 50, availableStock: 45 }, + { foodId: 'product-123', totalStock: 100, availableStock: 80 }, + { foodId: 'product-456', totalStock: 50, availableStock: 45 }, ], }) @IsNotEmpty() diff --git a/src/modules/inventory/entities/inventory.entity.ts b/src/modules/inventory/entities/inventory.entity.ts index 8897990..cf52b57 100644 --- a/src/modules/inventory/entities/inventory.entity.ts +++ b/src/modules/inventory/entities/inventory.entity.ts @@ -1,14 +1,14 @@ import { Cascade, Entity, Property, OneToOne } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; -import { Food } from '../../foods/entities/food.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; +import { Product } from '../../../products/entities/product.entity'; @Entity({ tableName: 'inventory' }) export class Inventory extends BaseEntity { - @OneToOne(() => Food, { + @OneToOne(() => Product, { cascade: [Cascade.ALL], orphanRemoval: true, }) - food!: Food; + product!: Product; @Property({ type: 'int' }) totalStock!: number; diff --git a/src/modules/inventory/inventory.controller.ts b/src/modules/inventory/inventory.controller.ts index 9a71e3c..9ca5a0e 100644 --- a/src/modules/inventory/inventory.controller.ts +++ b/src/modules/inventory/inventory.controller.ts @@ -17,9 +17,9 @@ import { Permission } from 'src/common/enums/permission.enum'; export class InventoryController { constructor(private readonly inventoryService: InventoryService) { } - @Patch('admin/inventory/food/:foodId/stock') - @ApiOperation({ summary: 'Set available and total stock for a food item' }) - @ApiParam({ name: 'foodId', description: 'Food ID' }) + @Patch('admin/inventory/product/:foodId/stock') + @ApiOperation({ summary: 'Set available and total stock for a product item' }) + @ApiParam({ name: 'foodId', description: 'Product ID' }) @ApiBody({ type: SetStockDto }) setStockForFood( @Param('foodId') foodId: string, @@ -29,8 +29,8 @@ export class InventoryController { return this.inventoryService.setStockForFood(foodId, restaurantId, setStockDto); } - @Post('admin/inventory/foods/stock/bulk') - @ApiOperation({ summary: 'Bulk set available and total stock for multiple food items' }) + @Post('admin/inventory/products/stock/bulk') + @ApiOperation({ summary: 'Bulk set available and total stock for multiple product items' }) @ApiBody({ type: BulkSetStockDto }) bulkSetStockForFoods(@RestId() restaurantId: string, @Body() bulkSetStockDto: BulkSetStockDto): Promise { return this.inventoryService.bulkSetStockForFoods(restaurantId, bulkSetStockDto); diff --git a/src/modules/inventory/inventory.service.ts b/src/modules/inventory/inventory.service.ts index 8fcfa1f..f7b660d 100644 --- a/src/modules/inventory/inventory.service.ts +++ b/src/modules/inventory/inventory.service.ts @@ -2,10 +2,10 @@ import { Injectable, NotFoundException, BadRequestException } from '@nestjs/comm import { EntityManager } from '@mikro-orm/postgresql'; import { SetStockDto } from './dto/set-stock.dto'; import { BulkSetStockDto } from './dto/bulk-set-stock.dto'; -import { BulkReserveFoodDto } from './dto/bulk-reserve-food.dto'; +import { BulkReserveFoodDto } from './dto/bulk-reserve-product.dto'; import { Inventory } from './entities/inventory.entity'; -import { Food } from '../foods/entities/food.entity'; -import { Restaurant } from '../restaurants/entities/restaurant.entity'; +import { Product } from ../../..products/entities/product.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; @Injectable() export class InventoryService { @@ -17,30 +17,30 @@ export class InventoryService { throw new BadRequestException('Available stock cannot exceed total stock'); } - // Find food and verify it belongs to the restaurant - const food = await this.em.findOne(Food, { id: foodId }, { populate: ['restaurant'] }); - if (!food) { - throw new NotFoundException(`Food with ID ${foodId} not found`); + // Find product and verify it belongs to the shop + const product = await this.em.findOne(Product, { id: foodId }, { populate: ['shop'] }); + if (!product) { + throw new NotFoundException(`Product with ID ${foodId} not found`); } - if (food.restaurant.id !== restaurantId) { - throw new BadRequestException(`Food does not belong to restaurant ${restaurantId}`); + if (product.shop.id !== restaurantId) { + throw new BadRequestException(`Product does not belong to shop ${restaurantId}`); } // Find or create inventory record let inventory = await this.em.findOne(Inventory, { - food: { id: foodId, restaurant: { id: restaurantId } }, + product: { id: foodId, shop: { id: restaurantId } }, }); if (!inventory) { // Create new inventory record - const restaurant = await this.em.findOne(Restaurant, { id: restaurantId }); - if (!restaurant) { - throw new NotFoundException(`Restaurant with ID ${restaurantId} not found`); + const shop = await this.em.findOne(Shop, { id: restaurantId }); + if (!shop) { + throw new NotFoundException(`Shop with ID ${restaurantId} not found`); } inventory = this.em.create(Inventory, { - food, + product, totalStock: setStockDto.totalStock, availableStock: setStockDto.availableStock, }); @@ -60,57 +60,57 @@ export class InventoryService { // Validate all items first for (const item of items) { if (item.availableStock > item.totalStock) { - throw new BadRequestException(`Available stock cannot exceed total stock for food ${item.foodId}`); + throw new BadRequestException(`Available stock cannot exceed total stock for product ${item.foodId}`); } } - // Get all food IDs + // Get all product IDs const foodIds = items.map(item => item.foodId); - // Load all foods in one query - const foods = await this.em.find(Food, { id: { $in: foodIds } }, { populate: ['restaurant'] }); + // Load all products in one query + const products = await this.em.find(Product, { id: { $in: foodIds } }, { populate: ['shop'] }); - // Verify all foods exist and belong to the restaurant - const foodMap = new Map(); - for (const food of foods) { - if (food.restaurant.id !== restaurantId) { - throw new BadRequestException(`Food ${food.id} does not belong to restaurant ${restaurantId}`); + // Verify all products exist and belong to the shop + const foodMap = new Map(); + for (const product of products) { + if (product.shop.id !== restaurantId) { + throw new BadRequestException(`Product ${product.id} does not belong to shop ${restaurantId}`); } - foodMap.set(food.id, food); + foodMap.set(product.id, product); } - // Check for missing foods + // Check for missing products const missingFoodIds = foodIds.filter(id => !foodMap.has(id)); if (missingFoodIds.length > 0) { - throw new NotFoundException(`Foods not found: ${missingFoodIds.join(', ')}`); + throw new NotFoundException(`Products not found: ${missingFoodIds.join(', ')}`); } // Load all existing inventories in one query const existingInventories = await this.em.find(Inventory, { - food: { id: { $in: foodIds }, restaurant: { id: restaurantId } }, + product: { id: { $in: foodIds }, shop: { id: restaurantId } }, }); const inventoryMap = new Map(); for (const inventory of existingInventories) { - inventoryMap.set(inventory.food.id, inventory); + inventoryMap.set(inventory.product.id, inventory); } - // Get restaurant once - const restaurant = await this.em.findOne(Restaurant, { id: restaurantId }); - if (!restaurant) { - throw new NotFoundException(`Restaurant with ID ${restaurantId} not found`); + // Get shop once + const shop = await this.em.findOne(Shop, { id: restaurantId }); + if (!shop) { + throw new NotFoundException(`Shop with ID ${restaurantId} not found`); } // Process all items const results: Inventory[] = []; for (const item of items) { - const food = foodMap.get(item.foodId)!; + const product = foodMap.get(item.foodId)!; let inventory = inventoryMap.get(item.foodId); if (!inventory) { // Create new inventory record inventory = this.em.create(Inventory, { - food, + product, totalStock: item.totalStock, availableStock: item.availableStock, }); @@ -132,32 +132,32 @@ export class InventoryService { async deductFromInventory(em: EntityManager, bulkReserveFoodDto: BulkReserveFoodDto): Promise { return em.transactional(async em => { const { items } = bulkReserveFoodDto; - // Get all unique food IDs + // Get all unique product IDs const foodIds = [...new Set(items.map(item => item.foodId))]; - // Load all foods in one query - const foods = await em.find(Food, { id: { $in: foodIds } }); + // Load all products in one query + const products = await em.find(Product, { id: { $in: foodIds } }); - // Verify all foods exist and belong to the restaurant - const foodMap = new Map(); - for (const food of foods) { - foodMap.set(food.id, food); + // Verify all products exist and belong to the shop + const foodMap = new Map(); + for (const product of products) { + foodMap.set(product.id, product); } - // Check for missing foods + // Check for missing products const missingFoodIds = foodIds.filter(id => !foodMap.has(id)); if (missingFoodIds.length > 0) { - throw new NotFoundException(`Foods not found: ${missingFoodIds.join(', ')}`); + throw new NotFoundException(`Products not found: ${missingFoodIds.join(', ')}`); } // Load all existing inventories in one query const existingInventories = await em.find(Inventory, { - food: { id: { $in: foodIds } }, + product: { id: { $in: foodIds } }, }); const inventoryMap = new Map(); for (const inventory of existingInventories) { - inventoryMap.set(inventory.food.id, inventory); + inventoryMap.set(inventory.product.id, inventory); } // Validate stock availability and create reservations @@ -167,13 +167,13 @@ export class InventoryService { // Check if inventory exists if (!inventory) { - throw new NotFoundException(`Inventory not found for food ${item.foodId}`); + throw new NotFoundException(`Inventory not found for product ${item.foodId}`); } // Check if available stock is sufficient if (inventory.availableStock < item.quantity) { throw new BadRequestException( - `Insufficient stock for food ${item.foodId}. Available: ${inventory.availableStock}, Requested: ${item.quantity}`, + `Insufficient stock for product ${item.foodId}. Available: ${inventory.availableStock}, Requested: ${item.quantity}`, ); } inventory.availableStock -= item.quantity; @@ -190,31 +190,31 @@ export class InventoryService { const foodIds = [...new Set(items.map(item => item.foodId))]; - const foods = await em.find(Food, { id: { $in: foodIds } }); - const foodMap = new Map(); - for (const food of foods) { - foodMap.set(food.id, food); + const products = await em.find(Product, { id: { $in: foodIds } }); + const foodMap = new Map(); + for (const product of products) { + foodMap.set(product.id, product); } const missingFoodIds = foodIds.filter(id => !foodMap.has(id)); if (missingFoodIds.length > 0) { - throw new NotFoundException(`Foods not found: ${missingFoodIds.join(', ')}`); + throw new NotFoundException(`Products not found: ${missingFoodIds.join(', ')}`); } const existingInventories = await em.find(Inventory, { - food: { id: { $in: foodIds } }, + product: { id: { $in: foodIds } }, }); const inventoryMap = new Map(); for (const inventory of existingInventories) { - inventoryMap.set(inventory.food.id, inventory); + inventoryMap.set(inventory.product.id, inventory); } const inventories: Inventory[] = []; for (const item of items) { const inventory = inventoryMap.get(item.foodId); if (!inventory) { - throw new NotFoundException(`Inventory not found for food ${item.foodId}`); + throw new NotFoundException(`Inventory not found for product ${item.foodId}`); } inventory.availableStock += item.quantity; inventories.push(inventory); diff --git a/src/modules/notifications/controllers/notifications.controller.ts b/src/modules/notifications/controllers/notifications.controller.ts index 71e5335..f6754ba 100644 --- a/src/modules/notifications/controllers/notifications.controller.ts +++ b/src/modules/notifications/controllers/notifications.controller.ts @@ -2,10 +2,10 @@ import { Controller, Get, Body, Param, UseGuards, Query, Patch, Put, Post } from import { ApiTags, ApiOperation, ApiBearerAuth, ApiParam, ApiQuery, ApiHeader } from '@nestjs/swagger'; import { NotificationService } from '../services/notification.service'; import { NotificationPreferenceService } from '../services/notification-preference.service'; -import { AuthGuard } from '../../auth/guards/auth.guard'; -import { UserId } from '../../../common/decorators/user-id.decorator'; -import { AdminAuthGuard } from '../../auth/guards/adminAuth.guard'; -import { RestId } from '../../../common/decorators/rest-id.decorator'; +import { AuthGuard } from '../../../auth/guards/auth.guard'; +import { UserId } from '../../../../common/decorators/user-id.decorator'; +import { AdminAuthGuard } from '../../../auth/guards/adminAuth.guard'; +import { RestId } from '../../../../common/decorators/rest-id.decorator'; import { UpdatePreferenceDto } from '../dto/update-preference.dto'; import { CreatePreferenceDto } from '../dto/create-preference.dto'; import { AdminId } from 'src/common/decorators/admin-id.decorator'; @@ -26,7 +26,7 @@ export class NotificationsController { @UseGuards(AuthGuard) @ApiBearerAuth() @Get('public/notifications') - @ApiOperation({ summary: 'Get user restaurant notifications' }) + @ApiOperation({ summary: 'Get user shop notifications' }) @ApiHeader(API_HEADER_SLUG) @ApiQuery({ name: 'limit', required: false, type: Number, description: 'Number of items to return (default: 50)' }) @ApiQuery({ @@ -137,7 +137,7 @@ export class NotificationsController { @ApiBearerAuth() @Permissions(Permission.MANAGE_SETTINGS) @Get('admin/notification-preferences') - @ApiOperation({ summary: 'Get all notification preferences for a restaurant' }) + @ApiOperation({ summary: 'Get all notification preferences for a shop' }) async getPreferences(@RestId() restaurantId: string) { return this.preferenceService.findByRestaurant(restaurantId); } @@ -171,7 +171,7 @@ export class NotificationsController { @UseGuards(AdminAuthGuard) @ApiBearerAuth() @Get('admin/notifications/sms-usage') - @ApiOperation({ summary: 'Get SMS usage for my restaurant' }) + @ApiOperation({ summary: 'Get SMS usage for my shop' }) async getRestaurantSmsUsage(@RestId() restaurantId: string) { const smsCount = await this.notificationService.getSmsCountByRestaurantId(restaurantId); return { smsCount }; @@ -182,7 +182,7 @@ export class NotificationsController { @UseGuards(SuperAdminAuthGuard) @ApiBearerAuth() @Get('super-admin/notifications/sms-count') - @ApiOperation({ summary: 'Get SMS count for each restaurant with pagination' }) + @ApiOperation({ summary: 'Get SMS count for each shop with pagination' }) @ApiQuery({ name: 'page', required: false, type: Number, description: 'Page number (default: 1)', minimum: 1 }) @ApiQuery({ name: 'limit', required: false, type: Number, description: 'Items per page (default: 10)', minimum: 1 }) async getSmsCount( diff --git a/src/modules/notifications/decorators/ws-rest-id.decorator.ts b/src/modules/notifications/decorators/ws-rest-id.decorator.ts index 8391a8e..53eabfe 100644 --- a/src/modules/notifications/decorators/ws-rest-id.decorator.ts +++ b/src/modules/notifications/decorators/ws-rest-id.decorator.ts @@ -3,7 +3,7 @@ import { createParamDecorator } from '@nestjs/common'; import type { AuthenticatedSocket } from '../guards/ws-admin-auth.guard'; /** - * Extract restaurant ID from authenticated WebSocket client + * Extract shop ID from authenticated WebSocket client * Use this decorator in WebSocket handlers to get the restId from the authenticated admin * * @example @@ -19,7 +19,7 @@ export const WsRestId = createParamDecorator((data: unknown, ctx: ExecutionConte const restId = client.restId; if (!restId) { - throw new Error('Restaurant ID not found. Ensure WsAdminAuthGuard is applied.'); + throw new Error('Shop ID not found. Ensure WsAdminAuthGuard is applied.'); } return restId; diff --git a/src/modules/notifications/dto/send-notification.dto.ts b/src/modules/notifications/dto/send-notification.dto.ts index c306319..2d3bd9f 100644 --- a/src/modules/notifications/dto/send-notification.dto.ts +++ b/src/modules/notifications/dto/send-notification.dto.ts @@ -2,7 +2,7 @@ import { IsString, IsNotEmpty, IsOptional, IsObject } from 'class-validator'; import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; export class SendNotificationDto { - @ApiProperty({ description: 'Restaurant ID (ULID)' }) + @ApiProperty({ description: 'Shop ID (ULID)' }) @IsString() @IsNotEmpty() restaurantId: string; diff --git a/src/modules/notifications/entities/notification-preference.entity.ts b/src/modules/notifications/entities/notification-preference.entity.ts index e3ab3bc..126ccd5 100644 --- a/src/modules/notifications/entities/notification-preference.entity.ts +++ b/src/modules/notifications/entities/notification-preference.entity.ts @@ -1,14 +1,14 @@ import { Entity, Property, ManyToOne, Unique } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; import { NotifTitleEnum } from '../interfaces/notification.interface'; import { NotifChannelEnum } from '../interfaces/notification.interface'; @Entity({ tableName: 'notification_preferences' }) -@Unique({ properties: ['restaurant', 'title'] }) +@Unique({ properties: ['shop', 'title'] }) export class NotificationPreference extends BaseEntity { - @ManyToOne(() => Restaurant) - restaurant!: Restaurant; + @ManyToOne(() => Shop) + shop!: Shop; @Property() title!: NotifTitleEnum; diff --git a/src/modules/notifications/entities/notification.entity.ts b/src/modules/notifications/entities/notification.entity.ts index 0f2d544..44e18f3 100644 --- a/src/modules/notifications/entities/notification.entity.ts +++ b/src/modules/notifications/entities/notification.entity.ts @@ -1,14 +1,14 @@ import { Entity, Property, ManyToOne, Enum } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; -import { User } from '../../users/entities/user.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; +import { User } from '../../../users/entities/user.entity'; import { NotifTitleEnum } from '../interfaces/notification.interface'; import { Admin } from 'src/modules/admin/entities/admin.entity'; @Entity({ tableName: 'notifications' }) export class Notification extends BaseEntity { - @ManyToOne(() => Restaurant) - restaurant!: Restaurant; + @ManyToOne(() => Shop) + shop!: Shop; @ManyToOne(() => User, { nullable: true }) user?: User; diff --git a/src/modules/notifications/entities/smsLogs.entity.ts b/src/modules/notifications/entities/smsLogs.entity.ts index edeb103..2166da1 100644 --- a/src/modules/notifications/entities/smsLogs.entity.ts +++ b/src/modules/notifications/entities/smsLogs.entity.ts @@ -1,13 +1,13 @@ import { Entity, Property, ManyToOne, PrimaryKey } from '@mikro-orm/core'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; @Entity({ tableName: 'sms_logs' }) export class SmsLog { @PrimaryKey() id!: number; - @ManyToOne(() => Restaurant) - restaurant!: Restaurant; + @ManyToOne(() => Shop) + shop!: Shop; @Property() phone!: string; diff --git a/src/modules/notifications/guards/ws-admin-auth.guard.ts b/src/modules/notifications/guards/ws-admin-auth.guard.ts index 296e004..e8073c3 100644 --- a/src/modules/notifications/guards/ws-admin-auth.guard.ts +++ b/src/modules/notifications/guards/ws-admin-auth.guard.ts @@ -3,7 +3,7 @@ import { WsException } from '@nestjs/websockets'; import { Socket } from 'socket.io'; import { JwtService } from '@nestjs/jwt'; import { ConfigService } from '@nestjs/config'; -import { IAdminTokenPayload } from '../../auth/interfaces/IToken-payload'; +import { IAdminTokenPayload } from '../../../auth/interfaces/IToken-payload'; export interface AuthenticatedSocket extends Socket { adminId?: string; diff --git a/src/modules/notifications/listeners/sms.listeners.ts b/src/modules/notifications/listeners/sms.listeners.ts index 8c2a842..a548e08 100644 --- a/src/modules/notifications/listeners/sms.listeners.ts +++ b/src/modules/notifications/listeners/sms.listeners.ts @@ -1,7 +1,7 @@ import { Injectable, Logger } from '@nestjs/common'; import { OnEvent } from '@nestjs/event-emitter'; import { SmsSentEvent } from '../events/sms.events'; -import { RestRepository } from '../../restaurants/repositories/rest.repository'; +import { RestRepository } from ../../..shops/repositories/rest.repository'; import { EntityManager } from '@mikro-orm/postgresql'; import { SmsLog } from '../entities/smsLogs.entity'; @@ -19,22 +19,22 @@ export class SmsListeners { async handleSmsSent(event: SmsSentEvent) { try { this.logger.log( - `SMS sent event received: phone ${event.phoneNumber} for restaurant: ${event.restaurantId}`, + `SMS sent event received: phone ${event.phoneNumber} for shop: ${event.restaurantId}`, ); - // Get the restaurant entity - const restaurant = await this.restRepository.findOne({ id: event.restaurantId }); + // Get the shop entity + const shop = await this.restRepository.findOne({ id: event.restaurantId }); - if (!restaurant) { + if (!shop) { this.logger.warn( - `Restaurant not found for SMS log: ${event.restaurantId}`, + `Shop not found for SMS log: ${event.restaurantId}`, ); return; } // Create SMS log record const smsLog = this.em.create(SmsLog, { - restaurant: restaurant, + shop: shop, phone: event.phoneNumber, createdAt: new Date(), }); diff --git a/src/modules/notifications/notifications.gateway.ts b/src/modules/notifications/notifications.gateway.ts index 2bbd80d..4e79480 100644 --- a/src/modules/notifications/notifications.gateway.ts +++ b/src/modules/notifications/notifications.gateway.ts @@ -82,7 +82,7 @@ export class NotificationsGateway implements OnGatewayConnection, OnGatewayDisco } private getRoom(adminId: string, restaurantId: string) { - return `restaurant:${restaurantId}-admin:${adminId}`; + return `shop:${restaurantId}-admin:${adminId}`; } handleLeaveRoom(client: AuthenticatedSocket) { diff --git a/src/modules/notifications/notifications.module.ts b/src/modules/notifications/notifications.module.ts index c99a1ae..6e5b02c 100644 --- a/src/modules/notifications/notifications.module.ts +++ b/src/modules/notifications/notifications.module.ts @@ -12,7 +12,7 @@ import { SmsProcessor } from './processors/sms.processor'; import { PushProcessor } from './processors/push.processor'; import { NotificationsController } from './controllers/notifications.controller'; import { User } from '../users/entities/user.entity'; -import { Restaurant } from '../restaurants/entities/restaurant.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; import { AuthModule } from '../auth/auth.module'; import { ConfigService } from '@nestjs/config'; import { NotificationQueueNameEnum } from './constants/queue'; @@ -26,14 +26,14 @@ import { NotificationCrone } from './crone/notification.crone'; import { SmsService } from './services/sms.service'; import { SmsLog } from './entities/smsLogs.entity'; import { SmsLogRepository } from './repositories/sms-log.repository'; -import { RestaurantsModule } from '../restaurants/restaurants.module'; +import { RestaurantsModule } from ../../..shops.module'; import { SmsListeners } from './listeners/sms.listeners'; @Module({ imports: [ forwardRef(() => AuthModule), JwtModule, - MikroOrmModule.forFeature([Notification, NotificationPreference, User, Restaurant, SmsLog]), + MikroOrmModule.forFeature([Notification, NotificationPreference, User, Shop, SmsLog]), BullModule.registerQueue( { name: NotificationQueueNameEnum.SMS }, { name: NotificationQueueNameEnum.PUSH }, diff --git a/src/modules/notifications/repositories/sms-log.repository.ts b/src/modules/notifications/repositories/sms-log.repository.ts index 6076a29..700a7a5 100644 --- a/src/modules/notifications/repositories/sms-log.repository.ts +++ b/src/modules/notifications/repositories/sms-log.repository.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { EntityManager, EntityRepository } from '@mikro-orm/postgresql'; import { SmsLog } from '../entities/smsLogs.entity'; -import { PaginatedResult } from '../../../common/interfaces/pagination.interface'; +import { PaginatedResult } from '../../../../common/interfaces/pagination.interface'; @Injectable() export class SmsLogRepository extends EntityRepository { @@ -15,7 +15,7 @@ export class SmsLogRepository extends EntityRepository { ): Promise> { const offset = (page - 1) * limit; - // Get total count of unique restaurants with SMS logs + // Get total count of unique shops with SMS logs const totalResult = await this.em.execute( ` SELECT COUNT(DISTINCT sl.restaurant_id) as total @@ -25,7 +25,7 @@ export class SmsLogRepository extends EntityRepository { ); const total = parseInt(totalResult[0]?.total || '0', 10); - // Get paginated results with SMS counts grouped by restaurant + // Get paginated results with SMS counts grouped by shop const results = await this.em.execute( ` SELECT @@ -33,7 +33,7 @@ export class SmsLogRepository extends EntityRepository { r.name as "restaurantName", COUNT(sl.id)::int as "smsCount" FROM sms_logs sl - INNER JOIN restaurants r ON sl.restaurant_id = r.id + INNER JOIN shops r ON sl.restaurant_id = r.id GROUP BY r.id, r.name ORDER BY "smsCount" DESC, r.name ASC LIMIT ? OFFSET ? diff --git a/src/modules/notifications/services/notification-preference.service.ts b/src/modules/notifications/services/notification-preference.service.ts index afe4477..c7a06c7 100644 --- a/src/modules/notifications/services/notification-preference.service.ts +++ b/src/modules/notifications/services/notification-preference.service.ts @@ -1,7 +1,7 @@ import { Injectable, NotFoundException } from '@nestjs/common'; import { EntityManager } from '@mikro-orm/postgresql'; import { NotificationPreference } from '../entities/notification-preference.entity'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; import { CreatePreferenceDto } from '../dto/create-preference.dto'; import { UpdatePreferenceDto } from '../dto/update-preference.dto'; import { NotifTitleEnum } from '../interfaces/notification.interface'; @@ -11,13 +11,13 @@ export class NotificationPreferenceService { constructor(private readonly em: EntityManager) { } async create(restaurantId: string, dto: CreatePreferenceDto): Promise { - const restaurant = await this.em.findOne(Restaurant, { id: restaurantId }); - if (!restaurant) { - throw new NotFoundException('Restaurant not found'); + const shop = await this.em.findOne(Shop, { id: restaurantId }); + if (!shop) { + throw new NotFoundException('Shop not found'); } const preference = this.em.create(NotificationPreference, { - restaurant, + shop, channels: dto.channels, title: dto.title, }); @@ -28,13 +28,13 @@ export class NotificationPreferenceService { async findByRestaurant(restaurantId: string): Promise { return this.em.find(NotificationPreference, { - restaurant: { id: restaurantId }, + shop: { id: restaurantId }, }); } async findByRestaurantAndType(restaurantId: string, title: NotifTitleEnum): Promise { return this.em.findOne(NotificationPreference, { - restaurant: { id: restaurantId }, + shop: { id: restaurantId }, title, }); } @@ -61,7 +61,7 @@ export class NotificationPreferenceService { ): Promise { const preference = await this.em.findOne(NotificationPreference, { id: preferenceId, - restaurant: { id: restaurantId }, + shop: { id: restaurantId }, }); if (!preference) { throw new NotFoundException('Notification preference not found'); @@ -74,7 +74,7 @@ export class NotificationPreferenceService { async delete(restaurantId: string, preferenceId: string): Promise { const preference = await this.em.findOne(NotificationPreference, { - restaurant: { id: restaurantId }, + shop: { id: restaurantId }, id: preferenceId, }); if (!preference) { diff --git a/src/modules/notifications/services/notification.service.ts b/src/modules/notifications/services/notification.service.ts index 6c7e243..9d9adca 100644 --- a/src/modules/notifications/services/notification.service.ts +++ b/src/modules/notifications/services/notification.service.ts @@ -7,7 +7,7 @@ import { NotificationsGateway } from '../notifications.gateway'; import { NotifChannelEnum, NotifRequest, NotifTitleEnum } from '../interfaces/notification.interface'; import { SmsLog } from '../entities/smsLogs.entity'; import { SmsLogRepository } from '../repositories/sms-log.repository'; -import { PaginatedResult } from '../../../common/interfaces/pagination.interface'; +import { PaginatedResult } from '../../../../common/interfaces/pagination.interface'; @Injectable() export class NotificationService { @@ -39,7 +39,7 @@ export class NotificationService { const preference = await this.preferenceService.findByRestaurantAndType(restaurantId, message.title); if (preference?.channels?.length === 0) { - this.logger.warn(`Notification type is NONE for restaurant ${restaurantId}, title ${message.title}`); + this.logger.warn(`Notification type is NONE for shop ${restaurantId}, title ${message.title}`); return notifications; } @@ -67,7 +67,7 @@ export class NotificationService { ); } - this.logger.log(`Queued notification for restaurant ${restaurantId}, title ${message.title}`); + this.logger.log(`Queued notification for shop ${restaurantId}, title ${message.title}`); return notifications; } @@ -83,7 +83,7 @@ export class NotificationService { ): Promise { const notifications = params.map(param => { return this.em.create(Notification, { - restaurant: param.restaurantId, + shop: param.restaurantId, admin: param.adminId, user: param.userId && param.userId.trim() !== '' ? param.userId : null, title: param.title, @@ -95,7 +95,7 @@ export class NotificationService { } async findOne(id: string): Promise { - const notification = await this.em.findOne(Notification, { id }, { populate: ['restaurant', 'user'] }); + const notification = await this.em.findOne(Notification, { id }, { populate: ['shop', 'user'] }); if (!notification) { throw new NotFoundException('Notification not found'); } @@ -110,7 +110,7 @@ export class NotificationService { status?: 'seen' | 'unseen', ): Promise<{ data: Notification[]; nextCursor: string | null }> { const where: FilterQuery = { - restaurant: { id: restaurantId }, + shop: { id: restaurantId }, admin: { id: adminId }, }; @@ -151,7 +151,7 @@ export class NotificationService { ): Promise<{ data: Notification[]; nextCursor: string | null }> { const where: FilterQuery = { user: { id: userId }, - restaurant: { id: restaurantId }, + shop: { id: restaurantId }, }; // Filter by status (seen/unseen) @@ -186,7 +186,7 @@ export class NotificationService { const notification = await this.em.findOne(Notification, { id, admin: { id: adminId }, - restaurant: { id: restaurantId }, + shop: { id: restaurantId }, }); if (!notification) { throw new NotFoundException('Notification not found'); @@ -198,7 +198,7 @@ export class NotificationService { const notification = await this.em.findOne(Notification, { id, user: { id: userId }, - restaurant: { id: restaurantId }, + shop: { id: restaurantId }, }); if (!notification) { throw new NotFoundException('Notification not found'); @@ -211,7 +211,7 @@ export class NotificationService { return this.em.find( Notification, { - restaurant: { id: restaurantId }, + shop: { id: restaurantId }, title, }, { @@ -225,7 +225,7 @@ export class NotificationService { async findByAdminAndRestaurant(adminId: string, restaurantId: string, limit = 50): Promise { return this.em.find( Notification, - { admin: { id: adminId }, restaurant: { id: restaurantId } }, + { admin: { id: adminId }, shop: { id: restaurantId } }, { orderBy: { createdAt: 'DESC' }, limit, @@ -236,7 +236,7 @@ export class NotificationService { async countUnseenByUserAndRestaurant(userId: string, restaurantId: string): Promise { const where: FilterQuery = { user: { id: userId }, - restaurant: { id: restaurantId }, + shop: { id: restaurantId }, seenAt: null, }; return this.em.count(Notification, where); @@ -245,7 +245,7 @@ export class NotificationService { async countUnseenByRestaurant(adminId: string, restaurantId: string): Promise { const where: FilterQuery = { admin: { id: adminId }, - restaurant: { id: restaurantId }, + shop: { id: restaurantId }, seenAt: null, }; return this.em.count(Notification, where); @@ -254,7 +254,7 @@ export class NotificationService { readAllNotifsAsUser(userId: string, restaurantId: string): Promise { const where: FilterQuery = { user: { id: userId }, - restaurant: { id: restaurantId }, + shop: { id: restaurantId }, seenAt: null, }; return this.em.nativeUpdate(Notification, where, { seenAt: new Date() }); @@ -263,7 +263,7 @@ export class NotificationService { readAllNotifsAsAdmin(adminId: string, restaurantId: string): Promise { const where: FilterQuery = { admin: { id: adminId }, - restaurant: { id: restaurantId }, + shop: { id: restaurantId }, seenAt: null, }; return this.em.nativeUpdate(Notification, where, { seenAt: new Date() }); diff --git a/src/modules/orders/controllers/orders.controller.ts b/src/modules/orders/controllers/orders.controller.ts index 93515f5..b6734dd 100644 --- a/src/modules/orders/controllers/orders.controller.ts +++ b/src/modules/orders/controllers/orders.controller.ts @@ -1,10 +1,10 @@ import { Controller, Get, Post, Param, UseGuards, Patch, Query, Body } from '@nestjs/common'; import { ApiTags, ApiOperation, ApiBearerAuth, ApiParam, ApiHeader, ApiBody } from '@nestjs/swagger'; import { OrdersService } from '../providers/orders.service'; -import { AuthGuard } from '../../auth/guards/auth.guard'; -import { UserId } from '../../../common/decorators/user-id.decorator'; +import { AuthGuard } from '../../../auth/guards/auth.guard'; +import { UserId } from '../../../../common/decorators/user-id.decorator'; import { RestId } from 'src/common/decorators/rest-id.decorator'; -import { AdminAuthGuard } from '../../auth/guards/adminAuth.guard'; +import { AdminAuthGuard } from '../../../auth/guards/adminAuth.guard'; import { FindOrdersDto } from '../dto/find-orders.dto'; import { OrderStatus } from '../interface/order.interface'; import { API_HEADER_SLUG } from 'src/common/constants/index'; @@ -111,9 +111,9 @@ export class OrdersController { @UseGuards(AdminAuthGuard) @Permissions(Permission.VIEW_REPORTS) - @ApiOperation({ summary: 'Get food sales pie chart data for last month' }) + @ApiOperation({ summary: 'Get product sales pie chart data for last month' }) @ApiHeader(API_HEADER_SLUG) - @Get('admin/orders/food-sales-pie-chart') + @Get('admin/orders/product-sales-pie-chart') getFoodSalesPieChart(@RestId() restId: string) { return this.ordersService.getFoodSalesPieChart(restId); } diff --git a/src/modules/orders/crone/order.crone.ts b/src/modules/orders/crone/order.crone.ts index b183cc9..f9179c7 100644 --- a/src/modules/orders/crone/order.crone.ts +++ b/src/modules/orders/crone/order.crone.ts @@ -2,9 +2,9 @@ import { Injectable, Logger } from '@nestjs/common'; import { Cron } from '@nestjs/schedule'; import { EntityManager } from '@mikro-orm/postgresql'; import { EventEmitter2 } from '@nestjs/event-emitter'; -import { Payment } from '../../payments/entities/payment.entity'; -import { PaymentMethodEnum, PaymentStatusEnum } from '../../payments/interface/payment'; -import { InventoryService } from '../../inventory/inventory.service'; +import { Payment } from '../../../payments/entities/payment.entity'; +import { PaymentMethodEnum, PaymentStatusEnum } from '../../../payments/interface/payment'; +import { InventoryService } from '../../../inventory/inventory.service'; import { OrderStatus } from '../interface/order.interface'; import { Order } from '../entities/order.entity'; import { OrderStatusChangedEvent } from '../events/order.events'; @@ -37,7 +37,7 @@ export class OrdersCrone { status: PaymentStatusEnum.Pending, createdAt: { $lte: cutoff }, }, - { populate: ['order', 'order.items', 'order.items.food'] }, + { populate: ['order', 'order.items', 'order.items.product'] }, ); if (!payments || payments.length === 0) { @@ -53,7 +53,7 @@ export class OrdersCrone { const payment = await em.findOne( Payment, { id: p.id }, - { populate: ['order', 'order.items', 'order.items.food'] }, + { populate: ['order', 'order.items', 'order.items.product'] }, ); if (!payment) return; if (payment.status !== PaymentStatusEnum.Pending) return; @@ -67,7 +67,7 @@ export class OrdersCrone { // prepare restore payload const items = (payment.order as any).items || []; const restorePayload = { - items: items.map((it: any) => ({ foodId: it.food.id, quantity: it.quantity })), + items: items.map((it: any) => ({ foodId: it.product.id, quantity: it.quantity })), }; if (restorePayload.items.length > 0) { @@ -114,7 +114,7 @@ export class OrdersCrone { }, updatedAt: { $lte: cutoff }, }, - { populate: ['restaurant'] }, + { populate: ['shop'] }, ); if (!orders || orders.length === 0) { @@ -130,7 +130,7 @@ export class OrdersCrone { const reloadedOrder = await em.findOne( Order, { id: order.id }, - { populate: ['restaurant', 'user'] }, + { populate: ['shop', 'user'] }, ); if (!reloadedOrder) return; if ( @@ -145,9 +145,9 @@ export class OrdersCrone { const previousStatus = reloadedOrder.status; const restaurantId = - typeof reloadedOrder.restaurant === 'string' - ? reloadedOrder.restaurant - : reloadedOrder.restaurant.id; + typeof reloadedOrder.shop === 'string' + ? reloadedOrder.shop + : reloadedOrder.shop.id; // Update order status and history reloadedOrder.status = OrderStatus.COMPLETED; diff --git a/src/modules/orders/dto/find-orders.dto.ts b/src/modules/orders/dto/find-orders.dto.ts index 1ab7404..038a7d7 100644 --- a/src/modules/orders/dto/find-orders.dto.ts +++ b/src/modules/orders/dto/find-orders.dto.ts @@ -11,7 +11,7 @@ import { import { Type, Transform } from 'class-transformer'; import { ApiPropertyOptional } from '@nestjs/swagger'; import { OrderStatus } from '../interface/order.interface'; -import { PaymentStatusEnum } from '../../payments/interface/payment'; +import { PaymentStatusEnum } from '../../../payments/interface/payment'; const sortOrderOptions = ['asc', 'desc'] as const; type SortOrder = (typeof sortOrderOptions)[number]; diff --git a/src/modules/orders/entities/order-item.entity.ts b/src/modules/orders/entities/order-item.entity.ts index 8c996ab..f7621e7 100644 --- a/src/modules/orders/entities/order-item.entity.ts +++ b/src/modules/orders/entities/order-item.entity.ts @@ -1,17 +1,17 @@ import { Entity, Index, ManyToOne, Property } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; import { Order } from './order.entity'; -import { Food } from '../../foods/entities/food.entity'; +import { Product } from ../../..products/entities/product.entity'; @Entity({ tableName: 'order_items' }) @Index({ properties: ['order'] }) -@Index({ properties: ['food'] }) +@Index({ properties: ['product'] }) export class OrderItem extends BaseEntity { @ManyToOne(() => Order) order!: Order; - @ManyToOne(() => Food) - food!: Food; + @ManyToOne(() => Product) + product!: Product; @Property({ type: 'int' }) quantity!: number; diff --git a/src/modules/orders/entities/order.entity.ts b/src/modules/orders/entities/order.entity.ts index 592627b..1cc30d1 100644 --- a/src/modules/orders/entities/order.entity.ts +++ b/src/modules/orders/entities/order.entity.ts @@ -11,28 +11,28 @@ import { Unique, type EventArgs, } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; import { OrderCouponDetail, OrderStatus } from '../interface/order.interface'; -import { User } from '../../users/entities/user.entity'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; -import { PaymentMethod } from '../../payments/entities/payment-method.entity'; +import { User } from '../../../users/entities/user.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; +import { PaymentMethod } from '../../../payments/entities/payment-method.entity'; import { OrderItem } from './order-item.entity'; -import { Delivery } from '../../delivery/entities/delivery.entity'; +import { Delivery } from '../../../delivery/entities/delivery.entity'; import { OrderUserAddress, OrderCarAddress } from '../interface/order.interface'; import { Payment } from 'src/modules/payments/entities/payment.entity'; @Entity({ tableName: 'orders' }) -@Unique({ properties: ['restaurant', 'orderNumber'] }) -@Index({ properties: ['restaurant', 'status'] }) +@Unique({ properties: ['shop', 'orderNumber'] }) +@Index({ properties: ['shop', 'status'] }) @Index({ properties: ['user', 'status'] }) -@Index({ properties: ['restaurant', 'orderNumber'] }) +@Index({ properties: ['shop', 'orderNumber'] }) @Index({ properties: ['status'] }) export class Order extends BaseEntity { @ManyToOne(() => User) user!: User; - @ManyToOne(() => Restaurant) - restaurant!: Restaurant; + @ManyToOne(() => Shop) + shop!: Shop; @ManyToOne(() => Delivery) deliveryMethod!: Delivery; @@ -105,19 +105,19 @@ export class Order extends BaseEntity { const em = args.em; const order = args.entity; - // Ensure restaurant is loaded - if (!order.restaurant) { - throw new Error('Restaurant must be set before creating order'); + // Ensure shop is loaded + if (!order.shop) { + throw new Error('Shop must be set before creating order'); } - // Get the restaurant ID (handle both entity and ID cases) - const restaurantId = typeof order.restaurant === 'string' ? order.restaurant : order.restaurant.id; + // Get the shop ID (handle both entity and ID cases) + const restaurantId = typeof order.shop === 'string' ? order.shop : order.shop.id; - // Query for max orderNumber for this restaurant + // Query for max orderNumber for this shop // Using findOne with orderBy to get the highest order number const maxOrder = await em.findOne( Order, - { restaurant: restaurantId }, + { shop: restaurantId }, { orderBy: { orderNumber: 'DESC' }, fields: ['orderNumber'], diff --git a/src/modules/orders/listeners/order.listeners.ts b/src/modules/orders/listeners/order.listeners.ts index 4495d74..79fadd9 100644 --- a/src/modules/orders/listeners/order.listeners.ts +++ b/src/modules/orders/listeners/order.listeners.ts @@ -48,7 +48,7 @@ export class OrderListeners { async handleOrderCreated(event: OrderCreatedEvent) { try { this.logger.log( - `Order created event received: ${event.orderId} for restaurant: ${event.restaurantId} and order number: ${event.orderNumber}`, + `Order created event received: ${event.orderId} for shop: ${event.restaurantId} and order number: ${event.orderNumber}`, ); const order = await this.OrderRepository.findOne(event.orderId); @@ -102,7 +102,7 @@ export class OrderListeners { async handleOrderStatusChanged(event: OrderStatusChangedEvent) { try { this.logger.log( - `Order status changed event received: ${event.orderId} for restaurant: ${event.restaurantId} and order number: ${event.orderNumber}`, + `Order status changed event received: ${event.orderId} for shop: ${event.restaurantId} and order number: ${event.orderNumber}`, ); //TODO : REFACTOR to use queue or other way to handle this const recipients = [ @@ -114,21 +114,21 @@ export class OrderListeners { if (!event?.userId) { this.logger.log( - `User not found for order: ${event.orderId} for restaurant: ${event.restaurantId} and order number: ${event.orderNumber}`, + `User not found for order: ${event.orderId} for shop: ${event.restaurantId} and order number: ${event.orderNumber}`, ); } - // const restaurant = await this.RestaurantRepository.findOne(event.restaurantId); - // if (!restaurant) { + // const shop = await this.RestaurantRepository.findOne(event.restaurantId); + // if (!shop) { // this.logger.log( - // `Restaurant not found for order: ${event.orderId} for restaurant: ${event.restaurantId} and order number: ${event.orderNumber}`, + // `Shop not found for order: ${event.orderId} for shop: ${event.restaurantId} and order number: ${event.orderNumber}`, // ); // return; // } - // const score = restaurant.score; + // const score = shop.score; // if (!score) { // this.logger.log( - // `Score not found for restaurant: ${event.restaurantId} and order number: ${event.orderNumber}`, + // `Score not found for shop: ${event.restaurantId} and order number: ${event.orderNumber}`, // ); // return; // } @@ -137,7 +137,7 @@ export class OrderListeners { // const order = await this.OrderRepository.findOne(event.orderId); // if (!order) { // this.logger.log( - // `Order not found for order: ${event.orderId} for restaurant: ${event.restaurantId} and order number: ${event.orderNumber}`, + // `Order not found for order: ${event.orderId} for shop: ${event.restaurantId} and order number: ${event.orderNumber}`, // ); // return; // } diff --git a/src/modules/orders/orders.module.ts b/src/modules/orders/orders.module.ts index 6208faf..38520df 100644 --- a/src/modules/orders/orders.module.ts +++ b/src/modules/orders/orders.module.ts @@ -5,8 +5,8 @@ import { OrdersController } from './controllers/orders.controller'; import { Order } from './entities/order.entity'; import { OrderItem } from './entities/order-item.entity'; import { User } from '../users/entities/user.entity'; -import { Restaurant } from '../restaurants/entities/restaurant.entity'; -import { Food } from '../foods/entities/food.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; +import { Product } from ../../..products/entities/product.entity'; import { UserAddress } from '../users/entities/user-address.entity'; import { PaymentMethod } from '../payments/entities/payment-method.entity'; import { CartModule } from '../cart/cart.module'; @@ -24,7 +24,7 @@ import { UserModule } from '../users/user.module'; @Module({ imports: [ - MikroOrmModule.forFeature([Order, OrderItem, User, Restaurant, Food, UserAddress, PaymentMethod]), + MikroOrmModule.forFeature([Order, OrderItem, User, Shop, Product, UserAddress, PaymentMethod]), CartModule, UtilsModule, AuthModule, diff --git a/src/modules/orders/providers/orders.service.ts b/src/modules/orders/providers/orders.service.ts index 62b4489..8f060ef 100644 --- a/src/modules/orders/providers/orders.service.ts +++ b/src/modules/orders/providers/orders.service.ts @@ -2,32 +2,32 @@ import { Injectable, NotFoundException, BadRequestException, Logger } from '@nes import { EntityManager } from '@mikro-orm/postgresql'; import { Order } from '../entities/order.entity'; import { OrderItem } from '../entities/order-item.entity'; -import { User } from '../../users/entities/user.entity'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; -import { Food } from '../../foods/entities/food.entity'; -import { CartService } from '../../cart/providers/cart.service'; +import { User } from '../../../users/entities/user.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; +import { Product } from ../../..products/entities/product.entity'; +import { CartService } from '../../../cart/providers/cart.service'; import { OrderStatus, OrderUserAddress, OrderCarAddress } from '../interface/order.interface'; -import { PaymentMethodEnum, PaymentStatusEnum } from '../../payments/interface/payment'; -import { Cart } from '../../cart/interfaces/cart.interface'; -import { PaymentMethod } from '../../payments/entities/payment-method.entity'; -import { PaymentsService } from '../../payments/services/payments.service'; -import { DeliveryMethodEnum } from '../../delivery/interface/delivery'; -import { Delivery } from '../../delivery/entities/delivery.entity'; +import { PaymentMethodEnum, PaymentStatusEnum } from '../../../payments/interface/payment'; +import { Cart } from '../../../cart/interfaces/cart.interface'; +import { PaymentMethod } from '../../../payments/entities/payment-method.entity'; +import { PaymentsService } from '../../../payments/services/payments.service'; +import { DeliveryMethodEnum } from '../../../delivery/interface/delivery'; +import { Delivery } from '../../../delivery/entities/delivery.entity'; import { OrderRepository } from '../repositories/order.repository'; import { FindOrdersDto } from '../dto/find-orders.dto'; import { PaginatedResult } from 'src/common/interfaces/pagination.interface'; import { Payment } from 'src/modules/payments/entities/payment.entity'; import { InventoryService } from 'src/modules/inventory/inventory.service'; -import { BulkReserveFoodDto } from 'src/modules/inventory/dto/bulk-reserve-food.dto'; +import { BulkReserveFoodDto } from 'src/modules/inventory/dto/bulk-reserve-product.dto'; import { StatusTransitionRef } from '../interface/order.interface'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { OrderCreatedEvent, OrderStatusChangedEvent } from '../events/order.events'; import { OrderMessage } from 'src/common/enums/message.enum'; -type OrderItemData = { food: Food; quantity: number; unitPrice: number; discount: number }; +type OrderItemData = { product: Product; quantity: number; unitPrice: number; discount: number }; type ValidatedCartForOrder = { user: User; - restaurant: Restaurant; + shop: Shop; delivery: Delivery; userAddress: OrderUserAddress | null; carAddress: OrderCarAddress | null; @@ -66,7 +66,7 @@ export class OrdersService { const order = await this.em.transactional(async em => { const order = em.create(Order, { user: validated.user, - restaurant: validated.restaurant, + shop: validated.shop, deliveryMethod: validated.delivery, userAddress: validated.userAddress, carAddress: validated.carAddress, @@ -89,15 +89,15 @@ export class OrdersService { em.persist(order); for (const itemData of validated.orderItemsData) { - const { food, quantity, unitPrice, discount } = itemData; + const { product, quantity, unitPrice, discount } = itemData; - this.assertFoodHasSufficientStock(food, quantity); + this.assertFoodHasSufficientStock(product, quantity); const totalPrice = (unitPrice - discount) * quantity; const orderItem = em.create(OrderItem, { order, - food, + product, quantity, unitPrice, discount, @@ -119,13 +119,13 @@ export class OrdersService { // reserve stock based on payment method. const bulkReserveFoodDto: BulkReserveFoodDto = { items: validated.orderItemsData.map(item => ({ - foodId: item.food.id, + foodId: item.product.id, quantity: item.quantity, })), }; await this.inventoryService.deductFromInventory(em, bulkReserveFoodDto); await em.flush(); - this.logger.debug(`Order ${order.id} created for user ${userId} (restaurant ${restaurantId})`); + this.logger.debug(`Order ${order.id} created for user ${userId} (shop ${restaurantId})`); return order; }); @@ -148,7 +148,7 @@ export class OrdersService { this.assertCartHasDeliveryMethod(cart); this.assertCartHasPaymentMethod(cart); - const [user, restaurant, delivery] = await Promise.all([ + const [user, shop, delivery] = await Promise.all([ this.getUserOrFail(userId), this.getRestaurantOrFail(restaurantId), this.getDeliveryOrFail(cart.deliveryMethodId!), @@ -164,7 +164,7 @@ export class OrdersService { return { user, - restaurant, + shop, delivery, paymentMethod, userAddress: delivery.method === DeliveryMethodEnum.DeliveryCourier ? (cart?.userAddress ?? null) : null, @@ -209,18 +209,18 @@ export class OrdersService { async findOne(id: string, restId: string): Promise { const order = await this.orderRepository.findOne( - { id, restaurant: { id: restId } }, + { id, shop: { id: restId } }, { populate: [ 'user', - 'restaurant', + 'shop', 'deliveryMethod', 'userAddress', 'carAddress', 'paymentMethod', 'payments', 'items', - 'items.food', + 'items.product', ], }, ); @@ -333,7 +333,7 @@ export class OrdersService { private async getOrderOrFail(orderId: string, restId: string): Promise { const order = await this.em.findOne( Order, - { id: orderId, restaurant: { id: restId } }, + { id: orderId, shop: { id: restId } }, { populate: ['paymentMethod', 'deliveryMethod', 'user'] }, ); if (!order) throw new NotFoundException(OrderMessage.NOT_FOUND); @@ -364,10 +364,10 @@ export class OrdersService { return user; } - private async getRestaurantOrFail(restaurantId: string): Promise { - const restaurant = await this.em.findOne(Restaurant, { id: restaurantId }); - if (!restaurant) throw new NotFoundException(OrderMessage.RESTAURANT_NOT_FOUND); - return restaurant; + private async getRestaurantOrFail(restaurantId: string): Promise { + const shop = await this.em.findOne(Shop, { id: restaurantId }); + if (!shop) throw new NotFoundException(OrderMessage.RESTAURANT_NOT_FOUND); + return shop; } private async getDeliveryOrFail(deliveryId: string): Promise { @@ -404,13 +404,13 @@ export class OrdersService { PaymentMethod, { id: paymentMethodId, - restaurant: { id: restaurantId }, + shop: { id: restaurantId }, }, - { populate: ['restaurant'] }, + { populate: ['shop'] }, ); if (!paymentMethod) { - throw new NotFoundException(`Payment method with ID ${paymentMethodId} not found for restaurant ${restaurantId}`); + throw new NotFoundException(`Payment method with ID ${paymentMethodId} not found for shop ${restaurantId}`); } return paymentMethod; @@ -426,28 +426,28 @@ export class OrdersService { const orderItemsData: OrderItemData[] = []; for (const cartItem of cart.items) { - const food = await this.em.findOne(Food, { id: cartItem.foodId }, { populate: ['restaurant', 'inventory'] }); - if (!food) throw new NotFoundException(OrderMessage.FOOD_NOT_FOUND); + const product = await this.em.findOne(Product, { id: cartItem.foodId }, { populate: ['shop', 'inventory'] }); + if (!product) throw new NotFoundException(OrderMessage.FOOD_NOT_FOUND); - if (food.restaurant.id !== restaurantId) { + if (product.shop.id !== restaurantId) { throw new BadRequestException(OrderMessage.FOOD_NOT_BELONGS_TO_RESTAURANT); } - this.assertFoodHasSufficientStock(food, cartItem.quantity); + this.assertFoodHasSufficientStock(product, cartItem.quantity); orderItemsData.push({ - food, + product, quantity: cartItem.quantity, - unitPrice: food.price || 0, - discount: food.discount || 0, + unitPrice: product.price || 0, + discount: product.discount || 0, }); } return orderItemsData; } - private assertFoodHasSufficientStock(food: Food, quantity: number) { - const availableStock = food.inventory?.availableStock ?? 0; + private assertFoodHasSufficientStock(product: Product, quantity: number) { + const availableStock = product.inventory?.availableStock ?? 0; if (availableStock < quantity) { throw new BadRequestException(OrderMessage.FOOD_NOT_FOUND); } @@ -458,7 +458,7 @@ export class OrdersService { return this.em.transactional(async em => { // 1. Total orders count (excluding pending and canceled) const totalOrders = await em.count(Order, { - restaurant: { id: restId }, + shop: { id: restId }, status: { $in: [ OrderStatus.PAID, @@ -471,13 +471,13 @@ export class OrdersService { }, }); - // 2. Active foods count - const activeFoods = await em.count(Food, { - restaurant: { id: restId }, + // 2. Active products count + const activeFoods = await em.count(Product, { + shop: { id: restId }, isActive: true, }); - // 3. Total clients count (distinct users with orders for this restaurant) + // 3. Total clients count (distinct users with orders for this shop) const clientsResult = await em.execute( ` SELECT COUNT(DISTINCT o.user_id) as count @@ -488,7 +488,7 @@ export class OrdersService { ); const totalClients = Number(clientsResult[0]?.count || 0); - // 4. Total revenue (sum of paid payments for orders of this restaurant) + // 4. Total revenue (sum of paid payments for orders of this shop) const revenueResult = await em.execute( ` SELECT COALESCE(SUM(p.amount), 0)::numeric as total @@ -525,7 +525,7 @@ export class OrdersService { const lastDayOfLastMonth = new Date(now.getFullYear(), now.getMonth(), 0, 23, 59, 59, 999); this.logger.debug( - `Food sales pie chart query params: restId=${restId}, startDate=${startDate.toISOString()}, endDate=${endDate.toISOString()}`, + `Product sales pie chart query params: restId=${restId}, startDate=${startDate.toISOString()}, endDate=${endDate.toISOString()}`, ); // Diagnostic query to check what orders exist @@ -545,7 +545,7 @@ export class OrdersService { `, [restId], ); - this.logger.debug(`Diagnostic: Found ${diagnosticResult.length} recent orders for restaurant ${restId}`); + this.logger.debug(`Diagnostic: Found ${diagnosticResult.length} recent orders for shop ${restId}`); if (diagnosticResult.length > 0) { this.logger.debug(`Sample order: status=${diagnosticResult[0].status}, created_at=${diagnosticResult[0].created_at}`); } @@ -561,7 +561,7 @@ export class OrdersService { COALESCE(SUM(oi.total_price), 0)::numeric as total_revenue FROM order_items oi INNER JOIN orders o ON oi.order_id = o.id - INNER JOIN foods f ON oi.food_id = f.id + INNER JOIN products f ON oi.food_id = f.id WHERE o.restaurant_id = ? AND o.created_at >= ? AND o.created_at <= ? @@ -572,7 +572,7 @@ export class OrdersService { [restId, startDate, endDate], ); - this.logger.debug(`Food sales pie chart query returned ${result.length} rows`); + this.logger.debug(`Product sales pie chart query returned ${result.length} rows`); // Calculate total revenue for percentage calculation const totalRevenue = result.reduce((sum: number, item: any) => { diff --git a/src/modules/orders/repositories/order.repository.ts b/src/modules/orders/repositories/order.repository.ts index 130d931..c367637 100644 --- a/src/modules/orders/repositories/order.repository.ts +++ b/src/modules/orders/repositories/order.repository.ts @@ -4,8 +4,8 @@ import { FilterQuery } from '@mikro-orm/core'; import { Order } from '../entities/order.entity'; import { PaginatedResult } from 'src/common/interfaces/pagination.interface'; import { OrderStatus } from '../interface/order.interface'; -import { PaymentMethodEnum, PaymentStatusEnum } from '../../payments/interface/payment'; -import { Review } from '../../review/entities/review.entity'; +import { PaymentMethodEnum, PaymentStatusEnum } from '../../../payments/interface/payment'; +import { Review } from '../../../review/entities/review.entity'; type FindOrdersOpts = { page?: number; @@ -47,7 +47,7 @@ export class OrderRepository extends EntityRepository { const offset = (page - 1) * limit; - const where: FilterQuery = { restaurant: { id: restId } }; + const where: FilterQuery = { shop: { id: restId } }; // Filter by statuses if (statuses) { @@ -118,15 +118,15 @@ export class OrderRepository extends EntityRepository { limit, offset, orderBy: { [orderBy]: order.toLowerCase() as 'asc' | 'desc' }, - populate: ['user', 'restaurant', 'deliveryMethod', 'paymentMethod', 'items', 'items.food'] as never, + populate: ['user', 'shop', 'deliveryMethod', 'paymentMethod', 'items', 'items.product'] as never, }); // Collect all (orderId, foodId) pairs for efficient review lookup const orderFoodPairs: Array<{ orderId: string; foodId: string }> = []; for (const order of data) { for (const item of order.items.getItems()) { - if (item.food?.id) { - orderFoodPairs.push({ orderId: order.id, foodId: item.food.id }); + if (item.product?.id) { + orderFoodPairs.push({ orderId: order.id, foodId: item.product.id }); } } } @@ -141,30 +141,30 @@ export class OrderRepository extends EntityRepository { Review, { order: { id: { $in: orderIds } }, - food: { id: { $in: foodIds } }, + product: { id: { $in: foodIds } }, }, { - fields: ['id', 'order', 'food'], - populate: ['order', 'food'], + fields: ['id', 'order', 'product'], + populate: ['order', 'product'], }, ); // Create a map: key = `${orderId}-${foodId}`, value = reviewId for (const review of reviews) { - const key = `${review.order.id}-${review.food.id}`; + const key = `${review.order.id}-${review.product.id}`; reviewsMap.set(key, review.id); } } - // Map reviewIds to foods + // Map reviewIds to products for (const order of data) { for (const item of order.items.getItems()) { - if (item.food) { - const key = `${order.id}-${item.food.id}`; + if (item.product) { + const key = `${order.id}-${item.product.id}`; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const food = item.food as any; + const product = item.product as any; // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - food.reviewId = reviewsMap.get(key) || null; + product.reviewId = reviewsMap.get(key) || null; } } } diff --git a/src/modules/pager/controllers/pager.controller.ts b/src/modules/pager/controllers/pager.controller.ts index c5a10e9..2f87fa1 100644 --- a/src/modules/pager/controllers/pager.controller.ts +++ b/src/modules/pager/controllers/pager.controller.ts @@ -1,13 +1,13 @@ import { Controller, Get, Post, Body, UseGuards, Res, Req, Patch, Param } from '@nestjs/common'; import { PagerService } from '../providers/pager.service'; import { CreatePagerDto } from '../dto/create-pager.dto'; -import { OptionalAuthGuard } from '../../auth/guards/optinalAuth.guard'; +import { OptionalAuthGuard } from '../../../auth/guards/optinalAuth.guard'; import { RestId } from 'src/common/decorators/rest-id.decorator'; import { UserId } from 'src/common/decorators/user-id.decorator'; import { RestSlug } from 'src/common/decorators/rest-slug.decorator'; import { ApiTags, ApiOperation, ApiBody, ApiHeader, ApiBearerAuth, ApiParam } from '@nestjs/swagger'; import type { FastifyReply, FastifyRequest } from 'fastify'; -import { AdminAuthGuard } from '../../auth/guards/adminAuth.guard'; +import { AdminAuthGuard } from '../../../auth/guards/adminAuth.guard'; import { AdminId } from 'src/common/decorators/admin-id.decorator'; import { UpdatePagerStatusDto } from '../dto/update-pager.dto'; import { PagerMessage } from 'src/common/enums/message.enum'; @@ -23,7 +23,7 @@ export class PagerController { @UseGuards(OptionalAuthGuard) @Post('public/pager') @ApiOperation({ summary: 'Create a new pager request' }) - @ApiHeader({ name: 'X-Slug', required: true, description: 'Restaurant slug identifier' }) + @ApiHeader({ name: 'X-Slug', required: true, description: 'Shop slug identifier' }) @ApiHeader({ name: 'Authorization', required: false, description: 'Bearer token (optional authentication)' }) @ApiBody({ type: CreatePagerDto }) async create( @@ -78,7 +78,7 @@ export class PagerController { @Permissions(Permission.MANAGE_PAGER) @ApiBearerAuth() @Get('admin/pager') - @ApiOperation({ summary: 'Get all pager requests for the restaurant' }) + @ApiOperation({ summary: 'Get all pager requests for the shop' }) async findAllAdmin(@RestId() restId: string) { return this.pagerService.findAllByRestaurantId(restId); } diff --git a/src/modules/pager/decorators/ws-rest-id.decorator.ts b/src/modules/pager/decorators/ws-rest-id.decorator.ts index bf556ef..bb3819a 100644 --- a/src/modules/pager/decorators/ws-rest-id.decorator.ts +++ b/src/modules/pager/decorators/ws-rest-id.decorator.ts @@ -3,12 +3,12 @@ import { createParamDecorator } from '@nestjs/common'; import type { AuthenticatedSocket } from '../guards/ws-admin-auth.guard'; /** - * Extract restaurant ID from authenticated WebSocket client + * Extract shop ID from authenticated WebSocket client * Use this decorator in WebSocket handlers to get the restId from the authenticated admin * * @example * ```typescript - * @SubscribeMessage('join:restaurant') + * @SubscribeMessage('join:shop') * handleJoinRestaurant(@WsRestId() restId: string) { * // restId is automatically extracted from authenticated admin * } @@ -19,7 +19,7 @@ export const WsRestId = createParamDecorator((data: unknown, ctx: ExecutionConte const restId = client.restId; if (!restId) { - throw new Error('Restaurant ID not found. Ensure WsAdminAuthGuard is applied.'); + throw new Error('Shop ID not found. Ensure WsAdminAuthGuard is applied.'); } return restId; diff --git a/src/modules/pager/dto/pager-socket-connection.dto.ts b/src/modules/pager/dto/pager-socket-connection.dto.ts index 49ed5c9..c1ad0f3 100644 --- a/src/modules/pager/dto/pager-socket-connection.dto.ts +++ b/src/modules/pager/dto/pager-socket-connection.dto.ts @@ -54,7 +54,7 @@ export interface PagerSocketConnectionConfig { */ export enum PagerSocketEvents { // Client to Server Events - JOIN_RESTAURANT = 'join:restaurant', + JOIN_RESTAURANT = 'join:shop', LEAVE_ROOM = 'leave:room', GET_PAGERS = 'get:pagers', UPDATE_PAGER_STATUS = 'update:pager:status', @@ -72,7 +72,7 @@ export enum PagerSocketEvents { } /** - * Payload for joining restaurant room + * Payload for joining shop room * Note: restId is automatically extracted from JWT token, no need to send it */ export type JoinRestaurantPayload = Record; diff --git a/src/modules/pager/entities/pager.entity.ts b/src/modules/pager/entities/pager.entity.ts index 3c29bb2..edc894f 100644 --- a/src/modules/pager/entities/pager.entity.ts +++ b/src/modules/pager/entities/pager.entity.ts @@ -1,7 +1,7 @@ import { Entity, ManyToOne, Property, Enum } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; -import { User } from '../../users/entities/user.entity'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; +import { User } from '../../../users/entities/user.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; import { PagerStatus } from '../interface/pager'; import { Admin } from 'src/modules/admin/entities/admin.entity'; @@ -10,8 +10,8 @@ export class Pager extends BaseEntity { @Property({ type: 'string' }) cookieId!: string; - @ManyToOne(() => Restaurant) - restaurant!: Restaurant; + @ManyToOne(() => Shop) + shop!: Shop; @Property({ type: 'string' }) tableNumber!: string; diff --git a/src/modules/pager/guards/ws-admin-auth.guard.ts b/src/modules/pager/guards/ws-admin-auth.guard.ts index 2e15939..d139efd 100644 --- a/src/modules/pager/guards/ws-admin-auth.guard.ts +++ b/src/modules/pager/guards/ws-admin-auth.guard.ts @@ -3,7 +3,7 @@ import { WsException } from '@nestjs/websockets'; import { Socket } from 'socket.io'; import { JwtService } from '@nestjs/jwt'; import { ConfigService } from '@nestjs/config'; -import { IAdminTokenPayload } from '../../auth/interfaces/IToken-payload'; +import { IAdminTokenPayload } from '../../../auth/interfaces/IToken-payload'; export interface AuthenticatedSocket extends Socket { adminId?: string; diff --git a/src/modules/pager/listeners/notification.listeners.ts b/src/modules/pager/listeners/notification.listeners.ts index 58921db..e72b630 100644 --- a/src/modules/pager/listeners/notification.listeners.ts +++ b/src/modules/pager/listeners/notification.listeners.ts @@ -45,7 +45,7 @@ export class PagerListeners { icon: `/assets/images/logo.png`, action: { type: NotifTitleEnum.PAGER_CREATED, - url: `/restaurants/${event.restaurantId}/pagers`, + url: `/shops/${event.restaurantId}/pagers`, }, }, }, diff --git a/src/modules/pager/providers/pager.service.ts b/src/modules/pager/providers/pager.service.ts index 1210551..a3ffe00 100644 --- a/src/modules/pager/providers/pager.service.ts +++ b/src/modules/pager/providers/pager.service.ts @@ -1,12 +1,12 @@ import { BadRequestException, Injectable, NotFoundException, Inject, forwardRef } from '@nestjs/common'; import { CreatePagerDto } from '../dto/create-pager.dto'; -import { User } from '../../users/entities/user.entity'; +import { User } from '../../../users/entities/user.entity'; import { EntityManager } from '@mikro-orm/postgresql'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; import { Pager } from '../entities/pager.entity'; import { PagerStatus } from '../interface/pager'; import { ulid } from 'ulid'; -import { Admin } from '../../admin/entities/admin.entity'; +import { Admin } from '../../../admin/entities/admin.entity'; import { PagerCreatedEvent } from '../events/pager.events'; import { EventEmitter2 } from '@nestjs/event-emitter'; @@ -24,15 +24,15 @@ export class PagerService { params: { restId?: string; userId?: string; slug: string; userCookieId?: string }, ) { const { restId, userId, slug, userCookieId } = params; - let restaurant: Restaurant | null = null; + let shop: Shop | null = null; let user: User | null = null; if (!restId && !userId && !slug) { throw new BadRequestException('Invalid parameters'); } if (restId) { - restaurant = await this.em.findOne(Restaurant, { id: restId }); - if (!restaurant) { - throw new NotFoundException('Restaurant not found'); + shop = await this.em.findOne(Shop, { id: restId }); + if (!shop) { + throw new NotFoundException('Shop not found'); } } if (userId) { @@ -41,15 +41,15 @@ export class PagerService { throw new NotFoundException('User not found'); } } - if (!restaurant && slug) { - restaurant = await this.em.findOne(Restaurant, { slug }); - if (!restaurant) { - throw new NotFoundException('Restaurant not found'); + if (!shop && slug) { + shop = await this.em.findOne(Shop, { slug }); + if (!shop) { + throw new NotFoundException('Shop not found'); } } const cookieId = userCookieId || ulid().toString(); // const existingPager = await this.em.findOne(Pager, { - // restaurant: { id: restaurant!.id }, + // shop: { id: shop!.id }, // status: PagerStatus.Pending, // cookieId, // }); @@ -59,7 +59,7 @@ export class PagerService { const pager = this.em.create(Pager, { ...createPagerDto, - restaurant: restaurant!, + shop: shop!, user, cookieId: ulid().toString(), status: PagerStatus.Pending, @@ -68,9 +68,9 @@ export class PagerService { await this.em.persistAndFlush(pager); // Populate relations before emitting - await this.em.populate(pager, ['restaurant']); + await this.em.populate(pager, ['shop']); // Emit socket event for new pager - this.eventEmitter.emit(PagerCreatedEvent.name, new PagerCreatedEvent(pager.restaurant.id, pager.tableNumber)); + this.eventEmitter.emit(PagerCreatedEvent.name, new PagerCreatedEvent(pager.shop.id, pager.tableNumber)); return pager; } @@ -81,15 +81,15 @@ export class PagerService { } async findAllByRestaurantId(restId: string) { - const pagers = await this.em.find(Pager, { restaurant: { id: restId } }, { populate: ['user'] }); + const pagers = await this.em.find(Pager, { shop: { id: restId } }, { populate: ['user'] }); return pagers; } async updateStatus(pagerId: string, restId: string, staffId: string, status: PagerStatus) { const pager = await this.em.findOne( Pager, - { id: pagerId, restaurant: { id: restId } }, - { populate: ['restaurant'] }, + { id: pagerId, shop: { id: restId } }, + { populate: ['shop'] }, ); if (!pager) { throw new NotFoundException('Pager not found *'); @@ -105,7 +105,7 @@ export class PagerService { await this.em.persistAndFlush(pager); // Populate relations before emitting - await this.em.populate(pager, ['restaurant', 'staff', 'user']); + await this.em.populate(pager, ['shop', 'staff', 'user']); // Emit socket event for status update // this.pagerGateway.emitPagerStatusUpdated(pager); diff --git a/src/modules/payments/controllers/payments.controller.ts b/src/modules/payments/controllers/payments.controller.ts index a9d208e..dcecda6 100644 --- a/src/modules/payments/controllers/payments.controller.ts +++ b/src/modules/payments/controllers/payments.controller.ts @@ -31,10 +31,10 @@ export class PaymentsController { @UseGuards(AuthGuard) @ApiBearerAuth() - @Get('public/payments/methods/restaurant') - @ApiOperation({ summary: 'Get the restaurant payment methods' }) + @Get('public/payments/methods/shop') + @ApiOperation({ summary: 'Get the shop payment methods' }) @ApiHeader(API_HEADER_SLUG) - @ApiNotFoundResponse({ description: 'Restaurant payment methods not found' }) + @ApiNotFoundResponse({ description: 'Shop payment methods not found' }) getTheRestaurantPaymentMethods(@RestId() restId: string) { return this.paymentMethodService.findByRestaurant(restId); } @@ -42,7 +42,7 @@ export class PaymentsController { @UseGuards(AuthGuard) @ApiBearerAuth() @Get('public/payments') - @ApiOperation({ summary: 'Get all the restaurant payments for user' }) + @ApiOperation({ summary: 'Get all the shop payments for user' }) @ApiHeader(API_HEADER_SLUG) findAllByRestaurant(@UserId() userId: string, @RestId() restId: string) { return this.paymentsService.findAllPaymentsByRestaurantId(restId, userId); @@ -72,7 +72,7 @@ export class PaymentsController { @Permissions(Permission.MANAGE_PAYMENTS) @ApiBearerAuth() @Get('admin/payments/methods') - @ApiOperation({ summary: 'Get restaurant all payment methods' }) + @ApiOperation({ summary: 'Get shop all payment methods' }) findByRestaurant(@RestId() restId: string) { return this.paymentMethodService.findByRestaurant(restId); } @@ -81,7 +81,7 @@ export class PaymentsController { @Permissions(Permission.MANAGE_PAYMENTS) @ApiBearerAuth() @Post('admin/payments/methods') - @ApiOperation({ summary: 'Create a new restaurant payment method' }) + @ApiOperation({ summary: 'Create a new shop payment method' }) @ApiBody({ type: CreatePaymentMethodDto }) createRestaurantPaymentMethod(@RestId() restId: string, @Body() createPaymentMethodDto: CreatePaymentMethodDto) { return this.paymentMethodService.create(restId, createPaymentMethodDto); @@ -91,7 +91,7 @@ export class PaymentsController { @Permissions(Permission.MANAGE_PAYMENTS) @ApiBearerAuth() @Get('admin/payments/methods/:paymentMethodId') - @ApiOperation({ summary: 'Get restaurant payment method by ID' }) + @ApiOperation({ summary: 'Get shop payment method by ID' }) @ApiParam({ name: 'paymentMethodId', type: 'string', description: 'Payment method ID' }) findOneRestaurantPaymentMethod(@Param('paymentMethodId') paymentMethodId: string) { return this.paymentMethodService.findOne(paymentMethodId); @@ -101,7 +101,7 @@ export class PaymentsController { @Permissions(Permission.MANAGE_PAYMENTS) @ApiBearerAuth() @Patch('admin/payments/methods/:paymentMethodId') - @ApiOperation({ summary: 'Update a restaurant payment method' }) + @ApiOperation({ summary: 'Update a shop payment method' }) @ApiParam({ name: 'paymentMethodId', type: 'string', description: 'Payment method ID' }) @ApiBody({ type: UpdatePaymentMethodDto }) updateRestaurantPaymentMethod( @@ -115,7 +115,7 @@ export class PaymentsController { @Permissions(Permission.MANAGE_PAYMENTS) @ApiBearerAuth() @Delete('admin/payments/methods/:paymentMethodId') - @ApiOperation({ summary: 'Delete a restaurant payment method' }) + @ApiOperation({ summary: 'Delete a shop payment method' }) @ApiParam({ name: 'paymentMethodId', type: 'string', description: 'Payment method ID' }) removeRestaurantPaymentMethod(@Param('paymentMethodId') paymentMethodId: string) { return this.paymentMethodService.remove(paymentMethodId); diff --git a/src/modules/payments/entities/payment-method.entity.ts b/src/modules/payments/entities/payment-method.entity.ts index 63f5ad9..0b23567 100644 --- a/src/modules/payments/entities/payment-method.entity.ts +++ b/src/modules/payments/entities/payment-method.entity.ts @@ -1,14 +1,14 @@ import { Entity, Enum, Index, ManyToOne, Property, Unique } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; -import { Restaurant } from 'src/modules/restaurants/entities/restaurant.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; import { PaymentGatewayEnum, PaymentMethodEnum } from '../interface/payment'; @Entity({ tableName: 'payment_methods' }) -@Unique({ properties: ['restaurant', 'method'] }) -@Index({ properties: ['restaurant', 'enabled'] }) +@Unique({ properties: ['shop', 'method'] }) +@Index({ properties: ['shop', 'enabled'] }) export class PaymentMethod extends BaseEntity { - @ManyToOne(() => Restaurant) - restaurant!: Restaurant; + @ManyToOne(() => Shop) + shop!: Shop; @Enum(() => PaymentMethodEnum) method!: PaymentMethodEnum; diff --git a/src/modules/payments/entities/payment.entity.ts b/src/modules/payments/entities/payment.entity.ts index 5f2827e..12bf31c 100644 --- a/src/modules/payments/entities/payment.entity.ts +++ b/src/modules/payments/entities/payment.entity.ts @@ -1,6 +1,6 @@ import { Entity, ManyToOne, Property, Enum, Index } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; -import { Order } from '../../orders/entities/order.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; +import { Order } from '../../../orders/entities/order.entity'; import { PaymentGatewayEnum, PaymentMethodEnum, PaymentStatusEnum } from '../interface/payment'; @Entity({ tableName: 'payments' }) diff --git a/src/modules/payments/listeners/payment.listeners.ts b/src/modules/payments/listeners/payment.listeners.ts index ed60ca7..3b85ea3 100644 --- a/src/modules/payments/listeners/payment.listeners.ts +++ b/src/modules/payments/listeners/payment.listeners.ts @@ -36,7 +36,7 @@ export class PaymentListeners { async handlePaymentSucceed(event: paymentSucceedEvent) { try { this.logger.log( - `Payment paid event received: ${event.orderId} for restaurant: ${event.restaurantId} and order number: ${event.orderNumber}`, + `Payment paid event received: ${event.orderId} for shop: ${event.restaurantId} and order number: ${event.orderNumber}`, ); // get admnin os restuaraant that have order permissuins const admins = await this.adminService.findAdminsWithPermission(event.restaurantId, Permission.MANAGE_ORDERS); @@ -84,7 +84,7 @@ export class PaymentListeners { try { this.logger.log( - `Online payment succeed event received: ${event.paymentId} for restaurant: ${event.restaurantId} and order number: ${event.orderNumber}`, + `Online payment succeed event received: ${event.paymentId} for shop: ${event.restaurantId} and order number: ${event.orderNumber}`, ); const admins = await this.adminService.findAdminsWithPermission(event.restaurantId, Permission.MANAGE_ORDERS); const recipients = admins.map(admin => ({ @@ -123,7 +123,7 @@ export class PaymentListeners { const order = await this.orderService.findOne(event.orderId, event.restaurantId); if (!order) { this.logger.error( - `Order not found: ${event.orderId} for restaurant: ${event.restaurantId}`, + `Order not found: ${event.orderId} for shop: ${event.restaurantId}`, ); return; } diff --git a/src/modules/payments/payments.module.ts b/src/modules/payments/payments.module.ts index a429d7a..63041ba 100644 --- a/src/modules/payments/payments.module.ts +++ b/src/modules/payments/payments.module.ts @@ -4,7 +4,7 @@ import { MikroOrmModule } from '@mikro-orm/nestjs'; import { PaymentMethod } from './entities/payment-method.entity'; import { PaymentMethodRepository } from './repositories/payment-method.repository'; import { PaymentMethodService } from './services/payment-method.service'; -import { Restaurant } from '../restaurants/entities/restaurant.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; import { PaymentsController } from './controllers/payments.controller'; import { AuthModule } from '../auth/auth.module'; import { JwtModule } from '@nestjs/jwt'; @@ -19,7 +19,7 @@ import { NotificationsModule } from '../notifications/notifications.module'; import { OrdersModule } from '../orders/orders.module'; @Module({ - imports: [MikroOrmModule.forFeature([PaymentMethod, Payment, Restaurant]), + imports: [MikroOrmModule.forFeature([PaymentMethod, Payment, Shop]), AuthModule, JwtModule, InventoryModule, AdminModule, NotificationsModule, forwardRef(() => OrdersModule)], controllers: [PaymentsController], diff --git a/src/modules/payments/services/payment-method.service.ts b/src/modules/payments/services/payment-method.service.ts index cb40dcf..b2fca25 100644 --- a/src/modules/payments/services/payment-method.service.ts +++ b/src/modules/payments/services/payment-method.service.ts @@ -5,7 +5,7 @@ import { PaymentMethodRepository } from '../repositories/payment-method.reposito import { CreatePaymentMethodDto } from '../dto/create-payment-method.dto'; import { UpdatePaymentMethodDto } from '../dto/update-payment-method.dto'; import { RequiredEntityData } from '@mikro-orm/core'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; import { RestMessage, PaymentMessage } from 'src/common/enums/message.enum'; @Injectable() @@ -16,14 +16,14 @@ export class PaymentMethodService { ) {} async create(restId: string, createPaymentMethodDto: CreatePaymentMethodDto): Promise { - // Check if restaurant exists - const restaurant = await this.em.findOne(Restaurant, { id: restId }); - if (!restaurant) { + // Check if shop exists + const shop = await this.em.findOne(Shop, { id: restId }); + if (!shop) { throw new NotFoundException(RestMessage.NOT_FOUND); } const paymentMethod = this.paymentMethodRepository.create({ - restaurant, + shop, ...createPaymentMethodDto, } as unknown as RequiredEntityData); await this.em.persistAndFlush(paymentMethod); @@ -31,11 +31,11 @@ export class PaymentMethodService { } async findAll(): Promise { - return this.paymentMethodRepository.findAll({ populate: ['restaurant'] }); + return this.paymentMethodRepository.findAll({ populate: ['shop'] }); } async findOne(id: string): Promise { - const paymentMethod = await this.paymentMethodRepository.findOne({ id }, { populate: ['restaurant'] }); + const paymentMethod = await this.paymentMethodRepository.findOne({ id }, { populate: ['shop'] }); if (!paymentMethod) { throw new NotFoundException(PaymentMessage.PAYMENT_METHOD_NOT_FOUND); } @@ -43,7 +43,7 @@ export class PaymentMethodService { } async findByRestaurant(restaurantId: string): Promise { - return this.paymentMethodRepository.find({ restaurant: { id: restaurantId } }, { populate: ['restaurant'] }); + return this.paymentMethodRepository.find({ shop: { id: restaurantId } }, { populate: ['shop'] }); } async update(id: string, updatePaymentMethodDto: UpdatePaymentMethodDto): Promise { diff --git a/src/modules/payments/services/payments.service.ts b/src/modules/payments/services/payments.service.ts index 1733710..705f257 100644 --- a/src/modules/payments/services/payments.service.ts +++ b/src/modules/payments/services/payments.service.ts @@ -2,7 +2,7 @@ import { BadRequestException, Injectable, NotFoundException } from '@nestjs/comm import { PaymentGatewayEnum, PaymentMethodEnum, PaymentStatusEnum } from '../interface/payment'; import { Payment } from '../entities/payment.entity'; import { EntityManager } from '@mikro-orm/postgresql'; -import { Order } from '../../orders/entities/order.entity'; +import { Order } from '../../../orders/entities/order.entity'; import { Logger } from '@nestjs/common'; import { GatewayManager } from '../gateways/gateway.manager'; import { WalletTransaction } from 'src/modules/users/entities/wallet-transaction.entity'; @@ -53,7 +53,7 @@ export class PaymentsService { const order = await this.em.findOne( Order, { id: orderId }, - { populate: ['user', 'restaurant', 'paymentMethod', 'paymentMethod.restaurant'] }, + { populate: ['user', 'shop', 'paymentMethod', 'paymentMethod.shop'] }, ); if (!order) { @@ -72,7 +72,7 @@ export class PaymentsService { if (pm.method === PaymentMethodEnum.Online) { if (!pm.gateway) throw new BadRequestException(PaymentMessage.GATEWAY_REQUIRED); if (!pm.merchantId) throw new BadRequestException(PaymentMessage.MERCHANT_ID_REQUIRED); - if (!pm.restaurant?.domain) throw new BadRequestException(PaymentMessage.RESTAURANT_DOMAIN_REQUIRED); + if (!pm.shop?.domain) throw new BadRequestException(PaymentMessage.RESTAURANT_DOMAIN_REQUIRED); } return { @@ -81,7 +81,7 @@ export class PaymentsService { method: pm.method, gateway: pm.gateway ?? null, merchantId: pm.merchantId ?? null, - restaurantDomain: pm.restaurant.domain ?? null, + restaurantDomain: pm.shop.domain ?? null, }; } @@ -96,7 +96,7 @@ export class PaymentsService { // TODO clean this code and refactor it private async handleWalletPayment(ctx: OrderPaymentContext): Promise { await this.em.transactional(async em => { - const order = await em.findOne(Order, { id: ctx.order.id }, { populate: ['user', 'restaurant'] }); + const order = await em.findOne(Order, { id: ctx.order.id }, { populate: ['user', 'shop'] }); if (!order) throw new NotFoundException(OrderMessage.NOT_FOUND); if (order.status === OrderStatus.PAID) { @@ -105,7 +105,7 @@ export class PaymentsService { const walletTransaction = await em.findOne(WalletTransaction, { user: { id: order.user.id }, - restaurant: { id: order.restaurant.id }, + shop: { id: order.shop.id }, }, { orderBy: { createdAt: 'DESC' } }); @@ -130,7 +130,7 @@ export class PaymentsService { const newWalletTransaction = em.create(WalletTransaction, { user: order.user, - restaurant: order.restaurant, + shop: order.shop, amount: ctx.amount, type: WalletTransactionType.DEBIT, reason: WalletTransactionReason.ORDER_PAYMENT, @@ -146,7 +146,7 @@ export class PaymentsService { }); this.eventEmitter.emit( paymentSucceedEvent.name, - new paymentSucceedEvent(ctx.order.id, ctx.order.restaurant.id, String(ctx.order?.orderNumber) || '', ctx.method, ctx.amount), + new paymentSucceedEvent(ctx.order.id, ctx.order.shop.id, String(ctx.order?.orderNumber) || '', ctx.method, ctx.amount), ); } @@ -228,7 +228,7 @@ export class PaymentsService { }); this.eventEmitter.emit( onlinePaymentSucceedEvent.name, - new onlinePaymentSucceedEvent(payment.id, payment.order.id, payment.order.restaurant.id, String(payment.order?.orderNumber) || '', payment.amount), + new onlinePaymentSucceedEvent(payment.id, payment.order.id, payment.order.shop.id, String(payment.order?.orderNumber) || '', payment.amount), ); return payment; } @@ -236,7 +236,7 @@ export class PaymentsService { findAllPaymentsByRestaurantId(restId: string, userId: string) { return this.em.find( Payment, - { order: { restaurant: { id: restId }, user: { id: userId } } }, + { order: { shop: { id: restId }, user: { id: userId } } }, { populate: ['order', 'order.paymentMethod'] }, ); } diff --git a/src/modules/foods/controllers/category.controller.ts b/src/modules/products/controllers/category.controller.ts similarity index 91% rename from src/modules/foods/controllers/category.controller.ts rename to src/modules/products/controllers/category.controller.ts index 9360e58..b982fe5 100644 --- a/src/modules/foods/controllers/category.controller.ts +++ b/src/modules/products/controllers/category.controller.ts @@ -25,11 +25,11 @@ import { API_HEADER_SLUG } from 'src/common/constants'; export class CategoryController { constructor(private readonly categoryService: CategoryService) { } - @Get('public/categories/restaurant/:slug') - @ApiOperation({ summary: 'Get all categories by restaurant slug' }) + @Get('public/categories/shop/:slug') + @ApiOperation({ summary: 'Get all categories by shop slug' }) @ApiHeader(API_HEADER_SLUG) - @ApiParam({ name: 'slug', required: true, description: 'Restaurant Slug' }) - @ApiOkResponse({ description: 'List of all categories for the restaurant' }) + @ApiParam({ name: 'slug', required: true, description: 'Shop Slug' }) + @ApiOkResponse({ description: 'List of all categories for the shop' }) findAllByRestaurant(@Param('slug') slug: string) { return this.categoryService.findAllByRestaurant(slug); } @@ -46,7 +46,7 @@ export class CategoryController { return this.categoryService.create(restId, dto); } @Permissions(Permission.MANAGE_CATEGORIES) - @ApiOperation({ summary: 'my restaurant categories' }) + @ApiOperation({ summary: 'my shop categories' }) @UseGuards(AdminAuthGuard) @ApiBearerAuth() @Get('admin/categories') diff --git a/src/modules/foods/controllers/food.controller.ts b/src/modules/products/controllers/product.controller.ts similarity index 77% rename from src/modules/foods/controllers/food.controller.ts rename to src/modules/products/controllers/product.controller.ts index 097bd7a..49dac04 100644 --- a/src/modules/foods/controllers/food.controller.ts +++ b/src/modules/products/controllers/product.controller.ts @@ -1,8 +1,8 @@ import { Controller, Get, Post, Body, Patch, Param, Delete, Query, UseGuards } from '@nestjs/common'; -import { FoodService } from '../providers/food.service'; -import { CreateFoodDto } from '../dto/create-food.dto'; -import { UpdateFoodDto } from '../dto/update-food.dto'; -import { FindFoodsDto } from '../dto/find-foods.dto'; +import { FoodService } from '../providers/product.service'; +import { CreateFoodDto } from '../dto/create-product.dto'; +import { UpdateFoodDto } from '../dto/update-product.dto'; +import { FindFoodsDto } from ../../..products.dto'; import { ApiTags, ApiOperation, @@ -20,41 +20,41 @@ import { API_HEADER_SLUG } from 'src/common/constants'; import { Permission } from 'src/common/enums/permission.enum'; import { Permissions } from 'src/common/decorators/permissions.decorator'; -@ApiTags('foods') +@ApiTags('products') @Controller() export class FoodController { constructor(private readonly foodsService: FoodService) { } - @Get('public/foods/restaurant/:slug') - @ApiOperation({ summary: 'Get all foods by restaurant slug' }) + @Get('public/products/shop/:slug') + @ApiOperation({ summary: 'Get all products by shop slug' }) @ApiHeader(API_HEADER_SLUG) - @ApiParam({ name: 'slug', required: true, description: 'Restaurant Slug' }) + @ApiParam({ name: 'slug', required: true, description: 'Shop Slug' }) findAllByRestaurant(@Param('slug') slug: string) { return this.foodsService.findByWeekDateAndMealType(slug); } - @Get('public/foods/:foodId') + @Get('public/products/:foodId') @UseGuards(OptionalAuthGuard) @ApiHeader(API_HEADER_SLUG) @ApiBearerAuth() - @ApiOperation({ summary: 'Get a food by id' }) + @ApiOperation({ summary: 'Get a product by id' }) @ApiParam({ name: 'foodId', required: true }) findPublicFoodById(@Param('foodId') foodId: string, @UserId() userId?: string): Promise { const a = this.foodsService.findPublicById(foodId, userId); return a; } - @Post('public/foods/favorite/:foodId') + @Post('public/products/favorite/:foodId') @UseGuards(AuthGuard) @ApiHeader(API_HEADER_SLUG) @ApiBearerAuth() - @ApiOperation({ summary: 'toggle a food as favorite' }) + @ApiOperation({ summary: 'toggle a product as favorite' }) @ApiParam({ name: 'foodId', required: true }) setAsFavorute(@Param('foodId') foodId: string, @UserId() userId: string) { return this.foodsService.toggleFavorite(userId, foodId); } - @Get('public/foods/favorite') + @Get('public/products/favorite') @UseGuards(AuthGuard) @ApiHeader(API_HEADER_SLUG) @ApiBearerAuth() @@ -67,8 +67,8 @@ export class FoodController { @UseGuards(AdminAuthGuard) @ApiBearerAuth() @Permissions(Permission.MANAGE_FOODS) - @Post('admin/foods') - @ApiOperation({ summary: 'Create a new food' }) + @Post('admin/products') + @ApiOperation({ summary: 'Create a new product' }) @ApiBody({ type: CreateFoodDto }) create(@Body() createFoodDto: CreateFoodDto, @RestId() restId: string) { return this.foodsService.create(restId, createFoodDto); @@ -77,8 +77,8 @@ export class FoodController { @UseGuards(AdminAuthGuard) @ApiBearerAuth() @Permissions(Permission.MANAGE_FOODS) - @Get('admin/foods') - @ApiOperation({ summary: 'Get a paginated list of foods' }) + @Get('admin/products') + @ApiOperation({ summary: 'Get a paginated list of products' }) @ApiQuery({ name: 'page', required: false, type: Number }) @ApiQuery({ name: 'limit', required: false, type: Number }) @ApiQuery({ name: 'search', required: false, type: String }) @@ -94,8 +94,8 @@ export class FoodController { @UseGuards(AdminAuthGuard) @ApiBearerAuth() @Permissions(Permission.MANAGE_FOODS) - @Get('admin/foods/:id') - @ApiOperation({ summary: 'Get a food by id' }) + @Get('admin/products/:id') + @ApiOperation({ summary: 'Get a product by id' }) @ApiParam({ name: 'id', required: true }) findById(@Param('id') id: string, @RestId() restId: string) { return this.foodsService.findAdminById(restId, id); @@ -104,8 +104,8 @@ export class FoodController { @UseGuards(AdminAuthGuard) @ApiBearerAuth() @Permissions(Permission.MANAGE_FOODS) - @Patch('admin/foods/:id') - @ApiOperation({ summary: 'Update a food' }) + @Patch('admin/products/:id') + @ApiOperation({ summary: 'Update a product' }) @ApiParam({ name: 'id', required: true }) @ApiBody({ type: UpdateFoodDto }) update(@Param('id') id: string, @Body() updateFoodDto: UpdateFoodDto, @RestId() restId: string) { @@ -114,8 +114,8 @@ export class FoodController { @UseGuards(AdminAuthGuard) @ApiBearerAuth() @Permissions(Permission.MANAGE_FOODS) - @Delete('admin/foods/:id') - @ApiOperation({ summary: 'Delete (soft) a food' }) + @Delete('admin/products/:id') + @ApiOperation({ summary: 'Delete (soft) a product' }) @ApiParam({ name: 'id', required: true }) remove(@Param('id') id: string, @RestId() restId: string) { return this.foodsService.remove(restId, id); diff --git a/src/modules/foods/crone/food.crone.ts b/src/modules/products/crone/product.crone.ts similarity index 94% rename from src/modules/foods/crone/food.crone.ts rename to src/modules/products/crone/product.crone.ts index 5749702..225a637 100644 --- a/src/modules/foods/crone/food.crone.ts +++ b/src/modules/products/crone/product.crone.ts @@ -1,7 +1,7 @@ import { Injectable, Logger } from '@nestjs/common'; import { Cron } from '@nestjs/schedule'; import { EntityManager } from '@mikro-orm/postgresql'; -import { Inventory } from '../../inventory/entities/inventory.entity'; +import { Inventory } from '../../../inventory/entities/inventory.entity'; @Injectable() export class FoodStockCrone { diff --git a/src/modules/foods/dto/create-category.dto.ts b/src/modules/products/dto/create-category.dto.ts similarity index 100% rename from src/modules/foods/dto/create-category.dto.ts rename to src/modules/products/dto/create-category.dto.ts diff --git a/src/modules/foods/dto/create-food.dto.ts b/src/modules/products/dto/create-product.dto.ts similarity index 100% rename from src/modules/foods/dto/create-food.dto.ts rename to src/modules/products/dto/create-product.dto.ts diff --git a/src/modules/foods/dto/find-foods.dto.ts b/src/modules/products/dto/find-products.dto.ts similarity index 100% rename from src/modules/foods/dto/find-foods.dto.ts rename to src/modules/products/dto/find-products.dto.ts diff --git a/src/modules/foods/dto/update-category.dto.ts b/src/modules/products/dto/update-category.dto.ts similarity index 100% rename from src/modules/foods/dto/update-category.dto.ts rename to src/modules/products/dto/update-category.dto.ts diff --git a/src/modules/foods/dto/update-food.dto.ts b/src/modules/products/dto/update-product.dto.ts similarity index 67% rename from src/modules/foods/dto/update-food.dto.ts rename to src/modules/products/dto/update-product.dto.ts index f0cdb15..82a8617 100644 --- a/src/modules/foods/dto/update-food.dto.ts +++ b/src/modules/products/dto/update-product.dto.ts @@ -1,4 +1,4 @@ import { PartialType } from '@nestjs/swagger'; -import { CreateFoodDto } from './create-food.dto'; +import { CreateFoodDto } from './create-product.dto'; export class UpdateFoodDto extends PartialType(CreateFoodDto) {} diff --git a/src/modules/foods/entities/category.entity.ts b/src/modules/products/entities/category.entity.ts similarity index 52% rename from src/modules/foods/entities/category.entity.ts rename to src/modules/products/entities/category.entity.ts index a2c679f..da6396b 100644 --- a/src/modules/foods/entities/category.entity.ts +++ b/src/modules/products/entities/category.entity.ts @@ -1,23 +1,23 @@ import { Entity, Index, Property, Collection, OneToMany, ManyToOne } from '@mikro-orm/core'; -import { Food } from './food.entity'; -import { BaseEntity } from '../../../common/entities/base.entity'; -import { Restaurant } from 'src/modules/restaurants/entities/restaurant.entity'; +import { Product } from './product.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; @Entity({ tableName: 'categories' }) -@Index({ properties: ['restaurant', 'isActive'] }) +@Index({ properties: ['shop', 'isActive'] }) @Index({ properties: ['isActive'] }) export class Category extends BaseEntity { @Property() title!: string; - @OneToMany(() => Food, food => food.category) - foods = new Collection(this); + @OneToMany(() => Product, product => product.category) + products = new Collection(this); @Property({ default: true }) isActive: boolean = true; - @ManyToOne(() => Restaurant) - restaurant!: Restaurant; + @ManyToOne(() => Shop) + shop!: Shop; @Property({ nullable: true }) avatarUrl?: string; diff --git a/src/modules/products/entities/favorite.entity.ts b/src/modules/products/entities/favorite.entity.ts new file mode 100644 index 0000000..7ced3b0 --- /dev/null +++ b/src/modules/products/entities/favorite.entity.ts @@ -0,0 +1,14 @@ +import { Entity, ManyToOne, Unique } from '@mikro-orm/core'; +import { BaseEntity } from '../../../../common/entities/base.entity'; +import { User } from '../../../users/entities/user.entity'; +import { Product } from '../../../products/entities/product.entity'; + +@Entity({ tableName: 'favorites' }) +@Unique({ properties: ['user', 'product'] }) +export class Favorite extends BaseEntity { + @ManyToOne(() => User) + user: User; + + @ManyToOne(() => Product) + product: Product; +} diff --git a/src/modules/products/entities/product.entity.ts b/src/modules/products/entities/product.entity.ts new file mode 100644 index 0000000..38604d8 --- /dev/null +++ b/src/modules/products/entities/product.entity.ts @@ -0,0 +1,61 @@ +import { Cascade, Collection, Entity, Index, ManyToOne, OneToMany, Property, OneToOne } from '@mikro-orm/core'; +import { Category } from './category.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; +import { Shop } from '../../../../modules/shops/entities/shop.entity'; +import { Review } from 'src/modules/review/entities/review.entity'; +import { Inventory } from 'src/modules/inventory/entities/inventory.entity'; +import { Favorite } from './favorite.entity'; + +@Entity({ tableName: 'products' }) +@Index({ properties: ['shop', 'isActive'] }) +@Index({ properties: ['category', 'isActive'] }) +@Index({ properties: ['isActive'] }) +export class Product extends BaseEntity { + @ManyToOne(() => Shop) + shop: Shop; + + @ManyToOne(() => Category) + category: Category; + + @OneToMany(() => Review, review => review.product, { cascade: [Cascade.ALL], orphanRemoval: true }) + reviews = new Collection(this); + + @OneToOne(() => Inventory, { + mappedBy: 'product', + nullable: true, + }) + inventory?: Inventory; + + @OneToMany(() => Favorite, favorite => favorite.product) + favorites = new Collection(this); + + @Property({ nullable: true }) + title?: string; + + @Property({ type: 'text', nullable: true }) + desc?: string; + + @Property({ type: 'json', nullable: true }) + content?: string[]; + + @Property({ type: 'decimal', precision: 10, scale: 2, nullable: true }) + price?: number; + + @Property({ type: 'int', nullable: true }) + order?: number; + + @Property({ type: 'boolean', default: true }) + isActive: boolean = true; + + @Property({ type: 'json', nullable: true }) + images?: string[]; + + @Property({ type: 'float', default: null }) + score?: number | null = null; + + @Property({ type: 'float', default: 0 }) + discount: number = 0; + + @Property({ type: 'boolean', default: false }) + isSpecialOffer: boolean = false; +} diff --git a/src/modules/foods/interface/food.interface.ts b/src/modules/products/interface/product.interface.ts similarity index 100% rename from src/modules/foods/interface/food.interface.ts rename to src/modules/products/interface/product.interface.ts diff --git a/src/modules/products/product.module.ts b/src/modules/products/product.module.ts new file mode 100644 index 0000000..4d36dfd --- /dev/null +++ b/src/modules/products/product.module.ts @@ -0,0 +1,30 @@ +import { Module } from '@nestjs/common'; +import { ProductService } from './providers/product.service'; +import { ProductStockCrone } from './crone/product.crone'; +import { ProductController } from './controllers/product.controller'; +import { CategoryController } from './controllers/category.controller'; +import { CategoryService } from './providers/category.service'; +import { ProductRepository } from './repositories/product.repository'; +import { CategoryRepository } from './repositories/category.repository'; +import { MikroOrmModule } from '@mikro-orm/nestjs'; +import { Category } from './entities/category.entity'; +import { Product } from './entities/product.entity'; +import { ShopsModule } from '../shops/shops.module'; +import { AuthModule } from '../auth/auth.module'; +import { JwtModule } from '@nestjs/jwt'; +import { UtilsModule } from '../utils/utils.module'; +import { Favorite } from './entities/favorite.entity'; + +@Module({ + imports: [ + MikroOrmModule.forFeature([Product, Category, Favorite]), + ShopsModule, + AuthModule, + JwtModule, + UtilsModule, + ], + controllers: [ProductController, CategoryController], + providers: [ProductService, CategoryService, ProductRepository, CategoryRepository, ProductStockCrone], + exports: [ProductRepository, CategoryRepository], +}) +export class ProductModule {} diff --git a/src/modules/foods/providers/category.service.ts b/src/modules/products/providers/category.service.ts similarity index 72% rename from src/modules/foods/providers/category.service.ts rename to src/modules/products/providers/category.service.ts index 2443825..5475241 100644 --- a/src/modules/foods/providers/category.service.ts +++ b/src/modules/products/providers/category.service.ts @@ -6,7 +6,7 @@ import { EntityManager } from '@mikro-orm/postgresql'; import { RequiredEntityData } from '@mikro-orm/core'; import { Category } from '../entities/category.entity'; import { CategoryMessage, RestMessage } from 'src/common/enums/message.enum'; -import { Restaurant } from 'src/modules/restaurants/entities/restaurant.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; @Injectable() export class CategoryService { @@ -16,14 +16,14 @@ export class CategoryService { ) { } async create(restId: string, dto: CreateCategoryDto): Promise { - const restaurant = await this.em.findOne(Restaurant, { id: restId }); - if (!restaurant) { + const shop = await this.em.findOne(Shop, { id: restId }); + if (!shop) { throw new NotFoundException(RestMessage.NOT_FOUND); } const data: RequiredEntityData = { title: dto.title, isActive: dto.isActive ?? true, - restaurant: restaurant, + shop: shop, avatarUrl: dto.avatarUrl, }; @@ -33,39 +33,39 @@ export class CategoryService { } async findAllByRestaurant(slug: string): Promise { - const restaurant = await this.em.findOne(Restaurant, { slug }); - if (!restaurant || !restaurant.id) { + const shop = await this.em.findOne(Shop, { slug }); + if (!shop || !shop.id) { throw new NotFoundException(RestMessage.NOT_FOUND); } return this.categoryRepository.find( - { restaurant: restaurant, isActive: true }, { orderBy: { order: 'ASC' } }); + { shop: shop, isActive: true }, { orderBy: { order: 'ASC' } }); } async findAllByRestaurantId(restId: string): Promise { return this.categoryRepository.find( - { restaurant: { id: restId } }, + { shop: { id: restId } }, { orderBy: { order: 'asc' } }); } async findOne(restId: string, id: string): Promise { - const cat = await this.categoryRepository.findOne({ id, restaurant: { id: restId } }, { populate: ['foods'] }); + const cat = await this.categoryRepository.findOne({ id, shop: { id: restId } }, { populate: ['products'] }); if (!cat) throw new NotFoundException(CategoryMessage.NOT_FOUND); return { id: cat.id, title: cat.title, isActive: cat.isActive, - restaurant: cat.restaurant, + shop: cat.shop, avatarUrl: cat.avatarUrl, createdAt: cat.createdAt, updatedAt: cat.updatedAt, - foods: cat.foods.getItems().map(f => ({ id: f.id, title: f.title })), + products: cat.products.getItems().map(f => ({ id: f.id, title: f.title })), } as unknown as Category; } async update(restId: string, id: string, dto: UpdateCategoryDto): Promise { - const cat = await this.categoryRepository.findOne({ id, restaurant: { id: restId } }); + const cat = await this.categoryRepository.findOne({ id, shop: { id: restId } }); if (!cat) throw new NotFoundException(CategoryMessage.NOT_FOUND); this.em.assign(cat, dto); await this.em.persistAndFlush(cat); @@ -73,7 +73,7 @@ export class CategoryService { } async remove(restId: string, id: string): Promise { - const cat = await this.categoryRepository.findOne({ id, restaurant: { id: restId } }); + const cat = await this.categoryRepository.findOne({ id, shop: { id: restId } }); if (!cat) throw new NotFoundException(CategoryMessage.NOT_FOUND); cat.deletedAt = new Date(); await this.em.persistAndFlush(cat); diff --git a/src/modules/foods/providers/food.service.ts b/src/modules/products/providers/product.service.ts similarity index 56% rename from src/modules/foods/providers/food.service.ts rename to src/modules/products/providers/product.service.ts index b1bda09..03acf8d 100644 --- a/src/modules/foods/providers/food.service.ts +++ b/src/modules/products/providers/product.service.ts @@ -1,14 +1,14 @@ import { Injectable, NotFoundException } from '@nestjs/common'; -import { CreateFoodDto } from '../dto/create-food.dto'; -import { FindFoodsDto } from '../dto/find-foods.dto'; -import { FoodRepository } from '../repositories/food.repository'; +import { CreateFoodDto } from '../dto/create-product.dto'; +import { FindFoodsDto } from ../../..products.dto'; +import { FoodRepository } from '../repositories/product.repository'; import { CategoryRepository } from '../repositories/category.repository'; import { EntityManager } from '@mikro-orm/postgresql'; import { RequiredEntityData, FilterQuery } from '@mikro-orm/core'; -import { Food } from '../entities/food.entity'; +import { Product } from '../entities/product.entity'; import { CategoryMessage, FoodMessage, RestMessage } from 'src/common/enums/message.enum'; -import { RestRepository } from 'src/modules/restaurants/repositories/rest.repository'; -import { CacheService } from '../../utils/cache.service'; +import { RestRepository } from ../../..shops/repositories/rest.repository'; +import { CacheService } from '../../../utils/cache.service'; import { Favorite } from '../entities/favorite.entity'; import { Inventory } from 'src/modules/inventory/entities/inventory.entity'; @@ -23,18 +23,18 @@ export class FoodService { async create(restId: string, createFoodDto: CreateFoodDto) { const { categoryId, dailyStock = 0, ...rest } = createFoodDto; - const restaurant = await this.restRepository.findOne({ id: restId }); - if (!restaurant) { + const shop = await this.restRepository.findOne({ id: restId }); + if (!shop) { throw new NotFoundException(RestMessage.NOT_FOUND); } - const category = await this.categoryRepository.findOne({ id: categoryId, restaurant: { id: restId } }); + const category = await this.categoryRepository.findOne({ id: categoryId, shop: { id: restId } }); if (!category) { throw new NotFoundException(CategoryMessage.NOT_FOUND); } - const { food, inventory } = await this.em.transactional(async em => { + const { product, inventory } = await this.em.transactional(async em => { // prepare data with defaults for required fields so repository.create typing is satisfied - const data: RequiredEntityData = { + const data: RequiredEntityData = { desc: rest.desc, isActive: rest.isActive ?? true, discount: rest.discount ?? 0, @@ -46,28 +46,28 @@ export class FoodService { // numeric/array fields price: rest.price ?? 0, images: rest.images ?? undefined, - restaurant: restaurant, + shop: shop, category: category, }; - const food = em.create(Food, data); + const product = em.create(Product, data); const newInventoryRecord = em.create(Inventory, { - food: food, + product: product, availableStock: dailyStock, totalStock: dailyStock, }); await em.flush(); - return { food, inventory: newInventoryRecord }; + return { product, inventory: newInventoryRecord }; }); // Re-load created entities with the primary EM to ensure they're attached - const savedFood = food?.id - ? await this.foodRepository.findOne({ id: food.id }, { populate: ['category', 'restaurant'] }) + const savedFood = product?.id + ? await this.foodRepository.findOne({ id: product.id }, { populate: ['category', 'shop'] }) : null; const savedInventory = inventory?.id ? await this.em.findOne(Inventory, { id: inventory.id }) : inventory; - return { food: savedFood ?? food, inventory: savedInventory ?? inventory }; + return { product: savedFood ?? product, inventory: savedInventory ?? inventory }; } findAll(restId: string, dto: FindFoodsDto) { @@ -75,46 +75,46 @@ export class FoodService { } /** - * Public food detail (only active foods are visible). + * Public product detail (only active products are visible). */ async findPublicById(foodId: string, userId?: string): Promise { - const food = await this.foodRepository.findOne({ id: foodId, isActive: true }, { populate: ['category', 'inventory'] }); - if (!food) throw new NotFoundException(FoodMessage.NOT_FOUND); + const product = await this.foodRepository.findOne({ id: foodId, isActive: true }, { populate: ['category', 'inventory'] }); + if (!product) throw new NotFoundException(FoodMessage.NOT_FOUND); let isFavorite = false; if (userId) { - isFavorite = (await this.em.count(Favorite, { user: { id: userId }, food: { id: foodId } })) > 0; + isFavorite = (await this.em.count(Favorite, { user: { id: userId }, product: { id: foodId } })) > 0; } return { - ...food, + ...product, isFavorite, }; } /** - * Admin food detail (scoped to the authenticated restaurant). + * Admin product detail (scoped to the authenticated shop). */ - async findAdminById(restId: string, id: string): Promise { - const food = await this.foodRepository.findOne({ id, restaurant: { id: restId } }, { populate: ['category', 'inventory'] }); + async findAdminById(restId: string, id: string): Promise { + const product = await this.foodRepository.findOne({ id, shop: { id: restId } }, { populate: ['category', 'inventory'] }); - if (!food) throw new NotFoundException(FoodMessage.NOT_FOUND); - return food; + if (!product) throw new NotFoundException(FoodMessage.NOT_FOUND); + return product; } /** - * Find active foods for a restaurant. - * @param slug - Restaurant slug identifier - * @returns Array of active foods + * Find active products for a shop. + * @param slug - Shop slug identifier + * @returns Array of active products */ - async findByWeekDateAndMealType(slug: string): Promise { - const restaurant = await this.restRepository.findOne({ slug }); - if (!restaurant) { + async findByWeekDateAndMealType(slug: string): Promise { + const shop = await this.restRepository.findOne({ slug }); + if (!shop) { throw new NotFoundException(RestMessage.NOT_FOUND); } - const queryFilter: FilterQuery = { - restaurant: { slug }, + const queryFilter: FilterQuery = { + shop: { slug }, isActive: true, - } as unknown as FilterQuery; + } as unknown as FilterQuery; return this.foodRepository.find(queryFilter, { populate: ['category'], @@ -122,38 +122,38 @@ export class FoodService { }); } - async update(restId: string, id: string, dto: Partial): Promise { + async update(restId: string, id: string, dto: Partial): Promise { const { categoryId, dailyStock, ...rest } = dto; - const food = await this.foodRepository.findOne({ id, restaurant: { id: restId } }, { populate: ['restaurant'] }); - if (!food) { + const product = await this.foodRepository.findOne({ id, shop: { id: restId } }, { populate: ['shop'] }); + if (!product) { throw new NotFoundException(FoodMessage.NOT_FOUND); } // attach new categories if provided (adds, does not attempt to preserve/remove existing ones) if (categoryId) { - const category = await this.categoryRepository.findOne({ id: categoryId, restaurant: { id: restId } }); + const category = await this.categoryRepository.findOne({ id: categoryId, shop: { id: restId } }); if (!category) { throw new NotFoundException(CategoryMessage.NOT_FOUND); } - this.em.assign(food, { category: category }); + this.em.assign(product, { category: category }); } // assign other fields from DTO (excluding dailyStock handled below) - this.em.assign(food, rest); + this.em.assign(product, rest); - // Persist food and update/create related inventory atomically + // Persist product and update/create related inventory atomically await this.em.transactional(async em => { - await em.persistAndFlush(food); + await em.persistAndFlush(product); if (typeof dailyStock !== 'undefined') { - const inventoryRecord = await em.findOne(Inventory, { food: food }); + const inventoryRecord = await em.findOne(Inventory, { product: product }); if (inventoryRecord) { inventoryRecord.totalStock = dailyStock; } else { em.create(Inventory, { - food: food, + product: product, availableStock: dailyStock, totalStock: dailyStock, }); @@ -163,49 +163,49 @@ export class FoodService { await em.flush(); }); - // Re-load the food to ensure populated relations and stable instance - const savedFood = await this.foodRepository.findOne({ id: food.id }, { populate: ['category', 'restaurant'] }); + // Re-load the product to ensure populated relations and stable instance + const savedFood = await this.foodRepository.findOne({ id: product.id }, { populate: ['category', 'shop'] }); - // Invalidate cache for the restaurant if present (optional) - // await this.invalidateRestaurantFoodsCache(savedFood?.restaurant?.slug); + // Invalidate cache for the shop if present (optional) + // await this.invalidateRestaurantFoodsCache(savedFood?.shop?.slug); - return savedFood ?? food; + return savedFood ?? product; } async remove(restId: string, id: string): Promise { - const food = await this.foodRepository.findOne({ id, restaurant: { id: restId } }, { populate: ['restaurant'] }); - if (!food) { + const product = await this.foodRepository.findOne({ id, shop: { id: restId } }, { populate: ['shop'] }); + if (!product) { throw new NotFoundException(FoodMessage.NOT_FOUND); } - // const restaurantSlug = food.restaurant.slug; - food.deletedAt = new Date(); - await this.em.persistAndFlush(food); + // const restaurantSlug = product.shop.slug; + product.deletedAt = new Date(); + await this.em.persistAndFlush(product); - // Invalidate cache for the restaurant + // Invalidate cache for the shop // await this.invalidateRestaurantFoodsCache(restaurantSlug); } async toggleFavorite(userId: string, foodId: string) { - const favorite = await this.em.findOne(Favorite, { user: userId, food: foodId }); + const favorite = await this.em.findOne(Favorite, { user: userId, product: foodId }); if (favorite) { return this.em.removeAndFlush(favorite); } const newFavorite = this.em.create(Favorite, { user: userId, - food: foodId, + product: foodId, }); return this.em.persistAndFlush(newFavorite); } async getMyFavorites(userId: string, restId: string) { - return this.em.find(Favorite, { user: userId, food: { restaurant: { id: restId } } }, { populate: ['food'] }); + return this.em.find(Favorite, { user: userId, product: { shop: { id: restId } } }, { populate: ['product'] }); } /** - * Invalidate cache for restaurant foods + * Invalidate cache for shop products */ // private async invalidateRestaurantFoodsCache(slug: string): Promise { // const cacheKey = `${this.FOODS_BY_RESTAURANT_CACHE_KEY_PREFIX}${slug}`; diff --git a/src/modules/foods/repositories/category.repository.ts b/src/modules/products/repositories/category.repository.ts similarity index 100% rename from src/modules/foods/repositories/category.repository.ts rename to src/modules/products/repositories/category.repository.ts diff --git a/src/modules/foods/repositories/food.repository.ts b/src/modules/products/repositories/product.repository.ts similarity index 77% rename from src/modules/foods/repositories/food.repository.ts rename to src/modules/products/repositories/product.repository.ts index 3957061..e686027 100644 --- a/src/modules/foods/repositories/food.repository.ts +++ b/src/modules/products/repositories/product.repository.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { EntityManager, EntityRepository } from '@mikro-orm/postgresql'; import { FilterQuery } from '@mikro-orm/core'; -import { Food } from '../entities/food.entity'; +import { Product } from '../entities/product.entity'; import { PaginatedResult } from 'src/common/interfaces/pagination.interface'; type FindFoodsOpts = { @@ -15,20 +15,20 @@ type FindFoodsOpts = { }; @Injectable() -export class FoodRepository extends EntityRepository { +export class FoodRepository extends EntityRepository { constructor(readonly em: EntityManager) { - super(em, Food); + super(em, Product); } /** - * Find foods with pagination and optional filters. + * Find products with pagination and optional filters. * Supports: search (title/content), categoryId, isActive, ordering. */ - async findAllPaginated(restId: string, opts: FindFoodsOpts = {}): Promise> { + async findAllPaginated(restId: string, opts: FindFoodsOpts = {}): Promise> { const { page = 1, limit = 10, search, orderBy = 'order', order = 'asc', categoryId, isActive } = opts; const offset = (page - 1) * limit; - const where: FilterQuery = { restaurant: { id: restId } }; + const where: FilterQuery = { shop: { id: restId } }; if (typeof isActive === 'boolean') { where.isActive = isActive; @@ -40,8 +40,8 @@ export class FoodRepository extends EntityRepository { } if (categoryId) { - // filter by related category (Food has a single `category` relation) - Object.assign(where, { category: { id: categoryId } } as unknown as FilterQuery); + // filter by related category (Product has a single `category` relation) + Object.assign(where, { category: { id: categoryId } } as unknown as FilterQuery); } const [data, total] = await this.findAndCount(where, { diff --git a/src/modules/restaurants/entities/restaurant.entity.ts b/src/modules/restaurants/entities/restaurant.entity.ts index fa472be..a6b4c1a 100644 --- a/src/modules/restaurants/entities/restaurant.entity.ts +++ b/src/modules/restaurants/entities/restaurant.entity.ts @@ -3,10 +3,10 @@ import { BaseEntity } from '../../../common/entities/base.entity'; import { Delivery } from '../../delivery/entities/delivery.entity'; import { PlanEnum } from '../interface/plan.interface'; -@Entity({ tableName: 'restaurants' }) +@Entity({ tableName: 'shops' }) @Index({ properties: ['isActive'] }) @Index({ properties: ['slug', 'isActive'] }) -export class Restaurant extends BaseEntity { +export class Shop extends BaseEntity { // --- اطلاعات پایه --- @Property() name!: string; @@ -81,7 +81,7 @@ export class Restaurant extends BaseEntity { domain!: string; // --- روش‌های ارسال --- - @OneToMany(() => Delivery, delivery => delivery.restaurant) + @OneToMany(() => Delivery, delivery => delivery.shop) deliveries = new Collection(this); @Property({ type: 'json', nullable: true }) diff --git a/src/modules/restaurants/restaurants.module.ts b/src/modules/restaurants/restaurants.module.ts index 62a5bd4..347def3 100644 --- a/src/modules/restaurants/restaurants.module.ts +++ b/src/modules/restaurants/restaurants.module.ts @@ -1,21 +1,21 @@ import { Module, forwardRef } from '@nestjs/common'; -import { RestaurantsService } from './providers/restaurants.service'; -import { RestaurantsController } from './controllers/restaurants.controller'; +import { ShopsService } from './providers/shops.service'; +import { ShopsController } from './controllers/shops.controller'; import { MikroOrmModule } from '@mikro-orm/nestjs'; -import { Restaurant } from './entities/restaurant.entity'; +import { Shop } from './entities/shop.entity'; import { RestRepository } from './repositories/rest.repository'; import { ScheduleRepository } from './repositories/schedule.repository'; import { Schedule } from './entities/schedule.entity'; import { ScheduleService } from './providers/schedule.service'; import { ScheduleController } from './controllers/schedule.controller'; -import { RestaurantCrone } from './crone/restaurant.crone'; +import { ShopCrone } from './crone/shop.crone'; import { JwtModule } from '@nestjs/jwt'; import { AuthModule } from '../auth/auth.module'; @Module({ - controllers: [RestaurantsController, ScheduleController], - providers: [RestaurantsService, RestRepository, ScheduleRepository, ScheduleService, RestaurantCrone], - imports: [MikroOrmModule.forFeature([Restaurant, Schedule]), JwtModule, forwardRef(() => AuthModule)], + controllers: [ShopsController, ScheduleController], + providers: [ShopsService, RestRepository, ScheduleRepository, ScheduleService, ShopCrone], + imports: [MikroOrmModule.forFeature([Shop, Schedule]), JwtModule, forwardRef(() => AuthModule)], exports: [RestRepository, ScheduleRepository, ScheduleService], }) -export class RestaurantsModule {} +export class ShopsModule {} diff --git a/src/modules/review/controllers/review.controller.ts b/src/modules/review/controllers/review.controller.ts index 36ad8fc..40c2e0f 100644 --- a/src/modules/review/controllers/review.controller.ts +++ b/src/modules/review/controllers/review.controller.ts @@ -41,7 +41,7 @@ export class ReviewController { } @Get('public/reviews/:foodId') - @ApiOperation({ summary: 'Get all reviews of food by id(public - only approved)' }) + @ApiOperation({ summary: 'Get all reviews of product by id(public - only approved)' }) @ApiHeader(API_HEADER_SLUG) @ApiOkResponse({ description: 'List of approved reviews' }) @ApiParam({ name: 'foodId', required: true, type: String }) diff --git a/src/modules/review/dto/create-review.dto.ts b/src/modules/review/dto/create-review.dto.ts index 0304d0b..caa57c5 100644 --- a/src/modules/review/dto/create-review.dto.ts +++ b/src/modules/review/dto/create-review.dto.ts @@ -6,7 +6,7 @@ import { PositivePoint, NegativePoint } from '../enums/review-point.enum'; export class CreateReviewDto { @IsNotEmpty() @IsString() - @ApiProperty({ description: 'Food ID' }) + @ApiProperty({ description: 'Product ID' }) foodId: string; @IsNotEmpty() @@ -24,14 +24,14 @@ export class CreateReviewDto { @IsOptional() @IsString() - @ApiPropertyOptional({ description: 'Comment text', example: 'Very delicious food!' }) + @ApiPropertyOptional({ description: 'Comment text', example: 'Very delicious product!' }) comment?: string; @IsOptional() @IsArray() @IsEnum(PositivePoint, { each: true }) @ApiPropertyOptional({ - description: 'Positive points about the food', + description: 'Positive points about the product', example: [PositivePoint.GREAT_TASTE, PositivePoint.FAST_DELIVERY], enum: PositivePoint, isArray: true, @@ -42,7 +42,7 @@ export class CreateReviewDto { @IsArray() @IsEnum(NegativePoint, { each: true }) @ApiPropertyOptional({ - description: 'Negative points about the food', + description: 'Negative points about the product', example: [NegativePoint.SMALL_PORTION], enum: NegativePoint, isArray: true, diff --git a/src/modules/review/dto/find-reviews.dto.ts b/src/modules/review/dto/find-reviews.dto.ts index b4a0377..101f6cb 100644 --- a/src/modules/review/dto/find-reviews.dto.ts +++ b/src/modules/review/dto/find-reviews.dto.ts @@ -18,12 +18,12 @@ export class FindReviewsDto { @IsOptional() @IsString() - @ApiPropertyOptional({ description: 'Food ID to filter comments' }) + @ApiPropertyOptional({ description: 'Product ID to filter comments' }) foodId?: string; @IsOptional() @IsString() - @ApiPropertyOptional({ description: 'Restaurant ID to filter comments' }) + @ApiPropertyOptional({ description: 'Shop ID to filter comments' }) restId?: string; @IsOptional() @@ -50,6 +50,6 @@ export class FindReviewsDto { export class FindRestuarantReviewsDto extends FindReviewsDto { @IsOptional() @IsString() - @ApiPropertyOptional({ description: 'Restaurant slug to filter comments' }) + @ApiPropertyOptional({ description: 'Shop slug to filter comments' }) restuarantSlug?: string; } diff --git a/src/modules/review/dto/update-review.dto.ts b/src/modules/review/dto/update-review.dto.ts index a377045..a0a4558 100644 --- a/src/modules/review/dto/update-review.dto.ts +++ b/src/modules/review/dto/update-review.dto.ts @@ -22,7 +22,7 @@ export class UpdateReviewDto { @IsArray() @IsEnum(PositivePoint, { each: true }) @ApiPropertyOptional({ - description: 'Positive points about the food', + description: 'Positive points about the product', enum: PositivePoint, isArray: true, }) @@ -32,7 +32,7 @@ export class UpdateReviewDto { @IsArray() @IsEnum(NegativePoint, { each: true }) @ApiPropertyOptional({ - description: 'Negative points about the food', + description: 'Negative points about the product', enum: NegativePoint, isArray: true, }) diff --git a/src/modules/review/entities/review.entity.ts b/src/modules/review/entities/review.entity.ts index aec0853..4448d98 100644 --- a/src/modules/review/entities/review.entity.ts +++ b/src/modules/review/entities/review.entity.ts @@ -1,22 +1,22 @@ import { Entity, Index, ManyToOne, Property, Unique, Enum } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; -import { Food } from '../../foods/entities/food.entity'; -import { User } from '../../users/entities/user.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; +import { Product } from '../../../products/entities/product.entity'; +import { User } from '../../../users/entities/user.entity'; import { Order } from 'src/modules/orders/entities/order.entity'; import { PositivePoint, NegativePoint } from '../enums/review-point.enum'; import { ReviewStatus } from '../enums/review-status.enum'; @Entity({ tableName: 'reviews' }) -@Unique({ properties: ['order', 'food', 'user'] }) -@Index({ properties: ['food', 'status'] }) +@Unique({ properties: ['order', 'product', 'user'] }) +@Index({ properties: ['product', 'status'] }) @Index({ properties: ['user'] }) @Index({ properties: ['order'] }) export class Review extends BaseEntity { @ManyToOne(() => Order) order: Order; - @ManyToOne(() => Food) - food: Food; + @ManyToOne(() => Product) + product: Product; @ManyToOne(() => User) user: User; diff --git a/src/modules/review/listeners/review.listeners.ts b/src/modules/review/listeners/review.listeners.ts index 69c6a40..a0d36a4 100644 --- a/src/modules/review/listeners/review.listeners.ts +++ b/src/modules/review/listeners/review.listeners.ts @@ -24,17 +24,17 @@ export class ReviewListeners { async handleReviewCreated(event: ReviewCreatedEvent) { try { this.logger.log( - `Review created event received: ${event.reviewId} for restaurant: ${event.restaurantId}, food: ${event.foodName}, rating: ${event.rating}`, + `Review created event received: ${event.reviewId} for shop: ${event.restaurantId}, product: ${event.foodName}, rating: ${event.rating}`, ); - // Get admins of restaurant that have review management permissions + // Get admins of shop that have review management permissions const admins = await this.adminService.findAdminsWithPermission(event.restaurantId, Permission.MANAGE_REVIEWS); const recipients = admins.map(admin => ({ adminId: admin.id, })); if (recipients.length === 0) { - this.logger.warn(`No admins found with MANAGE_REVIEWS permission for restaurant ${event.restaurantId}`); + this.logger.warn(`No admins found with MANAGE_REVIEWS permission for shop ${event.restaurantId}`); return; } diff --git a/src/modules/review/providers/food-rating-cron.service.ts b/src/modules/review/providers/product-rating-cron.service.ts similarity index 59% rename from src/modules/review/providers/food-rating-cron.service.ts rename to src/modules/review/providers/product-rating-cron.service.ts index 2053326..145262c 100644 --- a/src/modules/review/providers/food-rating-cron.service.ts +++ b/src/modules/review/providers/product-rating-cron.service.ts @@ -1,7 +1,7 @@ import { Injectable, Logger } from '@nestjs/common'; import { Cron } from '@nestjs/schedule'; import { EntityManager } from '@mikro-orm/postgresql'; -import { FoodRepository } from '../../foods/repositories/food.repository'; +import { FoodRepository } from ../../..products/repositories/product.repository'; import { ReviewRepository } from '../repositories/review.repository'; import { ReviewStatus } from '../enums/review-status.enum'; @@ -17,31 +17,31 @@ export class FoodRatingCronService { /** * Cron job that runs at midnight every day (00:00:00 UTC) - * Calculates and updates the average rating for each restaurant food + * Calculates and updates the average rating for each shop product */ @Cron('0 0 * * *', { name: 'calculateFoodRatings', timeZone: 'UTC', }) async handleCron() { - this.logger.log('Starting daily food rating calculation cron job...'); + this.logger.log('Starting daily product rating calculation cron job...'); try { - // Get all foods from all restaurants - const foods = await this.foodRepository.find({}); + // Get all products from ../../..shops + const products = await this.foodRepository.find({}); - this.logger.log(`Found ${foods.length} foods to process`); + this.logger.log(`Found ${products.length} products to process`); let updatedCount = 0; let errorCount = 0; - // Process each food item - for (const food of foods) { + // Process each product item + for (const product of products) { try { - // Get all approved reviews for this food that are not deleted + // Get all approved reviews for this product that are not deleted const reviews = await this.reviewRepository.find( { - food: { id: food.id }, + product: { id: product.id }, status: ReviewStatus.APPROVED, deletedAt: null, }, @@ -55,13 +55,13 @@ export class FoodRatingCronService { averageRating = sum / reviews.length; } - // Update food score - food.score = parseFloat(averageRating.toFixed(2)); - this.em.persist(food); + // Update product score + product.score = parseFloat(averageRating.toFixed(2)); + this.em.persist(product); updatedCount++; } catch (error) { - this.logger.error(`Error processing food ${food.id}: ${error.message}`, error.stack); + this.logger.error(`Error processing product ${product.id}: ${error.message}`, error.stack); errorCount++; } } @@ -69,9 +69,9 @@ export class FoodRatingCronService { // Flush all updates at once for better performance await this.em.flush(); - this.logger.log(`Food rating calculation completed. Updated: ${updatedCount}, Errors: ${errorCount}`); + this.logger.log(`Product rating calculation completed. Updated: ${updatedCount}, Errors: ${errorCount}`); } catch (error) { - this.logger.error(`Error in food rating cron job: ${error.message}`, error.stack); + this.logger.error(`Error in product rating cron job: ${error.message}`, error.stack); } } } diff --git a/src/modules/review/providers/review.service.ts b/src/modules/review/providers/review.service.ts index f498176..9b7d4e8 100644 --- a/src/modules/review/providers/review.service.ts +++ b/src/modules/review/providers/review.service.ts @@ -3,19 +3,19 @@ import { CreateReviewDto } from '../dto/create-review.dto'; import { UpdateReviewDto } from '../dto/update-review.dto'; import { FindRestuarantReviewsDto, FindReviewsDto } from '../dto/find-reviews.dto'; import { ReviewRepository } from '../repositories/review.repository'; -import { FoodRepository } from '../../foods/repositories/food.repository'; -import { UserRepository } from '../../users/repositories/user.repository'; +import { FoodRepository } from ../../..products/repositories/product.repository'; +import { UserRepository } from '../../../users/repositories/user.repository'; import { EntityManager } from '@mikro-orm/postgresql'; import { RequiredEntityData } from '@mikro-orm/core'; import { Review } from '../entities/review.entity'; import { FoodMessage, UserMessage, ReviewMessage } from 'src/common/enums/message.enum'; -import { Order } from '../../orders/entities/order.entity'; -import { OrderItem } from '../../orders/entities/order-item.entity'; -import { Restaurant } from 'src/modules/restaurants/entities/restaurant.entity'; +import { Order } from '../../../orders/entities/order.entity'; +import { OrderItem } from '../../../orders/entities/order-item.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; import { ReviewStatus } from '../enums/review-status.enum'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { ReviewCreatedEvent } from '../events/review.events'; -import { sanitizeText } from '../../utils/sanitize.util'; +import { sanitizeText } from '../../../utils/sanitize.util'; @Injectable() export class ReviewService { @@ -30,8 +30,8 @@ export class ReviewService { async create(userId: string, createReviewDto: CreateReviewDto): Promise { const { foodId, orderId, rating, comment, positivePoints, negativePoints } = createReviewDto; - const food = await this.foodRepository.findOne({ id: foodId }); - if (!food) { + const product = await this.foodRepository.findOne({ id: foodId }); + if (!product) { throw new NotFoundException(FoodMessage.NOT_FOUND); } @@ -40,25 +40,25 @@ export class ReviewService { throw new NotFoundException(UserMessage.USER_NOT_FOUND); } - // Find order and verify it belongs to the user, populate restaurant to get restaurantId - const order = await this.em.findOne(Order, { id: orderId, user: { id: userId } }, { populate: ['restaurant'] }); + // Find order and verify it belongs to the user, populate shop to get restaurantId + const order = await this.em.findOne(Order, { id: orderId, user: { id: userId } }, { populate: ['shop'] }); if (!order) { throw new NotFoundException('Order not found or does not belong to the current user'); } - // Verify the food is in the order + // Verify the product is in the order const orderItem = await this.em.findOne(OrderItem, { order: { id: orderId }, - food: { id: foodId }, + product: { id: foodId }, }); if (!orderItem) { - throw new BadRequestException('Food is not in the specified order'); + throw new BadRequestException('Product is not in the specified order'); } - // Check if user already commented on this food for this order + // Check if user already commented on this product for this order const existingReview = await this.reviewRepository.findOne({ order: { id: orderId }, - food: { id: foodId }, + product: { id: foodId }, user: { id: userId }, }); @@ -68,7 +68,7 @@ export class ReviewService { const data: RequiredEntityData = { order, - food, + product, user, rating, comment: sanitizeText(comment) || undefined, @@ -84,7 +84,7 @@ export class ReviewService { await this.em.persistAndFlush(review); - // Update food rating average + // Update product rating average await this.updateFoodRating(foodId); // Emit ReviewCreatedEvent @@ -92,10 +92,10 @@ export class ReviewService { ReviewCreatedEvent.name, new ReviewCreatedEvent( review.id, - order.restaurant.id, + order.shop.id, userId, foodId, - food.title || 'Unknown Food', + product.title || 'Unknown Product', orderId, order.orderNumber || '', rating, @@ -111,17 +111,17 @@ export class ReviewService { async findRestuarantAllReviews(dto: FindRestuarantReviewsDto) { const { restuarantSlug, ...restDto } = dto; - const restaurant = await this.em.findOne(Restaurant, { slug: restuarantSlug }); - if (!restaurant) { + const shop = await this.em.findOne(Shop, { slug: restuarantSlug }); + if (!shop) { throw new NotFoundException('RestaurantMessage.NOT_FOUND'); } - return this.reviewRepository.findAllPaginated({ ...restDto, restId: restaurant.id }); + return this.reviewRepository.findAllPaginated({ ...restDto, restId: shop.id }); } async findById(id: string, restaurantId: string): Promise { const review = await this.reviewRepository.findOne( - { id, order: { restaurant: { id: restaurantId } } }, - { populate: ['food', 'user', 'order'] }, + { id, order: { shop: { id: restaurantId } } }, + { populate: ['product', 'user', 'order'] }, ); if (!review) { throw new NotFoundException(ReviewMessage.NOT_FOUND); @@ -130,7 +130,7 @@ export class ReviewService { } async update(id: string, userId: string, dto: UpdateReviewDto, isAdmin: boolean = false): Promise { - const review = await this.reviewRepository.findOne({ id }, { populate: ['food', 'user', 'order'] }); + const review = await this.reviewRepository.findOne({ id }, { populate: ['product', 'user', 'order'] }); if (!review) { throw new NotFoundException(ReviewMessage.NOT_FOUND); } @@ -156,16 +156,16 @@ export class ReviewService { this.em.assign(review, sanitizedDto); await this.em.persistAndFlush(review); - // Update food rating average if rating changed + // Update product rating average if rating changed if (dto.rating !== undefined && dto.rating !== oldRating) { - await this.updateFoodRating(review.food.id); + await this.updateFoodRating(review.product.id); } return review; } async changeStatus(reviewId: string, status: ReviewStatus, restaurantId: string): Promise { - const review = await this.reviewRepository.findOne({ id: reviewId, order: { restaurant: { id: restaurantId } } }); + const review = await this.reviewRepository.findOne({ id: reviewId, order: { shop: { id: restaurantId } } }); if (!review) { throw new NotFoundException(ReviewMessage.NOT_FOUND); } @@ -175,7 +175,7 @@ export class ReviewService { } async remove(id: string, userId: string, isAdmin: boolean = false) { - const review = await this.reviewRepository.findOne({ id }, { populate: ['food', 'user', 'order'] }); + const review = await this.reviewRepository.findOne({ id }, { populate: ['product', 'user', 'order'] }); if (!review) { throw new NotFoundException(ReviewMessage.NOT_FOUND); } @@ -185,35 +185,35 @@ export class ReviewService { throw new BadRequestException(ReviewMessage.CAN_ONLY_DELETE_OWN); } - const foodId = review.food.id; + const foodId = review.product.id; review.deletedAt = new Date(); await this.em.persistAndFlush(review); - // Update food rating average + // Update product rating average await this.updateFoodRating(foodId); } private async updateFoodRating(foodId: string): Promise { const reviews = await this.reviewRepository.find( - { food: { id: foodId }, status: ReviewStatus.APPROVED, deletedAt: null }, + { product: { id: foodId }, status: ReviewStatus.APPROVED, deletedAt: null }, { fields: ['rating'] }, ); if (reviews.length === 0) { - const food = await this.foodRepository.findOne({ id: foodId }); - if (food) { - food.score = 0; - await this.em.persistAndFlush(food); + const product = await this.foodRepository.findOne({ id: foodId }); + if (product) { + product.score = 0; + await this.em.persistAndFlush(product); } return; } const averageRating = reviews.reduce((sum, review) => sum + review.rating, 0) / reviews.length; - const food = await this.foodRepository.findOne({ id: foodId }); - if (food) { - food.score = parseFloat(averageRating.toFixed(2)); - await this.em.persistAndFlush(food); + const product = await this.foodRepository.findOne({ id: foodId }); + if (product) { + product.score = parseFloat(averageRating.toFixed(2)); + await this.em.persistAndFlush(product); } } } diff --git a/src/modules/review/repositories/review.repository.ts b/src/modules/review/repositories/review.repository.ts index 5114e1e..bf63c0d 100644 --- a/src/modules/review/repositories/review.repository.ts +++ b/src/modules/review/repositories/review.repository.ts @@ -34,11 +34,11 @@ export class ReviewRepository extends EntityRepository { const where: FilterQuery = {}; if (foodId) { - where.food = { id: foodId }; + where.product = { id: foodId }; } if (restId) { - where.food = { restaurant: { id: restId } }; + where.product = { shop: { id: restId } }; } if (userId) { @@ -53,7 +53,7 @@ export class ReviewRepository extends EntityRepository { limit, offset, orderBy: { [orderBy]: order.toLowerCase() as 'asc' | 'desc' }, - populate: ['food', 'user'], + populate: ['product', 'user'], }); const totalPages = Math.ceil(total / limit); diff --git a/src/modules/review/review.module.ts b/src/modules/review/review.module.ts index c76b69d..286b7fb 100644 --- a/src/modules/review/review.module.ts +++ b/src/modules/review/review.module.ts @@ -2,10 +2,10 @@ import { Module } from '@nestjs/common'; import { ReviewService } from './providers/review.service'; import { ReviewController } from './controllers/review.controller'; import { ReviewRepository } from './repositories/review.repository'; -import { FoodRatingCronService } from './providers/food-rating-cron.service'; +import { FoodRatingCronService } from './providers/product-rating-cron.service'; import { MikroOrmModule } from '@mikro-orm/nestjs'; import { Review } from './entities/review.entity'; -import { FoodModule } from '../foods/food.module'; +import { FoodModule } from ../../..products/product.module'; import { UserModule } from '../users/user.module'; import { AuthModule } from '../auth/auth.module'; import { JwtModule } from '@nestjs/jwt'; diff --git a/src/modules/roles/controllers/roles.controller.ts b/src/modules/roles/controllers/roles.controller.ts index f727fc0..5618ca5 100644 --- a/src/modules/roles/controllers/roles.controller.ts +++ b/src/modules/roles/controllers/roles.controller.ts @@ -25,7 +25,7 @@ export class RolesController { @UseGuards(AdminAuthGuard) @Permissions(Permission.MANAGE_ROLES) @ApiBearerAuth() - @ApiOperation({ summary: 'Get all through restaurant roles with pagination and filters' }) + @ApiOperation({ summary: 'Get all through shop roles with pagination and filters' }) findAll(@RestId() restId: string) { return this.roleService.findAllGeneralAndRestaurantRoles(restId); } diff --git a/src/modules/roles/entities/permission.entity.ts b/src/modules/roles/entities/permission.entity.ts index 2dab209..3286a3d 100755 --- a/src/modules/roles/entities/permission.entity.ts +++ b/src/modules/roles/entities/permission.entity.ts @@ -1,5 +1,5 @@ import { Entity, Property, Unique, ManyToMany, Collection } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; import { Role } from './role.entity'; @Entity({ tableName: 'permissions' }) diff --git a/src/modules/roles/entities/role.entity.ts b/src/modules/roles/entities/role.entity.ts index 620d681..b673c48 100755 --- a/src/modules/roles/entities/role.entity.ts +++ b/src/modules/roles/entities/role.entity.ts @@ -1,12 +1,12 @@ import { Collection, Entity, Index, ManyToMany, OneToMany, ManyToOne, Property } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; import { Permission } from './permission.entity'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; import { RolePermission } from './rolePermission.entity'; import { AdminRole } from 'src/modules/admin/entities/adminRole.entity'; @Entity({ tableName: 'roles' }) -@Index({ properties: ['restaurant'] }) +@Index({ properties: ['shop'] }) export class Role extends BaseEntity { @Property() name!: string; @@ -17,8 +17,8 @@ export class Role extends BaseEntity { @ManyToMany({ entity: () => Permission, pivotEntity: () => RolePermission, inversedBy: p => p.roles }) permissions = new Collection(this); - @ManyToOne(() => Restaurant, { nullable: true }) - restaurant?: Restaurant; + @ManyToOne(() => Shop, { nullable: true }) + shop?: Shop; @OneToMany(() => AdminRole, adminRole => adminRole.role) admins = new Collection(this); diff --git a/src/modules/roles/providers/permissions.service.ts b/src/modules/roles/providers/permissions.service.ts index 8e96fa4..42b54d5 100644 --- a/src/modules/roles/providers/permissions.service.ts +++ b/src/modules/roles/providers/permissions.service.ts @@ -26,7 +26,7 @@ export class PermissionsService { /** * Get admin permissions from cache or database * @param adminId - The admin ID - * @param restId - The restaurant ID + * @param restId - The shop ID * @returns Array of permission names (string[]) */ async getAdminPermissions(adminId: string, restId: string): Promise { @@ -49,7 +49,7 @@ export class PermissionsService { // If not in cache, fetch from database const admin = await this.adminRepository.findOne( - { id: adminId, roles: { restaurant: { id: restId } } }, + { id: adminId, roles: { shop: { id: restId } } }, { populate: ['roles', 'roles.role', 'roles.role.permissions'] }, ); @@ -83,7 +83,7 @@ export class PermissionsService { admin: { id: adminId, }, - restaurant: { + shop: { id: restId, }, }, { populate: ['role', 'role.permissions'] }); @@ -96,7 +96,7 @@ export class PermissionsService { /** * Invalidate admin permissions cache * @param adminId - The admin ID - * @param restId - The restaurant ID + * @param restId - The shop ID */ async invalidateAdminPermissionsCache(adminId: string, restId: string): Promise { const cacheKey = `${this.ADMIN_PERMISSIONS_KEY}:${adminId}:${restId}`; diff --git a/src/modules/roles/providers/roles.service.ts b/src/modules/roles/providers/roles.service.ts index 3182035..5b5e788 100644 --- a/src/modules/roles/providers/roles.service.ts +++ b/src/modules/roles/providers/roles.service.ts @@ -3,7 +3,7 @@ import { InjectRepository } from '@mikro-orm/nestjs'; import { EntityRepository, FilterQuery } from '@mikro-orm/core'; import { Role } from '../entities/role.entity'; import { Permission } from '../entities/permission.entity'; -import { Restaurant } from '../../restaurants/entities/restaurant.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; import { EntityManager } from '@mikro-orm/postgresql'; import { CreateRoleDto } from '../dto/create-role.dto'; import { UpdateRoleDto } from '../dto/update-role.dto'; @@ -23,22 +23,22 @@ export class RolesService { const { name, permissionIds } = dto; // Check if role already exists - const existing = await this.roleRepository.findOne({ name, restaurant: restId ? { id: restId } : null }); + const existing = await this.roleRepository.findOne({ name, shop: restId ? { id: restId } : null }); if (existing) { - throw new BadRequestException('Role with this name already exists for the restaurant'); + throw new BadRequestException('Role with this name already exists for the shop'); } - let restaurant: Restaurant | null = null; + let shop: Shop | null = null; if (restId) { - restaurant = await this.em.findOne(Restaurant, { id: restId }); - if (!restaurant) { - throw new NotFoundException('Restaurant not found'); + shop = await this.em.findOne(Shop, { id: restId }); + if (!shop) { + throw new NotFoundException('Shop not found'); } } const role = this.roleRepository.create({ name, - restaurant, + shop, isSystem: false, }); @@ -56,11 +56,11 @@ export class RolesService { } async findAllGeneralAndRestaurantRoles(restId: string) { - const where: FilterQuery = { $or: [{ restaurant: restId }, { restaurant: null }], isSystem: false }; + const where: FilterQuery = { $or: [{ shop: restId }, { shop: null }], isSystem: false }; const roles = await this.roleRepository.find(where, { orderBy: { createdAt: 'desc' }, - populate: ['permissions', 'restaurant'], + populate: ['permissions', 'shop'], }); return roles; @@ -68,8 +68,8 @@ export class RolesService { async findOne(restId: string, id: string) { const role = await this.roleRepository.findOne( - { id, restaurant: { id: restId } }, - { populate: ['permissions', 'restaurant'] }, + { id, shop: { id: restId } }, + { populate: ['permissions', 'shop'] }, ); if (!role) { throw new NotFoundException('Role not found'); @@ -79,8 +79,8 @@ export class RolesService { async update(restId: string, id: string, dto: UpdateRoleDto) { const role = await this.roleRepository.findOne( - { id, restaurant: { id: restId } }, - { populate: ['permissions', 'restaurant'] }, + { id, shop: { id: restId } }, + { populate: ['permissions', 'shop'] }, ); if (!role) { throw new NotFoundException('Role not found'); @@ -109,7 +109,7 @@ export class RolesService { { isSystem: true }, { orderBy: { createdAt: 'desc' }, - populate: ['permissions', 'restaurant'], + populate: ['permissions', 'shop'], }, ); @@ -118,8 +118,8 @@ export class RolesService { async remove(restId: string, id: string) { const role = await this.roleRepository.findOne( - { id, restaurant: { id: restId } }, - { populate: ['permissions', 'restaurant'] }, + { id, shop: { id: restId } }, + { populate: ['permissions', 'shop'] }, ); if (!role) { throw new NotFoundException('Role not found'); diff --git a/src/modules/restaurants/controllers/schedule.controller.ts b/src/modules/shops/controllers/schedule.controller.ts similarity index 93% rename from src/modules/restaurants/controllers/schedule.controller.ts rename to src/modules/shops/controllers/schedule.controller.ts index 65a7a76..f1a82b5 100644 --- a/src/modules/restaurants/controllers/schedule.controller.ts +++ b/src/modules/shops/controllers/schedule.controller.ts @@ -27,11 +27,11 @@ import { API_HEADER_SLUG } from 'src/common/constants'; export class ScheduleController { constructor(private readonly scheduleService: ScheduleService) { } - @Get('public/schedules/restaurant/:slug') - @ApiOperation({ summary: 'Get schedule of a restaurant by slug' }) + @Get('public/schedules/shop/:slug') + @ApiOperation({ summary: 'Get schedule of a shop by slug' }) @ApiHeader(API_HEADER_SLUG) - @ApiParam({ name: 'slug', description: 'Restaurant Slug' }) - @ApiOkResponse({ description: 'Today schedule of the restaurant', type: Schedule }) + @ApiParam({ name: 'slug', description: 'Shop Slug' }) + @ApiOkResponse({ description: 'Today schedule of the shop', type: Schedule }) async getTodaySchedules(@Param('slug') slug: string): Promise { return this.scheduleService.findScheduleBySlug(slug); } diff --git a/src/modules/restaurants/controllers/restaurants.controller.ts b/src/modules/shops/controllers/shops.controller.ts similarity index 64% rename from src/modules/restaurants/controllers/restaurants.controller.ts rename to src/modules/shops/controllers/shops.controller.ts index 12d9fa6..e042489 100644 --- a/src/modules/restaurants/controllers/restaurants.controller.ts +++ b/src/modules/shops/controllers/shops.controller.ts @@ -1,9 +1,9 @@ import { Controller, Get, Post, Body, Patch, Param, UseGuards, Delete, Query } from '@nestjs/common'; -import { RestaurantsService } from '../providers/restaurants.service'; -import { CreateRestaurantDto } from '../dto/create-restaurant.dto'; -import { UpdateRestaurantDto } from '../dto/update-restaurant.dto'; +import { RestaurantsService } from ../../..shops.service'; +import { CreateRestaurantDto } from '../dto/create-shop.dto'; +import { UpdateRestaurantDto } from '../dto/update-shop.dto'; import { UpgradeSubscriptionDto } from '../dto/upgrade-subscription.dto'; -import { FindRestaurantsDto } from '../dto/find-restaurants.dto'; +import { FindRestaurantsDto } from ../../..shops.dto'; import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard'; import { ApiBearerAuth, @@ -20,16 +20,16 @@ import { SuperAdminAuthGuard } from 'src/modules/auth/guards/superAdminAuth.guar import { Permissions } from 'src/common/decorators/permissions.decorator'; import { Permission } from 'src/common/enums/permission.enum'; -@ApiTags('restaurants') +@ApiTags('shops') @Controller() export class RestaurantsController { constructor(private readonly restaurantsService: RestaurantsService) { } - @Get('public/restaurants/:slug') - @ApiOperation({ summary: 'Get restaurant specification by slug' }) + @Get('public/shops/:slug') + @ApiOperation({ summary: 'Get shop specification by slug' }) @ApiHeader(API_HEADER_SLUG) - @ApiParam({ name: 'slug', required: true, description: 'Restaurant slug' }) - @ApiNotFoundResponse({ description: 'Restaurant not found' }) + @ApiParam({ name: 'slug', required: true, description: 'Shop slug' }) + @ApiNotFoundResponse({ description: 'Shop not found' }) findBySlug(@Param('slug') slug: string) { return this.restaurantsService.getRestaurantSpecification(slug); } @@ -39,8 +39,8 @@ export class RestaurantsController { @UseGuards(AdminAuthGuard) @ApiBearerAuth() @Permissions(Permission.UPDATE_RESTAURANT) - @ApiOperation({ summary: 'Get restaurant by ID from request' }) - @Get('admin/restaurants/my-restaurant') + @ApiOperation({ summary: 'Get shop by ID from request' }) + @Get('admin/shops/my-shop') async findOne(@RestId() restId: string) { return await this.restaurantsService.findOne(restId); } @@ -48,9 +48,9 @@ export class RestaurantsController { @UseGuards(AdminAuthGuard) @ApiBearerAuth() @Permissions(Permission.UPDATE_RESTAURANT) - @ApiOperation({ summary: 'Update a restaurant' }) + @ApiOperation({ summary: 'Update a shop' }) @ApiBody({ type: UpdateRestaurantDto }) - @Patch('admin/restaurants/my-restaurant') + @Patch('admin/shops/my-shop') updateMyRestaurant(@RestId() restId: string, @Body() updateRestaurantDto: UpdateRestaurantDto) { return this.restaurantsService.update(restId, updateRestaurantDto); } @@ -58,8 +58,8 @@ export class RestaurantsController { @UseGuards(AdminAuthGuard) @ApiBearerAuth() @Permissions(Permission.UPDATE_RESTAURANT) - @ApiOperation({ summary: 'Delete a restaurant' }) - @Delete('admin/restaurants/:id') + @ApiOperation({ summary: 'Delete a shop' }) + @Delete('admin/shops/:id') remove(@Param('id') id: string) { return this.restaurantsService.remove(id); } @@ -67,54 +67,54 @@ export class RestaurantsController { /** Super Admin Endpoints */ @UseGuards(SuperAdminAuthGuard) @ApiBearerAuth() - @ApiOperation({ summary: 'Get all restaurants with pagination and filters' }) - @Get('super-admin/restaurants') + @ApiOperation({ summary: 'Get all shops with pagination and filters' }) + @Get('super-admin/shops') findAll(@Query() dto: FindRestaurantsDto) { return this.restaurantsService.findAll(dto); } @UseGuards(SuperAdminAuthGuard) @ApiBearerAuth() - @ApiOperation({ summary: 'Create a new restaurant' }) - @Post('super-admin/restaurants') + @ApiOperation({ summary: 'Create a new shop' }) + @Post('super-admin/shops') createRestaurant(@Body() createRestaurantDto: CreateRestaurantDto) { return this.restaurantsService.setupRestuarant(createRestaurantDto); } @UseGuards(SuperAdminAuthGuard) @ApiBearerAuth() - @ApiOperation({ summary: 'Get restaurant by subscription ID' }) + @ApiOperation({ summary: 'Get shop by subscription ID' }) @ApiParam({ name: 'subscriptionId', required: true, description: 'Subscription ID' }) - @Get('super-admin/restaurants/subscription/:subscriptionId') + @Get('super-admin/shops/subscription/:subscriptionId') findOneBySubscriptionId(@Param('subscriptionId') subscriptionId: string) { return this.restaurantsService.findOneBySubscriptionId(subscriptionId); } @UseGuards(SuperAdminAuthGuard) @ApiBearerAuth() - @ApiOperation({ summary: 'Get restaurant by ID' }) - @ApiParam({ name: 'id', required: true, description: 'Restaurant ID' }) - @Get('super-admin/restaurants/:id') + @ApiOperation({ summary: 'Get shop by ID' }) + @ApiParam({ name: 'id', required: true, description: 'Shop ID' }) + @Get('super-admin/shops/:id') findOneById(@Param('id') id: string) { return this.restaurantsService.findOne(id); } @UseGuards(SuperAdminAuthGuard) @ApiBearerAuth() - @ApiOperation({ summary: 'Update a restaurant by ID' }) - @ApiParam({ name: 'id', required: true, description: 'Restaurant ID' }) + @ApiOperation({ summary: 'Update a shop by ID' }) + @ApiParam({ name: 'id', required: true, description: 'Shop ID' }) @ApiBody({ type: UpdateRestaurantDto }) - @Patch('super-admin/restaurants/:id') + @Patch('super-admin/shops/:id') updateRestaurant(@Param('id') id: string, @Body() updateRestaurantDto: UpdateRestaurantDto) { return this.restaurantsService.update(id, updateRestaurantDto); } @UseGuards(SuperAdminAuthGuard) @ApiBearerAuth() - @ApiOperation({ summary: 'Upgrade subscription for a restaurant' }) + @ApiOperation({ summary: 'Upgrade subscription for a shop' }) @ApiParam({ name: 'subscriptionId', required: true, description: 'Subscription ID' }) @ApiBody({ type: UpgradeSubscriptionDto }) - @Patch('super-admin/restaurants/subscription/:subscriptionId/upgrade') + @Patch('super-admin/shops/subscription/:subscriptionId/upgrade') upgradeSubscription( @Param('subscriptionId') subscriptionId: string, @Body() upgradeSubscriptionDto: UpgradeSubscriptionDto @@ -124,9 +124,9 @@ export class RestaurantsController { @UseGuards(SuperAdminAuthGuard) @ApiBearerAuth() - @ApiOperation({ summary: 'Hard delete a restaurant and all related data' }) - @ApiParam({ name: 'id', required: true, description: 'Restaurant ID' }) - @Delete('super-admin/restaurants/:id/hard-delete') + @ApiOperation({ summary: 'Hard delete a shop and all related data' }) + @ApiParam({ name: 'id', required: true, description: 'Shop ID' }) + @Delete('super-admin/shops/:id/hard-delete') hardDeleteRestaurant(@Param('id') id: string) { return this.restaurantsService.hardDeleteRestaurant(id); } diff --git a/src/modules/restaurants/crone/restaurant.crone.ts b/src/modules/shops/crone/shop.crone.ts similarity index 68% rename from src/modules/restaurants/crone/restaurant.crone.ts rename to src/modules/shops/crone/shop.crone.ts index b521563..7b1e44d 100644 --- a/src/modules/restaurants/crone/restaurant.crone.ts +++ b/src/modules/shops/crone/shop.crone.ts @@ -1,7 +1,7 @@ import { Injectable, Logger } from '@nestjs/common'; import { Cron } from '@nestjs/schedule'; import { EntityManager } from '@mikro-orm/postgresql'; -import { Restaurant } from '../entities/restaurant.entity'; +import { Shop } from '../entities/shop.entity'; @Injectable() export class RestaurantCrone { @@ -21,28 +21,28 @@ export class RestaurantCrone { // Get current date const now = new Date(); - // Find restaurants where subscription has expired and they're still active - const expiredRestaurants = await this.em.find(Restaurant, { + // Find shops where subscription has expired and they're still active + const expiredRestaurants = await this.em.find(Shop, { subscriptionEndDate: { $lt: now }, isActive: true, }); if (!expiredRestaurants || expiredRestaurants.length === 0) { - this.logger.debug('No restaurants with expired subscriptions found'); + this.logger.debug('No shops with expired subscriptions found'); return; } - this.logger.log(`Found ${expiredRestaurants.length} restaurants with expired subscriptions`); + this.logger.log(`Found ${expiredRestaurants.length} shops with expired subscriptions`); - // Deactivate expired restaurants - for (const restaurant of expiredRestaurants) { - restaurant.isActive = false; + // Deactivate expired shops + for (const shop of expiredRestaurants) { + shop.isActive = false; } // Persist all changes await this.em.persistAndFlush(expiredRestaurants); - this.logger.log(`Successfully deactivated ${expiredRestaurants.length} restaurants with expired subscriptions`); + this.logger.log(`Successfully deactivated ${expiredRestaurants.length} shops with expired subscriptions`); } catch (err) { this.logger.error(`RestaurantCrone failed: ${err?.message}`, err); } diff --git a/src/modules/restaurants/dto/create-schedule.dto.ts b/src/modules/shops/dto/create-schedule.dto.ts similarity index 100% rename from src/modules/restaurants/dto/create-schedule.dto.ts rename to src/modules/shops/dto/create-schedule.dto.ts diff --git a/src/modules/restaurants/dto/create-restaurant.dto.ts b/src/modules/shops/dto/create-shop.dto.ts similarity index 100% rename from src/modules/restaurants/dto/create-restaurant.dto.ts rename to src/modules/shops/dto/create-shop.dto.ts diff --git a/src/modules/restaurants/dto/find-schedules.dto.ts b/src/modules/shops/dto/find-schedules.dto.ts similarity index 100% rename from src/modules/restaurants/dto/find-schedules.dto.ts rename to src/modules/shops/dto/find-schedules.dto.ts diff --git a/src/modules/restaurants/dto/find-restaurants.dto.ts b/src/modules/shops/dto/find-shops.dto.ts similarity index 100% rename from src/modules/restaurants/dto/find-restaurants.dto.ts rename to src/modules/shops/dto/find-shops.dto.ts diff --git a/src/modules/restaurants/dto/restaurant-specification.dto.ts b/src/modules/shops/dto/shop-specification.dto.ts similarity index 93% rename from src/modules/restaurants/dto/restaurant-specification.dto.ts rename to src/modules/shops/dto/shop-specification.dto.ts index bfd4ac0..9d6c76f 100644 --- a/src/modules/restaurants/dto/restaurant-specification.dto.ts +++ b/src/modules/shops/dto/shop-specification.dto.ts @@ -1,13 +1,13 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; export class RestaurantSpecificationDto { - @ApiProperty({ example: '550e8400-e29b-41d4-a716-446655440000', description: 'Restaurant ID' }) + @ApiProperty({ example: '550e8400-e29b-41d4-a716-446655440000', description: 'Shop ID' }) id!: string; - @ApiProperty({ example: 'کافه ژیوان', description: 'Restaurant name' }) + @ApiProperty({ example: 'کافه ژیوان', description: 'Shop name' }) name!: string; - @ApiProperty({ example: 'zhivan', description: 'Restaurant slug' }) + @ApiProperty({ example: 'zhivan', description: 'Shop slug' }) slug!: string; @ApiPropertyOptional({ example: 'https://example.com/logo.png', description: 'Logo URL' }) diff --git a/src/modules/restaurants/dto/update-schedule.dto.ts b/src/modules/shops/dto/update-schedule.dto.ts similarity index 100% rename from src/modules/restaurants/dto/update-schedule.dto.ts rename to src/modules/shops/dto/update-schedule.dto.ts diff --git a/src/modules/restaurants/dto/update-restaurant.dto.ts b/src/modules/shops/dto/update-shop.dto.ts similarity index 66% rename from src/modules/restaurants/dto/update-restaurant.dto.ts rename to src/modules/shops/dto/update-shop.dto.ts index d029d5f..5e4a22a 100644 --- a/src/modules/restaurants/dto/update-restaurant.dto.ts +++ b/src/modules/shops/dto/update-shop.dto.ts @@ -1,4 +1,4 @@ import { PartialType } from '@nestjs/swagger'; -import { CreateRestaurantDto } from './create-restaurant.dto'; +import { CreateRestaurantDto } from './create-shop.dto'; export class UpdateRestaurantDto extends PartialType(CreateRestaurantDto) {} diff --git a/src/modules/restaurants/dto/upgrade-subscription.dto.ts b/src/modules/shops/dto/upgrade-subscription.dto.ts similarity index 100% rename from src/modules/restaurants/dto/upgrade-subscription.dto.ts rename to src/modules/shops/dto/upgrade-subscription.dto.ts diff --git a/src/modules/restaurants/entities/schedule.entity.ts b/src/modules/shops/entities/schedule.entity.ts similarity index 84% rename from src/modules/restaurants/entities/schedule.entity.ts rename to src/modules/shops/entities/schedule.entity.ts index e78fedf..f7f11c4 100644 --- a/src/modules/restaurants/entities/schedule.entity.ts +++ b/src/modules/shops/entities/schedule.entity.ts @@ -1,5 +1,5 @@ import { Entity, Property } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; @Entity({ tableName: 'schedules' }) export class Schedule extends BaseEntity { diff --git a/src/modules/shops/entities/shop.entity.ts b/src/modules/shops/entities/shop.entity.ts new file mode 100644 index 0000000..c570a39 --- /dev/null +++ b/src/modules/shops/entities/shop.entity.ts @@ -0,0 +1,112 @@ +import { Collection, Entity, Enum, Index, OneToMany, Property } from '@mikro-orm/core'; +import { BaseEntity } from '../../../../common/entities/base.entity'; +import { Delivery } from '../../../delivery/entities/delivery.entity'; +import { PlanEnum } from '../interface/plan.interface'; + +@Entity({ tableName: 'shops' }) +@Index({ properties: ['isActive'] }) +@Index({ properties: ['slug', 'isActive'] }) +export class Shop extends BaseEntity { + // --- اطلاعات پایه --- + @Property() + name!: string; + + @Property({ unique: true }) + slug!: string; + + @Property({ nullable: true }) + logo?: string; + + @Property({ nullable: true }) + address?: string; + + @Property({ nullable: true }) + menuColor?: string; + + // --- مختصات جغرافیایی --- + @Property({ type: 'decimal', precision: 10, scale: 7, nullable: true }) + latitude?: number; + + @Property({ type: 'decimal', precision: 10, scale: 7, nullable: true }) + longitude?: number; + + @Property({ type: 'json', nullable: true }) + serviceArea?: { + type: 'Polygon'; + coordinates: number[][][]; + }; + + // --- وضعیت‌ها --- + @Property({ default: true }) + isActive: boolean = true; + + @Property({ nullable: true }) + establishedYear?: number; + + @Property({ nullable: true }) + phone?: string; + + @Property({ nullable: true }) + instagram?: string; + + @Property({ nullable: true }) + telegram?: string; + + @Property({ nullable: true }) + whatsapp?: string; + + // --- توضیحات --- + @Property({ type: 'text', nullable: true }) + description?: string; + + // --- سئو --- + @Property({ nullable: true }) + seoTitle?: string; + + @Property({ nullable: true, type: 'text' }) + seoDescription?: string; + + @Property({ nullable: true, type: 'json' }) + tagNames?: string[]; + + // --- تصاویر --- + @Property({ nullable: true, type: 'json' }) + images?: string[]; + + // --- مالیات یا VAT --- + @Property({ type: 'decimal', default: 0 }) + vat?: number = 0; + + @Property() + domain!: string; + + // --- روش‌های ارسال --- + @OneToMany(() => Delivery, delivery => delivery.shop) + deliveries = new Collection(this); + + @Property({ type: 'json', nullable: true }) + score: { + purchaseAmount: string; + purchaseScore: string; + scoreAmount: string; + scoreCredit: string; + // bonus score + birthdayScore: string; + registerScore: string; + marriageDateScore: string; + referrerScore: string; + } | null = null; + + @Enum(() => PlanEnum) + plan: PlanEnum = PlanEnum.Base; + + @Property({unique: true,nullable: true}) + subscriptionId?: string; + + @Property({nullable: true}) + subscriptionEndDate?: Date; + + @Property({nullable: true}) + subscriptionStartDate?: Date; + +} diff --git a/src/modules/restaurants/interface/plan.interface.ts b/src/modules/shops/interface/plan.interface.ts similarity index 100% rename from src/modules/restaurants/interface/plan.interface.ts rename to src/modules/shops/interface/plan.interface.ts diff --git a/src/modules/restaurants/providers/schedule.service.ts b/src/modules/shops/providers/schedule.service.ts similarity index 92% rename from src/modules/restaurants/providers/schedule.service.ts rename to src/modules/shops/providers/schedule.service.ts index 2955046..4b465f0 100644 --- a/src/modules/restaurants/providers/schedule.service.ts +++ b/src/modules/shops/providers/schedule.service.ts @@ -7,7 +7,7 @@ import { CreateScheduleDto } from '../dto/create-schedule.dto'; import { UpdateScheduleDto } from '../dto/update-schedule.dto'; import { FindSchedulesDto } from '../dto/find-schedules.dto'; import { RestRepository } from '../repositories/rest.repository'; -import { Restaurant } from '../entities/restaurant.entity'; +import { Shop } from '../entities/shop.entity'; import { RestMessage } from 'src/common/enums/message.enum'; // import { RestMessage } from 'src/common/enums/message.enum'; @@ -49,15 +49,15 @@ export class ScheduleService { } async findTodaySchedules(slug: string): Promise { - const restaurant = await this.em.findOne(Restaurant, { slug }); - if (!restaurant) { + const shop = await this.em.findOne(Shop, { slug }); + if (!shop) { throw new NotFoundException(RestMessage.NOT_FOUND); } const today = new Date(); const weekDay = today.getDay(); // 0 = Sunday, 6 = Saturday const where: FilterQuery = { - restId: restaurant.id.toString(), + restId: shop.id.toString(), weekDay, isActive: true, }; @@ -66,13 +66,13 @@ export class ScheduleService { } async findScheduleBySlug(slug: string): Promise { - const restaurant = await this.em.findOne(Restaurant, { slug }); - if (!restaurant) { + const shop = await this.em.findOne(Shop, { slug }); + if (!shop) { throw new NotFoundException(RestMessage.NOT_FOUND); } const where: FilterQuery = { - restId: restaurant.id.toString(), + restId: shop.id.toString(), isActive: true, }; diff --git a/src/modules/restaurants/providers/restaurants.service.ts b/src/modules/shops/providers/shops.service.ts similarity index 53% rename from src/modules/restaurants/providers/restaurants.service.ts rename to src/modules/shops/providers/shops.service.ts index c75bfc6..e41d2ff 100644 --- a/src/modules/restaurants/providers/restaurants.service.ts +++ b/src/modules/shops/providers/shops.service.ts @@ -1,32 +1,32 @@ import { BadRequestException, Injectable, NotFoundException } from '@nestjs/common'; -import { CreateRestaurantDto } from '../dto/create-restaurant.dto'; -import { UpdateRestaurantDto } from '../dto/update-restaurant.dto'; +import { CreateRestaurantDto } from '../dto/create-shop.dto'; +import { UpdateRestaurantDto } from '../dto/update-shop.dto'; import { UpgradeSubscriptionDto } from '../dto/upgrade-subscription.dto'; -import { Restaurant } from '../entities/restaurant.entity'; +import { Shop } from '../entities/shop.entity'; import { EntityManager } from '@mikro-orm/postgresql'; import { RestRepository } from '../repositories/rest.repository'; import { RestMessage } from 'src/common/enums/message.enum'; -import { FindRestaurantsDto } from '../dto/find-restaurants.dto'; +import { FindRestaurantsDto } from ../../..shops.dto'; import { PaginatedResult } from 'src/common/interfaces/pagination.interface'; import { PlanEnum } from '../interface/plan.interface'; -import { Admin } from '../../admin/entities/admin.entity'; -import { AdminRole } from '../../admin/entities/adminRole.entity'; -import { Role } from '../../roles/entities/role.entity'; +import { Admin } from '../../../admin/entities/admin.entity'; +import { AdminRole } from '../../../admin/entities/adminRole.entity'; +import { Role } from '../../../roles/entities/role.entity'; import { normalizePhone } from 'src/modules/utils/phone.util'; import slugify from 'slugify'; -import { NotificationPreference } from '../../notifications/entities/notification-preference.entity'; -import { notificationPreferencesData } from '../../../seeders/data/notification-preferences.data'; -import { Order } from '../../orders/entities/order.entity'; -import { Coupon } from '../../coupons/entities/coupon.entity'; -import { Category } from '../../foods/entities/category.entity'; -import { Food } from '../../foods/entities/food.entity'; -import { Delivery } from '../../delivery/entities/delivery.entity'; -import { PaymentMethod } from '../../payments/entities/payment-method.entity'; -import { Pager } from '../../pager/entities/pager.entity'; +import { NotificationPreference } from '../../../notifications/entities/notification-preference.entity'; +import { notificationPreferencesData } from '../../../../seeders/data/notification-preferences.data'; +import { Order } from '../../../orders/entities/order.entity'; +import { Coupon } from '../../../coupons/entities/coupon.entity'; +import { Category } from ../../..products/entities/category.entity'; +import { Product } from ../../..products/entities/product.entity'; +import { Delivery } from '../../../delivery/entities/delivery.entity'; +import { PaymentMethod } from '../../../payments/entities/payment-method.entity'; +import { Pager } from '../../../pager/entities/pager.entity'; import { Schedule } from '../entities/schedule.entity'; -import { WalletTransaction } from '../../users/entities/wallet-transaction.entity'; -import { SmsLog } from '../../notifications/entities/smsLogs.entity'; -import { Notification } from '../../notifications/entities/notification.entity'; +import { WalletTransaction } from '../../../users/entities/wallet-transaction.entity'; +import { SmsLog } from '../../../notifications/entities/smsLogs.entity'; +import { Notification } from '../../../notifications/entities/notification.entity'; @Injectable() @@ -36,7 +36,7 @@ export class RestaurantsService { private readonly restRepository: RestRepository, ) { } - async setupRestuarant(dto: CreateRestaurantDto): Promise { + async setupRestuarant(dto: CreateRestaurantDto): Promise { return await this.em.transactional(async (em) => { // Generate or validate slug const slug = slugify(dto.slug ?? dto.name, { @@ -46,13 +46,13 @@ export class RestaurantsService { }); - const validateSubscriptionId = await em.findOne(Restaurant, { subscriptionId: dto.subscriptionId }) + const validateSubscriptionId = await em.findOne(Shop, { subscriptionId: dto.subscriptionId }) if (validateSubscriptionId) { throw new BadRequestException("Duplicate subscriptionId: " + dto.subscriptionId) } - // Create restaurant - const restaurant = em.create(Restaurant, { + // Create shop + const shop = em.create(Shop, { name: dto.name, slug, establishedYear: dto.establishedYear, @@ -86,27 +86,27 @@ export class RestaurantsService { const adminRole = em.create(AdminRole, { admin, role, - restaurant, + shop, }); - // Create notification preferences for the restaurant + // Create notification preferences for the shop const notificationPreferences = notificationPreferencesData.map(preferenceData => em.create(NotificationPreference, { - restaurant, + shop, title: preferenceData.title, channels: preferenceData.channels, }) ); // Persist all entities - em.persist([restaurant, admin, adminRole, ...notificationPreferences]); + em.persist([shop, admin, adminRole, ...notificationPreferences]); await em.flush(); - return restaurant; + return shop; }); } - async findAll(dto: FindRestaurantsDto): Promise> { + async findAll(dto: FindRestaurantsDto): Promise> { return this.restRepository.findAllPaginated({ page: dto.page, limit: dto.limit, @@ -118,54 +118,54 @@ export class RestaurantsService { }); } - async findBySlug(slug: string): Promise { - const restaurant = await this.em.findOne(Restaurant, { slug }); + async findBySlug(slug: string): Promise { + const shop = await this.em.findOne(Shop, { slug }); - if (!restaurant) { - throw new NotFoundException(`Restaurant with slug "${slug}" not found`); + if (!shop) { + throw new NotFoundException(`Shop with slug "${slug}" not found`); } - return restaurant; + return shop; } - async findOne(id: string): Promise { - const restaurant = await this.restRepository.findOne({ id }); + async findOne(id: string): Promise { + const shop = await this.restRepository.findOne({ id }); - if (!restaurant) { + if (!shop) { throw new NotFoundException(RestMessage.NOT_FOUND); } - return restaurant; + return shop; } - async findOneBySubscriptionId(subscriptionId: string): Promise { + async findOneBySubscriptionId(subscriptionId: string): Promise { console.log('subscriptionId', subscriptionId) - const restaurant = await this.restRepository.findOne({ subscriptionId }); - console.log('restaurant', restaurant) - if (!restaurant) { + const shop = await this.restRepository.findOne({ subscriptionId }); + console.log('shop', shop) + if (!shop) { throw new NotFoundException(RestMessage.NOT_FOUND); } - return restaurant; + return shop; } async getRestaurantSpecification(slug: string) { - const restaurant = await this.findBySlug(slug); - return restaurant; + const shop = await this.findBySlug(slug); + return shop; } // TODO : it must be done inside transaction - async update(id: string, dto: UpdateRestaurantDto): Promise { + async update(id: string, dto: UpdateRestaurantDto): Promise { - const restaurant = await this.restRepository.findOne({ id: id }); + const shop = await this.restRepository.findOne({ id: id }); - if (!restaurant) { + if (!shop) { throw new NotFoundException(RestMessage.NOT_FOUND); } - if (dto.plan && dto.plan !== restaurant.plan) { + if (dto.plan && dto.plan !== shop.plan) { const isPremium = dto.plan === PlanEnum.Premium // find admins and make them premium or base const adminRoles = await this.em.find(AdminRole, { - restaurant: { + shop: { id }, role: { @@ -186,95 +186,95 @@ export class RestaurantsService { } - this.restRepository.assign(restaurant, dto); + this.restRepository.assign(shop, dto); - await this.em.persistAndFlush(restaurant); + await this.em.persistAndFlush(shop); - return restaurant; + return shop; } async remove(id: string) { - // Soft delete the restaurant by setting isActive to false - const restaurant = await this.restRepository.findOne({ id }); + // Soft delete the shop by setting isActive to false + const shop = await this.restRepository.findOne({ id }); - if (!restaurant) { + if (!shop) { throw new NotFoundException(RestMessage.NOT_FOUND); } - restaurant.isActive = false; - await this.em.persistAndFlush(restaurant); + shop.isActive = false; + await this.em.persistAndFlush(shop); - return restaurant; + return shop; } - async upgradeSubscription(subscriptionId: string, dto: UpgradeSubscriptionDto): Promise { - const restaurant = await this.restRepository.findOne({ subscriptionId }); + async upgradeSubscription(subscriptionId: string, dto: UpgradeSubscriptionDto): Promise { + const shop = await this.restRepository.findOne({ subscriptionId }); - if (!restaurant) { + if (!shop) { throw new NotFoundException(RestMessage.NOT_FOUND); } const isActive = new Date(dto.subscriptionEndDate) > new Date() - await this.update(restaurant.id, { + await this.update(shop.id, { plan: dto.newPlan, subscriptionEndDate: dto.subscriptionEndDate, isActive }) - return restaurant; + return shop; } async hardDeleteRestaurant(id: string): Promise { return await this.em.transactional(async (em) => { - // Find the restaurant first - const restaurant = await em.findOne(Restaurant, { id }); + // Find the shop first + const shop = await em.findOne(Shop, { id }); - if (!restaurant) { + if (!shop) { throw new NotFoundException(RestMessage.NOT_FOUND); } // Delete orders first (will cascade to order items and payments due to cascade settings) - await em.nativeDelete(Order, { restaurant: id }); + await em.nativeDelete(Order, { shop: id }); // Delete coupons - await em.nativeDelete(Coupon, { restaurant: id }); + await em.nativeDelete(Coupon, { shop: id }); - // Delete foods (will cascade to reviews, favorites, and inventory due to cascade settings) - await em.nativeDelete(Food, { restaurant: id }); + // Delete products (will cascade to reviews, favorites, and inventory due to cascade settings) + await em.nativeDelete(Product, { shop: id }); - // Delete categories (foods should be deleted by cascade, but delete explicitly to be safe) - await em.nativeDelete(Category, { restaurant: id }); + // Delete categories (products should be deleted by cascade, but delete explicitly to be safe) + await em.nativeDelete(Category, { shop: id }); // Delete deliveries - await em.nativeDelete(Delivery, { restaurant: id }); + await em.nativeDelete(Delivery, { shop: id }); // Delete schedules await em.nativeDelete(Schedule, { restId: id }); // Delete notification preferences - await em.nativeDelete(NotificationPreference, { restaurant: id }); + await em.nativeDelete(NotificationPreference, { shop: id }); // Delete notifications - await em.nativeDelete(Notification, { restaurant: id }); + await em.nativeDelete(Notification, { shop: id }); // Delete SMS logs - await em.nativeDelete(SmsLog, { restaurant: id }); + await em.nativeDelete(SmsLog, { shop: id }); - // Delete admin roles for this restaurant - await em.nativeDelete(AdminRole, { restaurant: id }); + // Delete admin roles for this shop + await em.nativeDelete(AdminRole, { shop: id }); // Delete payment methods - await em.nativeDelete(PaymentMethod, { restaurant: id }); + await em.nativeDelete(PaymentMethod, { shop: id }); // Delete pagers - await em.nativeDelete(Pager, { restaurant: id }); + await em.nativeDelete(Pager, { shop: id }); // Delete wallet transactions - await em.nativeDelete(WalletTransaction, { restaurant: id }); + await em.nativeDelete(WalletTransaction, { shop: id }); - // Finally, delete the restaurant itself - await em.nativeDelete(Restaurant, { id }); + // Finally, delete the shop itself + await em.nativeDelete(Shop, { id }); }); } diff --git a/src/modules/restaurants/repositories/rest.repository.ts b/src/modules/shops/repositories/rest.repository.ts similarity index 84% rename from src/modules/restaurants/repositories/rest.repository.ts rename to src/modules/shops/repositories/rest.repository.ts index 7eb58db..7782ce9 100644 --- a/src/modules/restaurants/repositories/rest.repository.ts +++ b/src/modules/shops/repositories/rest.repository.ts @@ -1,6 +1,6 @@ import { EntityManager, EntityRepository } from '@mikro-orm/postgresql'; import { FilterQuery } from '@mikro-orm/core'; -import { Restaurant } from '../entities/restaurant.entity'; +import { Shop } from '../entities/shop.entity'; import { Injectable } from '@nestjs/common'; import { PaginatedResult } from 'src/common/interfaces/pagination.interface'; import { PlanEnum } from '../interface/plan.interface'; @@ -16,16 +16,16 @@ type FindRestaurantsOpts = { }; @Injectable() -export class RestRepository extends EntityRepository { +export class RestRepository extends EntityRepository { constructor(readonly em: EntityManager) { - super(em, Restaurant); + super(em, Shop); } /** - * Find restaurants with pagination and optional filters. + * Find shops with pagination and optional filters. * Supports: search (name/slug/domain/address), isActive, plan, ordering. */ - async findAllPaginated(opts: FindRestaurantsOpts = {}): Promise> { + async findAllPaginated(opts: FindRestaurantsOpts = {}): Promise> { const { page = 1, limit = 10, @@ -38,7 +38,7 @@ export class RestRepository extends EntityRepository { const offset = (page - 1) * limit; - const where: FilterQuery = {}; + const where: FilterQuery = {}; if (typeof isActive === 'boolean') { where.isActive = isActive; diff --git a/src/modules/restaurants/repositories/schedule.repository.ts b/src/modules/shops/repositories/schedule.repository.ts similarity index 100% rename from src/modules/restaurants/repositories/schedule.repository.ts rename to src/modules/shops/repositories/schedule.repository.ts diff --git a/src/modules/shops/shops.module.ts b/src/modules/shops/shops.module.ts new file mode 100644 index 0000000..347def3 --- /dev/null +++ b/src/modules/shops/shops.module.ts @@ -0,0 +1,21 @@ +import { Module, forwardRef } from '@nestjs/common'; +import { ShopsService } from './providers/shops.service'; +import { ShopsController } from './controllers/shops.controller'; +import { MikroOrmModule } from '@mikro-orm/nestjs'; +import { Shop } from './entities/shop.entity'; +import { RestRepository } from './repositories/rest.repository'; +import { ScheduleRepository } from './repositories/schedule.repository'; +import { Schedule } from './entities/schedule.entity'; +import { ScheduleService } from './providers/schedule.service'; +import { ScheduleController } from './controllers/schedule.controller'; +import { ShopCrone } from './crone/shop.crone'; +import { JwtModule } from '@nestjs/jwt'; +import { AuthModule } from '../auth/auth.module'; + +@Module({ + controllers: [ShopsController, ScheduleController], + providers: [ShopsService, RestRepository, ScheduleRepository, ScheduleService, ShopCrone], + imports: [MikroOrmModule.forFeature([Shop, Schedule]), JwtModule, forwardRef(() => AuthModule)], + exports: [RestRepository, ScheduleRepository, ScheduleService], +}) +export class ShopsModule {} diff --git a/src/modules/uploader/controllers/uploader.controller.ts b/src/modules/uploader/controllers/uploader.controller.ts index 60d924f..c44482a 100644 --- a/src/modules/uploader/controllers/uploader.controller.ts +++ b/src/modules/uploader/controllers/uploader.controller.ts @@ -3,8 +3,8 @@ import { Controller, Post, UploadedFile, UploadedFiles, UseGuards, UseIntercepto import { ApiBody, ApiConsumes, ApiOperation, ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { UploadMultipleFileDto, UploadSingleFileDto } from '../DTO/upload-file.dto'; import { UploaderService } from '../providers/uploader.service'; -import { AdminAuthGuard } from '../../auth/guards/adminAuth.guard'; -import { AuthGuard } from '../../auth/guards/auth.guard'; +import { AdminAuthGuard } from '../../../auth/guards/adminAuth.guard'; +import { AuthGuard } from '../../../auth/guards/auth.guard'; @ApiTags('uploader') @Controller() diff --git a/src/modules/uploader/providers/uploader.service.ts b/src/modules/uploader/providers/uploader.service.ts index 9bda649..123485b 100644 --- a/src/modules/uploader/providers/uploader.service.ts +++ b/src/modules/uploader/providers/uploader.service.ts @@ -3,7 +3,7 @@ import { BadRequestException, Injectable, Logger } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { S3Service } from './s3.service'; -import { UploaderMessage } from '../../../common/enums/message.enum'; +import { UploaderMessage } from '../../../../common/enums/message.enum'; import { FileType } from '../interfaces/file.interface'; @Injectable() diff --git a/src/modules/users/entities/point-transaction.entity.ts b/src/modules/users/entities/point-transaction.entity.ts index 91e97a2..ba5cd2b 100644 --- a/src/modules/users/entities/point-transaction.entity.ts +++ b/src/modules/users/entities/point-transaction.entity.ts @@ -1,20 +1,20 @@ import { Entity, Property, ManyToOne, Index, Enum } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; -import { Restaurant } from 'src/modules/restaurants/entities/restaurant.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; import { User } from './user.entity'; import { PointTransactionReason } from '../interface/point'; import { PointTransactionType } from '../interface/point'; @Entity({ tableName: 'point_transactions' }) -@Index({ properties: ['user', 'restaurant'] }) // Composite index for most common query: find wallet by user and restaurant +@Index({ properties: ['user', 'shop'] }) // Composite index for most common query: find wallet by user and shop @Index({ properties: ['user'] }) // Index for queries finding all wallets for a user -@Index({ properties: ['restaurant'] }) // Index for queries finding all wallets for a restaurant +@Index({ properties: ['shop'] }) // Index for queries finding all wallets for a shop export class PointTransaction extends BaseEntity { @ManyToOne(() => User) user!: User; @ManyToOne(() => User) - restaurant!: Restaurant; + shop!: Shop; @Property({ type: 'decimal', precision: 10, scale: 0 }) amount!: number; diff --git a/src/modules/users/entities/user-address.entity.ts b/src/modules/users/entities/user-address.entity.ts index d2ae78c..0c4e682 100644 --- a/src/modules/users/entities/user-address.entity.ts +++ b/src/modules/users/entities/user-address.entity.ts @@ -1,5 +1,5 @@ import { Entity, Property, ManyToOne } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; import { User } from './user.entity'; @Entity({ tableName: 'user_addresses' }) diff --git a/src/modules/users/entities/user.entity.ts b/src/modules/users/entities/user.entity.ts index 794b103..c23a3a8 100644 --- a/src/modules/users/entities/user.entity.ts +++ b/src/modules/users/entities/user.entity.ts @@ -1,8 +1,8 @@ import { Entity, Index, Property, OneToMany, Collection, Cascade } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; import { UserAddress } from './user-address.entity'; import { Order } from 'src/modules/orders/entities/order.entity'; -import { normalizePhone } from '../../utils/phone.util'; +import { normalizePhone } from '../../../utils/phone.util'; @Entity({ tableName: 'users' }) @Index({ properties: ['isActive'] }) diff --git a/src/modules/users/entities/wallet-transaction.entity.ts b/src/modules/users/entities/wallet-transaction.entity.ts index 087f9a2..669b903 100644 --- a/src/modules/users/entities/wallet-transaction.entity.ts +++ b/src/modules/users/entities/wallet-transaction.entity.ts @@ -1,19 +1,19 @@ import { Entity, Index, Property, ManyToOne, Enum } from '@mikro-orm/core'; -import { BaseEntity } from '../../../common/entities/base.entity'; +import { BaseEntity } from '../../../../common/entities/base.entity'; import { User } from './user.entity'; import { WalletTransactionReason, WalletTransactionType } from '../interface/wallet'; -import { Restaurant } from 'src/modules/restaurants/entities/restaurant.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; @Entity({ tableName: 'wallet_transactions' }) -@Index({ properties: ['user', 'restaurant'] }) +@Index({ properties: ['user', 'shop'] }) @Index({ properties: ['user'] }) -@Index({ properties: ['restaurant'] }) +@Index({ properties: ['shop'] }) export class WalletTransaction extends BaseEntity { @ManyToOne(() => User) user!: User; - @ManyToOne(() => Restaurant) - restaurant!: Restaurant; + @ManyToOne(() => Shop) + shop!: Shop; @Property({ type: 'decimal', precision: 10, scale: 0 }) amount!: number; diff --git a/src/modules/users/providers/user.service.ts b/src/modules/users/providers/user.service.ts index bbc2972..0a66926 100644 --- a/src/modules/users/providers/user.service.ts +++ b/src/modules/users/providers/user.service.ts @@ -2,7 +2,7 @@ import { Injectable, NotFoundException, BadRequestException } from '@nestjs/comm import { FilterQuery, RequiredEntityData } from '@mikro-orm/core'; import { User } from '../entities/user.entity'; import { UserAddress } from '../entities/user-address.entity'; -import { Restaurant } from 'src/modules/restaurants/entities/restaurant.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; import { EntityManager } from '@mikro-orm/postgresql'; import { UpdateUserDto } from '../dto/update-user.dto'; import { FindUsersDto } from '../dto/find-user.dto'; @@ -12,8 +12,8 @@ import { CreateUserAddressDto } from '../dto/create-user-address.dto'; import { UpdateUserAddressDto } from '../dto/update-user-address.dto'; import { PaginatedResult } from 'src/common/interfaces/pagination.interface'; import { UserRepository } from '../repositories/user.repository'; -import { normalizePhone } from '../../utils/phone.util'; -import { RestRepository } from 'src/modules/restaurants/repositories/rest.repository'; +import { normalizePhone } from '../../../utils/phone.util'; +import { RestRepository } from ../../..shops/repositories/rest.repository'; import { WalletTransactionRepository } from '../repositories/wallet-transaction.repository'; import { WalletService } from './wallet.service'; import { WalletTransactionReason, WalletTransactionType } from '../interface/wallet'; @@ -83,18 +83,18 @@ export class UserService { birthDate: undefined, marriageDate: undefined, }; - // get registerscore from restaurant - const restaurant = await this.restaurantRepository.findOne({ id: restId }); - if (!restaurant) { - throw new NotFoundException(`Restaurant not found.`); + // get registerscore from shop + const shop = await this.restaurantRepository.findOne({ id: restId }); + if (!shop) { + throw new NotFoundException(`Shop not found.`); } - const points = Number(restaurant.score?.registerScore || 0); + const points = Number(shop.score?.registerScore || 0); const createData = _raw as unknown as RequiredEntityData; const user = this.userRepository.create(createData); const newWalletTransaction = this.walletTransactionRepository.create({ user: user, - restaurant: restaurant, + shop: shop, balance: 0, amount: points, type: WalletTransactionType.CREDIT, @@ -134,7 +134,7 @@ export class UserService { // 2. Build the 'where' filter query const where: FilterQuery = { orders: { - restaurant: { + shop: { id: restId, }, }, @@ -312,18 +312,18 @@ export class UserService { if (!user) { throw new NotFoundException(`User with ID ${userId} not found.`); } - const restaurant = await em.findOne(Restaurant, { id: restId }); - if (!restaurant) { - throw new NotFoundException(`Restaurant with ID ${restId} not found.`); + const shop = await em.findOne(Shop, { id: restId }); + if (!shop) { + throw new NotFoundException(`Shop with ID ${restId} not found.`); } - let walletTransaction = await em.findOne(WalletTransaction, { user: { id: userId }, restaurant: { id: restId } }, + let walletTransaction = await em.findOne(WalletTransaction, { user: { id: userId }, shop: { id: restId } }, { orderBy: { createdAt: 'DESC' } }); if (!walletTransaction) { walletTransaction = em.create(WalletTransaction, { user: user, - restaurant, + shop, balance: 0, amount: 0, type: WalletTransactionType.CREDIT, @@ -339,22 +339,22 @@ export class UserService { throw new BadRequestException('Points to convert must be greater than 0.'); } - if (!restaurant.score) { - throw new BadRequestException('Restaurant score not found.'); + if (!shop.score) { + throw new BadRequestException('Shop score not found.'); } - if (!restaurant.score.purchaseScore) { - throw new BadRequestException('Restaurant purchase score not found.'); + if (!shop.score.purchaseScore) { + throw new BadRequestException('Shop purchase score not found.'); } - if (!restaurant.score.purchaseAmount) { - throw new BadRequestException('Restaurant purchase amount not found.'); + if (!shop.score.purchaseAmount) { + throw new BadRequestException('Shop purchase amount not found.'); } const walletIncreaseAmount = - (Number(pointsToConvert) * Number(restaurant.score.purchaseAmount)) / Number(restaurant.score.purchaseScore); + (Number(pointsToConvert) * Number(shop.score.purchaseAmount)) / Number(shop.score.purchaseScore); // Convert points to wallet (1:1 ratio - can be made configurable) const newWalletTransaction = em.create(WalletTransaction, { user: user, - restaurant: restaurant, + shop: shop, amount: walletIncreaseAmount, type: WalletTransactionType.CREDIT, reason: WalletTransactionReason.CONVERT_SCORE_TO_WALLET, @@ -371,7 +371,7 @@ export class UserService { } getUserWallet(userId: string, restId: string): Promise { - return this.walletTransactionRepository.findOne({ user: { id: userId }, restaurant: { id: restId } }, + return this.walletTransactionRepository.findOne({ user: { id: userId }, shop: { id: restId } }, { orderBy: { createdAt: 'DESC' } }); } diff --git a/src/modules/users/providers/wallet.service.ts b/src/modules/users/providers/wallet.service.ts index 57da157..61fdbc9 100644 --- a/src/modules/users/providers/wallet.service.ts +++ b/src/modules/users/providers/wallet.service.ts @@ -37,20 +37,20 @@ export class WalletService { // Calculate pagination const offset = (page - 1) * limit; - // Find the user's wallet for this restaurant + // Find the user's wallet for this shop const walletTransaction = await this.walletTransactionRepository.findOne({ user: { id: userId }, - restaurant: { id: restId }, + shop: { id: restId }, }); if (!walletTransaction) { - throw new NotFoundException(`User wallet not found for user ${userId} and restaurant ${restId}.`); + throw new NotFoundException(`User wallet not found for user ${userId} and shop ${restId}.`); } // Build the 'where' filter query const where: FilterQuery = { user: { id: userId }, - restaurant: { id: restId }, + shop: { id: restId }, }; // Add type filter @@ -111,7 +111,7 @@ export class WalletService { return this.walletTransactionRepository.findOne( { user: { id: userId }, - restaurant: { id: restId }, + shop: { id: restId }, }, { orderBy: { createdAt: 'DESC' } }, ); @@ -130,14 +130,14 @@ export class WalletService { throw new BadRequestException('Transaction amount must be greater than 0.'); } - // Find the user's wallet for this restaurant + // Find the user's wallet for this shop const walletTransaction = await em.findOne(WalletTransaction, { user: { id: userId }, - restaurant: { id: restId }, + shop: { id: restId }, }); if (!walletTransaction) { - throw new NotFoundException(`User wallet not found for user ${userId} and restaurant ${restId}.`); + throw new NotFoundException(`User wallet not found for user ${userId} and shop ${restId}.`); } // Calculate new balance @@ -162,7 +162,7 @@ export class WalletService { // Create transaction record const transaction = em.create(WalletTransaction, { user: walletTransaction.user, - restaurant: walletTransaction.restaurant, + shop: walletTransaction.shop, amount, type, reason, diff --git a/src/modules/users/repositories/point-transaction.repository.ts b/src/modules/users/repositories/point-transaction.repository.ts index bbdaa66..d16be2e 100644 --- a/src/modules/users/repositories/point-transaction.repository.ts +++ b/src/modules/users/repositories/point-transaction.repository.ts @@ -10,7 +10,7 @@ export class PointTransactionRepository extends EntityRepository { const pointTransaction = await this.em.findOne(PointTransaction, { user: { id: userId }, - restaurant: { id: restaurantId }, + shop: { id: restaurantId }, }); return pointTransaction?.balance || 0; } diff --git a/src/modules/users/repositories/wallet-transaction.repository.ts b/src/modules/users/repositories/wallet-transaction.repository.ts index a127509..efac47b 100644 --- a/src/modules/users/repositories/wallet-transaction.repository.ts +++ b/src/modules/users/repositories/wallet-transaction.repository.ts @@ -12,7 +12,7 @@ export class WalletTransactionRepository extends EntityRepository, restaurantsMap: Map): Promise { + async run(em: EntityManager, rolesMap: Map, restaurantsMap: Map): Promise { for (const adminData of adminsData) { const existingAdmin = await em.findOne(Admin, { phone: adminData.phone }); if (existingAdmin) continue; @@ -15,10 +15,10 @@ export class AdminsSeeder { const role = rolesMap.get(adminData.roleName); if (!role) continue; - const restaurant = adminData.restaurantSlug ? restaurantsMap.get(adminData.restaurantSlug) : null; + const shop = adminData.restaurantSlug ? restaurantsMap.get(adminData.restaurantSlug) : null; - // For restaurant role, restaurant is required - if (!restaurant) continue; + // For shop role, shop is required + if (!shop) continue; const admin = em.create(Admin, { phone: normalizePhone(adminData.phone), @@ -27,11 +27,11 @@ export class AdminsSeeder { }); em.persist(admin); - // Create AdminRole linking admin to role and restaurant + // Create AdminRole linking admin to role and shop const adminRole = em.create(AdminRole, { admin, role, - restaurant: adminData.restaurantSlug ? restaurant : null, + shop: adminData.restaurantSlug ? shop : null, }); em.persist(adminRole); admin.roles.add(adminRole); diff --git a/src/seeders/categories.seeder.ts b/src/seeders/categories.seeder.ts index 53d3a32..e8eecb6 100644 --- a/src/seeders/categories.seeder.ts +++ b/src/seeders/categories.seeder.ts @@ -1,6 +1,6 @@ import type { EntityManager } from '@mikro-orm/core'; -import { Category } from '../modules/foods/entities/category.entity'; -import type { Restaurant } from '../modules/restaurants/entities/restaurant.entity'; +import { Category } from ../../..products/entities/category.entity'; +import type { Shop } from ../../..shops/entities/shop.entity'; import { categoriesData } from './data/categories.data'; import * as fs from 'fs'; import * as path from 'path'; @@ -45,7 +45,7 @@ export class CategoriesSeeder { 'پیتزا': ['pizza'], // Pasta - 'پاستا': ['fast-food'], + 'پاستا': ['fast-product'], // Steak 'استیک': ['meat', 'meat 2'], @@ -57,7 +57,7 @@ export class CategoriesSeeder { 'سالاد': ['broccoli'], // Appetizer/Appetizers - 'پیش غذا': ['chicken', 'fast-food'], + 'پیش غذا': ['chicken', 'fast-product'], // Main Course 'غذای اصلی': ['hanburger', 'meat'], @@ -67,8 +67,8 @@ export class CategoriesSeeder { // Sandwich 'ساندویچ': ['bread'], - // Fried foods - 'سوخاری': ['chicken', 'fast-food'], + // Fried products + 'سوخاری': ['chicken', 'fast-product'], // Cake/Dessert 'کیک': ['cookie1', 'cookie2'], @@ -148,8 +148,8 @@ export class CategoriesSeeder { // French Fries 'سیب زمینی': ['french fries'], - // Fast Food - 'فست فود': ['fast-food'], + // Fast Product + 'فست فود': ['fast-product'], // Bakery 'نانوایی': ['bread'], @@ -164,7 +164,7 @@ export class CategoriesSeeder { 'تاکو': ['taco'], // Nachos - 'ناچو': ['fast-food'], + 'ناچو': ['fast-product'], // Sushi 'سوشی': ['fish'], @@ -179,7 +179,7 @@ export class CategoriesSeeder { 'توفو': ['jar'], // Bibimbap - 'بیبیمباب': ['fast-food'], + 'بیبیمباب': ['fast-product'], // Boba 'بوبا': ['drink', 'drink2'], @@ -274,7 +274,7 @@ export class CategoriesSeeder { // Knife 'چاقو': ['knife'], - // Baby food + // Baby product 'کودک': ['baby bottle', 'baby bottle', 'baby pacifier'], // Hat (chef hat) @@ -362,23 +362,23 @@ export class CategoriesSeeder { const randomIndex = Math.floor(Math.random() * this.icons.length); return this.icons[randomIndex]?.url; } - async run(em: EntityManager, restaurantsMap: Map): Promise> { + async run(em: EntityManager, restaurantsMap: Map): Promise> { const categoriesMap = new Map(); for (const catData of categoriesData) { - const restaurant = restaurantsMap.get(catData.restaurantSlug); - if (!restaurant) continue; + const shop = restaurantsMap.get(catData.restaurantSlug); + if (!shop) continue; const existing = await em.findOne(Category, { title: catData.title, - restaurant, + shop, }); if (!existing) { const avatarUrl = this.getIconForCategory(catData.title); const category = em.create(Category, { title: catData.title, - restaurant, + shop, isActive: true, avatarUrl, }); diff --git a/src/seeders/coupons.seeder.ts b/src/seeders/coupons.seeder.ts index 024d01b..32c18f7 100644 --- a/src/seeders/coupons.seeder.ts +++ b/src/seeders/coupons.seeder.ts @@ -1,23 +1,23 @@ import type { EntityManager } from '@mikro-orm/core'; import { Coupon } from '../modules/coupons/entities/coupon.entity'; -import type { Restaurant } from '../modules/restaurants/entities/restaurant.entity'; +import type { Shop } from ../../..shops/entities/shop.entity'; import { couponsData } from './data/coupons.data'; export class CouponsSeeder { - async run(em: EntityManager, restaurantsMap: Map): Promise { + async run(em: EntityManager, restaurantsMap: Map): Promise { for (const couponData of couponsData) { - const restaurant = restaurantsMap.get(couponData.restaurantSlug); + const shop = restaurantsMap.get(couponData.restaurantSlug); - if (!restaurant) continue; + if (!shop) continue; const existing = await em.findOne(Coupon, { code: couponData.code, - restaurant: { id: restaurant.id }, + shop: { id: shop.id }, }); if (!existing) { const coupon = em.create(Coupon, { - restaurant, + shop, code: couponData.code, name: couponData.name, description: couponData.description, diff --git a/src/seeders/data/coupons.data.ts b/src/seeders/data/coupons.data.ts index 4cacc51..6358781 100644 --- a/src/seeders/data/coupons.data.ts +++ b/src/seeders/data/coupons.data.ts @@ -1,4 +1,4 @@ -import { CouponType } from '../../modules/coupons/interface/coupon'; +import { CouponType } from '../../../modules/coupons/interface/coupon'; export interface CouponData { restaurantSlug: string; diff --git a/src/seeders/data/delivery-methods.data.ts b/src/seeders/data/delivery-methods.data.ts index 4e427ef..2276986 100644 --- a/src/seeders/data/delivery-methods.data.ts +++ b/src/seeders/data/delivery-methods.data.ts @@ -1,4 +1,4 @@ -import { DeliveryMethodEnum } from '../../modules/delivery/interface/delivery'; +import { DeliveryMethodEnum } from '../../../modules/delivery/interface/delivery'; export interface DeliveryMethodData { method: DeliveryMethodEnum; diff --git a/src/seeders/data/notification-preferences.data.ts b/src/seeders/data/notification-preferences.data.ts index eb63bbf..71458e2 100644 --- a/src/seeders/data/notification-preferences.data.ts +++ b/src/seeders/data/notification-preferences.data.ts @@ -1,4 +1,4 @@ -import { NotifChannelEnum, NotifTitleEnum } from '../../modules/notifications/interfaces/notification.interface'; +import { NotifChannelEnum, NotifTitleEnum } from '../../../modules/notifications/interfaces/notification.interface'; export interface NotificationPreferenceData { title: NotifTitleEnum; diff --git a/src/seeders/data/payment-methods.data.ts b/src/seeders/data/payment-methods.data.ts index 673a1fc..ffe8d23 100644 --- a/src/seeders/data/payment-methods.data.ts +++ b/src/seeders/data/payment-methods.data.ts @@ -1,4 +1,4 @@ -import { PaymentMethodEnum, PaymentGatewayEnum } from '../../modules/payments/interface/payment'; +import { PaymentMethodEnum, PaymentGatewayEnum } from '../../../modules/payments/interface/payment'; export interface PaymentMethodData { method: PaymentMethodEnum; diff --git a/src/seeders/data/permissions.data.ts b/src/seeders/data/permissions.data.ts index 286f078..22df5ee 100644 --- a/src/seeders/data/permissions.data.ts +++ b/src/seeders/data/permissions.data.ts @@ -1,4 +1,4 @@ -import { Permission, PermissionTitles } from '../../common/enums/permission.enum'; +import { Permission, PermissionTitles } from '../../../common/enums/permission.enum'; diff --git a/src/seeders/data/foods.data.ts b/src/seeders/data/products.data.ts similarity index 87% rename from src/seeders/data/foods.data.ts rename to src/seeders/data/products.data.ts index e297acb..31c1b88 100644 --- a/src/seeders/data/foods.data.ts +++ b/src/seeders/data/products.data.ts @@ -1,8 +1,8 @@ -export interface FoodData { +export interface ProductData { title: string; desc: string; price: number; - restaurantSlug: string; + shopSlug: string; categoryTitle: string; isActive: boolean; stock: number; @@ -14,7 +14,7 @@ export interface FoodData { isSpecialOffer?: boolean; } -export const foodsData: FoodData[] = [{ +export const productsData: ProductData[] = [{ title: 'بیف استراگانف .. beef stroganoff ', desc: 'فیله گوساله / سس سفید / قارچ و سیب زمینی/ پنیر پارمزان..veal fillet/ mayonnaise sauce/mushroom/potato/parmesan cheese ', price: 505000, @@ -23,7 +23,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714292844747.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714292844747.png"], }, { title: 'چیکن استراگانف .. chicken stroganoff ', @@ -34,7 +34,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714291139700.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714291139700.png"], }, { title: 'اسپاگتی گوشت .. meat spaghetti ', @@ -45,7 +45,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715716176915.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715716176915.png"], }, { title: 'پنه میلانو .. Milano Pasta', @@ -56,7 +56,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1735148231197.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1735148231197.png"], }, { title: 'پنه آلفردو .. Alfredo pasta', @@ -67,7 +67,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715716115154.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715716115154.png"], }, { title: 'اسپاگتی پستو .. pesto spaghetti ', @@ -78,7 +78,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715715922343.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715715922343.png"], }, { title: 'چانو.. Chano ', @@ -89,7 +89,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714290662409.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714290662409.png"], }, { title: 'مازراتی.. Pulled beef ', @@ -100,7 +100,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714291733978.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714291733978.png"], }, { title: 'کاپری چیوسا.. Capricciosa', @@ -111,7 +111,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714291580847.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714291580847.png"], }, { title: 'سیسیلی(Hot).. Sicily ', @@ -122,7 +122,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714292109999.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714292109999.png"], }, { title: 'پپرونی (Hot).. Pepperoni ', @@ -133,7 +133,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713707400167.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713707400167.png"], }, { title: 'وجتریین.. Vegetarian ', @@ -144,7 +144,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714292678356.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714292678356.png"], }, { title: 'مارگاریتا.. Margherita ', @@ -155,7 +155,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714291688802.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714291688802.png"], }, { title: 'کوارترپیتزا.. Quarter pizza ', @@ -166,7 +166,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714291863631.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714291863631.png"], }, { title: 'بیف پستو.. Beef pesto', @@ -177,7 +177,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714291001069.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714291001069.png"], }, { title: 'بولونز.. Bolognese ', @@ -199,7 +199,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714290596848.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714290596848.png"], }, { title: 'فیله مینیون .. fillett beef& mushroom sauce ', @@ -210,7 +210,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715701889899.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715701889899.png"], }, { title: 'اسموکی .. smoked beef fillet & mushrooms sauce ', @@ -221,10 +221,10 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714291822159.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714291822159.png"], }, { - title: 'خورا ک اسپانیایی.. Spain food', + title: 'خورا ک اسپانیایی.. Spain product', desc: 'فیله گوساله تفت داده شده/مرغ تفت داده شده/پیاز ژولین/فلفل دلمه ای /قارچ / کنجد ذرت/سس مخصوص سرآشپز..veal fillet/chicken/julienne onion/sweet pepper/mushroom/sesame/corn/special sauce ', price: 480000, restaurantSlug: 'zhivan', @@ -232,7 +232,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713773216671.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713773216671.png"], }, { title: 'بشقاب سبزیجات.. vegetarian dish', @@ -243,7 +243,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714293582193.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714293582193.png"], }, { title: 'دبل برگر..double burger ', @@ -254,7 +254,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714291899865.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714291899865.png"], }, { title: 'چیز برگر ..cheese burger', @@ -265,7 +265,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713706018252.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713706018252.png"], }, { title: 'برگر کلاسیک ..classic burger', @@ -276,7 +276,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715753283656.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715753283656.png"], }, { title: 'ماشروم برگر .. mushroom burgers ', @@ -287,7 +287,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715752985770.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715752985770.png"], }, { title: 'زینگر برگر .. zinger burger', @@ -298,7 +298,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713706335139.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713706335139.png"], }, { title: '5 ستاره .. star burger: beef & chicken ', @@ -309,7 +309,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714291935378.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714291935378.png"], }, { title: 'پنینی مرغ با سس پستو .. chicken pesto panini ', @@ -320,7 +320,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713779020113.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713779020113.png"], }, { title: 'پنینی بیف .. beef fillet panini', @@ -331,7 +331,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715752107592.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715752107592.png"], }, { title: 'فیلا دلفیا ..Philadelphia sandwich ', @@ -342,7 +342,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713772958621.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713772958621.png"], }, { title: 'پنینی رست بیف .. roast beef panini ', @@ -353,7 +353,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713779110050.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713779110050.png"], }, { title: 'دوتکه:(نرمال)', @@ -364,7 +364,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713707054857.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713707054857.png"], }, { title: 'سه تکه:(نرمال)', @@ -375,7 +375,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713707048869.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713707048869.png"], }, { title: 'پنج تکه:(نرمال)', @@ -386,7 +386,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713707039568.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713707039568.png"], }, { title: 'سه تکه فیله : (استریپس)', @@ -397,7 +397,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713706975656.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713706975656.png"], }, { title: 'پنج تکه فیله : (استریپس)', @@ -408,7 +408,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713706989835.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713706989835.png"], }, { title: 'ویژه کودکان', @@ -441,7 +441,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715788350856.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715788350856.png"], }, { title: 'سالاد سزار (فیله سوخار ی با دیپ چدار) .. Caesar salad/Fried chicken', @@ -452,7 +452,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713772878324.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713772878324.png"], }, { title: 'سالاد فصل .. Iranian salad ', @@ -463,7 +463,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715852971271.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715852971271.png"], }, { title: 'سیب زمینی پنیر و قارچ .. Mushroom cheese potatoes', @@ -474,7 +474,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715934773791.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715934773791.png"], }, { title: 'سیب زمینی پنیرقارچ و ژامبون', @@ -485,7 +485,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714290894911.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714290894911.png"], }, { title: 'نان سیر .. garlic bread', @@ -496,7 +496,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713773293238.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713773293238.png"], }, { title: 'میکس ناچو و فیله سوخاری', @@ -507,7 +507,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713773138383.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713773138383.png"], }, { title: 'قارچ سوخاری .. fried mushroom', @@ -518,7 +518,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715934677455.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715934677455.png"], }, { title: 'قارچ سوخاری پنیر', @@ -529,7 +529,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713773268030.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713773268030.png"], }, { title: 'لیموناد lemonade', @@ -540,7 +540,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715791954744.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715791954744.png"], }, { title: 'پشن موهیتو passion fruit ', @@ -551,7 +551,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715791769702.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715791769702.png"], }, { title: 'موهیتو کلاسیک mojito', @@ -562,7 +562,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714291977244.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714291977244.png"], }, { title: 'ردبری موهیتو redberry mojito', @@ -573,7 +573,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714293126185.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714293126185.png"], }, { title: 'بلک موهیتو black mojito', @@ -584,7 +584,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715791641400.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715791641400.png"], }, { title: 'نوشابه قوطی.. Coca-Cola/Fanta/Sprite', @@ -595,7 +595,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715806193784.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715806193784.png"], }, { title: 'ماءالشعیر قوطی.. Lemon/Peach/Cactus/Tropical/Classic', @@ -606,7 +606,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715806156688.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715806156688.png"], }, { title: 'آب معدنی.. Mineral water', @@ -617,7 +617,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715806335977.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715806335977.png"], }, { title: 'دوغ لیوانی.. Yoghurt', @@ -628,7 +628,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715806418661.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715806418661.png"], }, { title: 'ویژه ژیوان(تک نفره).. Zhivan pizza ', @@ -683,7 +683,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713706544776.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713706544776.png"], }, { title: 'اسپشیال(دو نفره).. Special ', @@ -694,7 +694,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713706534918.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713706534918.png"], }, { title: 'وایت چیکن(تک نفره).. Chicken Alfredo ', @@ -705,7 +705,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713706184032.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713706184032.png"], }, { title: 'وایت چیکن (دو نفره).. Chicken Alfredo ', @@ -716,7 +716,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713706161875.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713706161875.png"], }, { title: 'سبزیجات(تک نفره).. Vegetarian ', @@ -727,7 +727,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713773093656.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713773093656.png"], }, { title: 'سبزیجات(دو نفره).. Vegetarian ', @@ -738,7 +738,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713773039190.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713773039190.png"], }, { title: 'پپرونی ژیوان(Hot)تک نفره.. Pepperoni ', @@ -749,7 +749,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713706642707.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713706642707.png"], }, { title: 'پپرونی ژیوان(Hot)دو نفره.. Pepperoni ', @@ -760,7 +760,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713706628691.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713706628691.png"], }, { title: 'میت اند مشروم(تک نفره).. Meat & mushroom ', @@ -815,7 +815,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715854518650.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715854518650.png"], }, { title: 'دمنوش سیـــــب و دارچیـن دو نفره Apple & Cinnamon', @@ -826,7 +826,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715854419222.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715854419222.png"], }, { title: 'چای سبـز و لیمو تک نفره green tea& lemon', @@ -837,7 +837,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715854304419.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715854304419.png"], }, { title: 'جای سبز و لیمو دو نفره green tea & lemon ', @@ -848,7 +848,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715854245151.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715854245151.png"], }, { title: 'هارمونیا تک نفره harmonies ', @@ -859,7 +859,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715854093204.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715854093204.png"], }, { title: 'هارمونیا دو نفره harmonies', @@ -870,7 +870,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715854057726.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715854057726.png"], }, { title: 'اسپرســــــو دبـــــــــــل().. Double Espresso ', @@ -881,7 +881,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715711371198.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715711371198.png"], }, { title: 'آمریکانــــــــــــــو.. Americano', @@ -892,7 +892,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715711236185.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715711236185.png"], }, { title: 'مــــــــوکا(کلاسیک).. Mocha', @@ -903,7 +903,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715711203117.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715711203117.png"], }, { title: 'قهوه دمی سایفون.. Siphon coffee', @@ -914,7 +914,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715711089472.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715711089472.png"], discount: -1, }, { @@ -926,7 +926,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715711043900.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715711043900.png"], }, { title: 'شکلات داغ .. Hot Chocolate', @@ -937,7 +937,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715711005802.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715711005802.png"], }, { title: 'اسموتی استوایی tropical smoothie ', @@ -948,7 +948,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715855939026.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715855939026.png"], }, { title: ' اسموتی انبه mango smoothie ', @@ -959,7 +959,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715855856058.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715855856058.png"], }, { title: 'اسموتی اپلایم apple & lime smoothie ', @@ -970,7 +970,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715855800832.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715855800832.png"], }, { title: 'نوتلا شیک nutella miklshake', @@ -981,7 +981,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715855573768.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715855573768.png"], }, { title: 'پینات شیک peanut milkshake', @@ -992,7 +992,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715855464156.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715855464156.png"], }, { title: 'شوکو شیک chocolate milkshake', @@ -1003,7 +1003,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715855404611.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715855404611.png"], }, { title: ' آفوگاتو.. Affogato', @@ -1014,7 +1014,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715710983514.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715710983514.png"], }, { title: 'وافل نوتلا waffle nutella', @@ -1025,7 +1025,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715807218334.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715807218334.png"], }, { title: 'اسپرسو سینگل', @@ -3654,7 +3654,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729757443896.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729757443896.png"], }, { title: 'سالاد بیف', @@ -3665,7 +3665,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728303279211.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728303279211.png"], }, { title: 'سالاد سزار سوخاری', @@ -3676,7 +3676,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729758275074.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729758275074.png"], }, { title: 'سالاد سزار گریل ', @@ -3687,7 +3687,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729757571328.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729757571328.png"], }, { title: 'سیب زمینی با دیپ کافه دوپاری(new)', @@ -3698,7 +3698,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728331073193.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728331073193.png"], }, { title: 'چیکن اسپایسی(new)', @@ -3709,7 +3709,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729757914158.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729757914158.png"], }, { title: 'سوپ روز', @@ -3720,7 +3720,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729755496336.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729755496336.png"], }, { title: 'رست بیف', @@ -3731,7 +3731,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729756171799.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729756171799.png"], }, { title: 'چیکن نیویورکر', @@ -3742,7 +3742,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729756321754.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729756321754.png"], }, { title: 'اسپشیال', @@ -3753,7 +3753,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731413338758.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731413338758.png"], }, { title: 'کواترو استاجونی', @@ -3764,7 +3764,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729756471445.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729756471445.png"], }, { title: 'دیاولا (پپرونی)', @@ -3775,7 +3775,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729758594732.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729758594732.png"], }, { title: 'وردورا (سبزیجات)', @@ -3786,7 +3786,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729758629130.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729758629130.png"], }, { title: 'کواترو فور ماجی(new)', @@ -3797,7 +3797,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728330406509.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728330406509.png"], }, { title: 'سوله میو', @@ -3808,7 +3808,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729755229649.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729755229649.png"], }, { title: 'پولو', @@ -3819,7 +3819,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729756261349.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729756261349.png"], }, { title: 'سیر و استیک', @@ -3830,7 +3830,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729756530319.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729756530319.png"], }, { title: 'مارگریتا', @@ -3841,7 +3841,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729756652007.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729756652007.png"], }, { title: 'چیکن آلفردو', @@ -3852,7 +3852,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696945630526.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696945630526.png"], }, { title: 'فور چیز(new)', @@ -3863,7 +3863,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728306961819.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728306961819.png"], }, { title: 'بیف آرابیاتا(new)', @@ -3874,7 +3874,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728306836636.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728306836636.png"], }, { title: 'کته استیک', @@ -3885,7 +3885,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728330109953.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728330109953.png"], }, { title: 'کته سبزی با ماهی', @@ -3896,7 +3896,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728301711620.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728301711620.png"], }, { title: 'کباب تابه ای', @@ -3907,7 +3907,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728300683426.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728300683426.png"], }, { title: 'فیله استیک(new)', @@ -3918,7 +3918,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732099203488.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732099203488.png"], }, { title: 'چیکن استیک', @@ -3929,7 +3929,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728331458194.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728331458194.png"], }, { title: 'بیکن لاورز', @@ -3940,7 +3940,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729754952099.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729754952099.png"], }, { title: 'کلاسیک برگر', @@ -3951,7 +3951,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729758171518.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729758171518.png"], }, { title: 'اسپرسو سینگل', @@ -3962,7 +3962,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645017478067.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645017478067.png"], }, { title: 'اسپرسو دبل', @@ -3973,7 +3973,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645017517499.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645017517499.png"], }, { title: 'آمریکانو', @@ -3984,7 +3984,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645017556188.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645017556188.png"], }, { title: 'ترک دمی', @@ -3995,7 +3995,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645017579932.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645017579932.png"], }, { title: 'لته', @@ -4006,7 +4006,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645017618831.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645017618831.png"], }, { title: 'موکا', @@ -4017,7 +4017,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645017667092.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645017667092.png"], }, { title: 'کارامل ماکیاتو', @@ -4028,7 +4028,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645017705127.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645017705127.png"], }, { title: 'قهوه یونانی', @@ -4039,7 +4039,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645017753302.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645017753302.png"], }, { title: 'هات چاکلت', @@ -4050,7 +4050,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645017778152.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645017778152.png"], }, { title: 'وایت چاکلت', @@ -4061,7 +4061,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645017814380.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645017814380.png"], }, { title: 'شیر عسل دارچین', @@ -4072,7 +4072,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645017958798.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645017958798.png"], }, { title: 'سایفون ', @@ -4083,7 +4083,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645017999993.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645017999993.png"], }, { title: 'چیکن پستو(new)', @@ -4094,7 +4094,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728331220150.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728331220150.png"], }, { title: 'فرانسه', @@ -4105,7 +4105,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645018036872.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645018036872.png"], }, { title: 'آیس کافی', @@ -4116,7 +4116,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645018080298.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645018080298.png"], }, { title: 'آيس کارامل', @@ -4127,7 +4127,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645018126527.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645018126527.png"], }, { title: 'فراپاچینو', @@ -4138,7 +4138,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645018189433.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645018189433.png"], }, { title: 'هویج گلاسه', @@ -4149,7 +4149,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645018225650.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645018225650.png"], }, { title: 'آناناس گلاسه', @@ -4171,7 +4171,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645018352272.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645018352272.png"], }, { title: 'پولد بیف(new)', @@ -4182,7 +4182,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728331686617.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728331686617.png"], }, { title: 'تیرامیسو', @@ -4193,7 +4193,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729759180680.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729759180680.png"], }, { title: 'وافل', @@ -4204,7 +4204,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729756586757.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729756586757.png"], }, { title: 'بستنی مخصوص', @@ -4215,7 +4215,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729759056825.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729759056825.png"], }, { title: 'سایفون ۱ کاپ', @@ -4226,7 +4226,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728374457341.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728374457341.png"], }, { title: 'سایفون ۲ کاپ', @@ -4237,7 +4237,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728374458345.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728374458345.png"], }, { title: 'کمکس ۲ کاپ ', @@ -4248,7 +4248,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728374428131.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728374428131.png"], }, { title: 'کمکس ۴ کاپ', @@ -4259,7 +4259,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728374433041.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728374433041.png"], }, { title: 'ایروپرس', @@ -4270,7 +4270,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729759018128.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729759018128.png"], }, { title: 'وی۶۰', @@ -4281,7 +4281,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728374474365.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728374474365.png"], }, { title: 'سان شاین', @@ -4292,7 +4292,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645018390978.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645018390978.png"], }, { title: 'موهیتو', @@ -4303,7 +4303,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645018438471.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645018438471.png"], }, { title: 'آفاگاتو', @@ -4314,7 +4314,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645018483060.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645018483060.png"], }, { title: 'کاپرینا', @@ -4325,7 +4325,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645018530231.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645018530231.png"], }, { title: 'لیموناد مخصوص', @@ -4336,7 +4336,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645018603413.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645018603413.png"], }, { title: 'فروت رول', @@ -4347,7 +4347,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645018627969.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645018627969.png"], }, { title: 'واترملون', @@ -4358,7 +4358,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645018661219.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645018661219.png"], }, { title: 'چیپس و پنیر', @@ -4369,7 +4369,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645193702676.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645193702676.png"], }, { title: 'چیپس و پنیر ۲ نفره', @@ -4380,7 +4380,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645193668341.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645193668341.png"], }, { title: 'سیب زمینی', @@ -4391,7 +4391,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645193637610.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645193637610.png"], }, { title: 'سیب زمینی با پنیر', @@ -4402,7 +4402,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645193598058.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645193598058.png"], }, { title: 'سیب زمینی با پنیر دو نفره', @@ -4413,7 +4413,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645193558686.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645193558686.png"], }, { title: 'سیب زمینی ویژه', @@ -4424,7 +4424,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645193521047.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645193521047.png"], }, { title: 'سیب زمینی ویژه دو نفره', @@ -4435,7 +4435,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645193485198.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645193485198.png"], }, { title: 'سیب زمینی هات داگ', @@ -4457,7 +4457,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645193428118.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645193428118.png"], }, { title: 'شنیسل مرغ', @@ -4468,7 +4468,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645193401471.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645193401471.png"], }, { title: 'اسنک', @@ -4479,7 +4479,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645018726223.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645018726223.png"], }, { title: 'کیک شکلات', @@ -4490,7 +4490,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645018748768.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645018748768.png"], }, { title: 'توت فرنگی', @@ -4501,7 +4501,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645018704529.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645018704529.png"], }, { title: 'شاتوت', @@ -4512,7 +4512,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645193275929.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645193275929.png"], }, { title: 'سنتی', @@ -4523,7 +4523,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645193187571.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645193187571.png"], }, { title: 'شکلات', @@ -4534,7 +4534,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645193106675.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645193106675.png"], }, { title: 'مخلوط', @@ -4545,7 +4545,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645193071691.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645193071691.png"], }, { title: 'معجون', @@ -4556,7 +4556,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645193040976.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645193040976.png"], }, { title: 'بستنی ایتالیایی', @@ -4567,7 +4567,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645193010587.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645193010587.png"], }, { title: 'قهوه', @@ -4578,7 +4578,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645192964012.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645192964012.png"], }, { title: 'نوتلا', @@ -4589,7 +4589,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645192930977.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645192930977.png"], }, { title: 'وانیل', @@ -4600,7 +4600,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645192904361.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645192904361.png"], }, { title: 'شاتوت ', @@ -4611,7 +4611,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645192850800.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645192850800.png"], }, { title: 'توت فرنگی ', @@ -4622,7 +4622,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645192828049.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645192828049.png"], }, { title: 'نوتلا ', @@ -4633,7 +4633,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645192677552.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645192677552.png"], }, { title: 'شکلات ', @@ -4644,7 +4644,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645192651340.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645192651340.png"], }, { title: 'شکلات موز', @@ -4655,7 +4655,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645192568861.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645192568861.png"], }, { title: 'کارامل', @@ -4666,7 +4666,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645192541740.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645192541740.png"], }, { title: 'M&M', @@ -4677,7 +4677,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645192458431.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645192458431.png"], }, { title: 'وانیل ', @@ -4688,7 +4688,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645192380780.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645192380780.png"], }, { title: 'نارگیل', @@ -4699,7 +4699,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645192357817.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645192357817.png"], }, { title: 'بادام زمینی', @@ -4710,7 +4710,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645192328640.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645192328640.png"], }, { title: 'معجون ', @@ -4721,7 +4721,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645192304289.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645192304289.png"], }, { title: 'قهوه ', @@ -4732,7 +4732,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645192242107.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645192242107.png"], }, { title: 'دارچین', @@ -4743,7 +4743,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1645192150150.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1645192150150.png"], }, { title: 'استیک فیله مینیون', @@ -4754,7 +4754,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1674240746571.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1674240746571.png"], }, { title: 'استیک باربی کیو', @@ -4831,7 +4831,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1674240800071.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1674240800071.png"], }, { title: 'دبل برگر', @@ -4842,7 +4842,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1674240855648.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1674240855648.png"], }, { title: 'شف برگر', @@ -4853,7 +4853,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1674241006305.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1674241006305.png"], }, { title: 'کوبیده', @@ -4952,7 +4952,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1674240050149.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1674240050149.png"], }, { title: 'سالاد سزار یک رول', @@ -5117,7 +5117,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1674240678726.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1674240678726.png"], }, { title: 'اسپیشیال(large)', @@ -5271,7 +5271,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1674240292136.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1674240292136.png"], }, { title: 'فورسیزن (large)', @@ -5282,7 +5282,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1674240090739.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1674240090739.png"], }, { title: 'پنه چیکن آلفردو', @@ -5293,7 +5293,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1674240144984.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1674240144984.png"], }, { title: 'پنه پستو', @@ -5326,7 +5326,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1674240174016.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1674240174016.png"], }, { title: 'پنه بیف آلفردو', @@ -5370,7 +5370,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1650113391211.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1650113391211.png"], }, { title: ' ریسترتو اسپشیال', @@ -5381,7 +5381,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1650113429909.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1650113429909.png"], }, { title: 'اسپرسو کامرشیال', @@ -5392,7 +5392,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649615265281.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649615265281.png"], }, { title: 'اسپرسو اسپشیال', @@ -5403,7 +5403,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649615208910.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649615208910.png"], }, { title: 'لونگو کامرشیال', @@ -5414,7 +5414,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1650113477508.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1650113477508.png"], }, { title: 'لونگو اسپشیال', @@ -5425,7 +5425,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1650113526078.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1650113526078.png"], }, { title: 'اسپرسو کومپانو', @@ -5436,7 +5436,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649615098733.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649615098733.png"], }, { title: 'اسپرسو پیکولو', @@ -5447,7 +5447,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649615060222.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649615060222.png"], }, { title: 'مگنوم پرسو', @@ -5480,7 +5480,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649614627379.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649614627379.png"], }, { title: ' آمریکانو اسپشیال', @@ -5491,7 +5491,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649614589917.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649614589917.png"], }, { title: 'فلت وایت', @@ -5502,7 +5502,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649614568101.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649614568101.png"], }, { title: 'کاپوچینو', @@ -5513,7 +5513,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649614545113.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649614545113.png"], }, { title: 'لاته', @@ -5524,7 +5524,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649614515360.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649614515360.png"], }, { title: 'لاته + سیروپ(کارامل ، فندوق ، وانیل)', @@ -5535,7 +5535,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649614477212.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649614477212.png"], }, { title: 'کوکی لاته', @@ -5557,7 +5557,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649614316580.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649614316580.png"], }, { title: 'چاکلت کوکی لاته', @@ -5579,7 +5579,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649614283859.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649614283859.png"], }, { title: 'لاته کارامل نمکی', @@ -5590,7 +5590,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649614243191.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649614243191.png"], }, { title: 'موکا فندوقی', @@ -5601,7 +5601,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649613980682.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649613980682.png"], }, { title: 'پن شکلات', @@ -5612,7 +5612,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649613901192.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649613901192.png"], }, { title: 'کروسان ساده', @@ -5623,7 +5623,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649613856633.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649613856633.png"], }, { title: 'کروسان بادام', @@ -5634,7 +5634,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649613797467.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649613797467.png"], }, { title: 'هات چاکلت', @@ -5645,7 +5645,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649613765932.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649613765932.png"], }, { title: 'وایت چاکلت', @@ -5656,7 +5656,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649613723673.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649613723673.png"], }, { title: 'مارشمالو چاکلت', @@ -5667,7 +5667,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649613702548.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649613702548.png"], }, { title: 'ماسالا', @@ -5678,7 +5678,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649613676302.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649613676302.png"], }, { title: 'سیگنیچر شکر سیاه', @@ -5700,7 +5700,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649613589300.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649613589300.png"], }, { title: 'نیتروژن کافی', @@ -5722,7 +5722,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649613510872.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649613510872.png"], }, { title: 'آیس لاته', @@ -5733,7 +5733,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649613478658.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649613478658.png"], }, { title: 'آیس لاته+ سیروپ', @@ -5744,7 +5744,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649613453945.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649613453945.png"], }, { title: 'سیگنیچر شکر سیاه ', @@ -5766,7 +5766,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649613422061.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649613422061.png"], }, { title: 'جینا', @@ -5777,7 +5777,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649613398668.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649613398668.png"], }, { title: 'کمکس', @@ -5788,7 +5788,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649613372112.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649613372112.png"], }, { title: 'فرنچ پرس', @@ -5799,7 +5799,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1649613348050.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1649613348050.png"], }, { title: 'فلت وایت %100', @@ -5876,7 +5876,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1674240260019.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1674240260019.png"], }, { title: 'اسکوپ بستنی', @@ -7702,7 +7702,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729758618404.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729758618404.png"], }, { title: 'اسپرسو دبل', @@ -7768,7 +7768,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728330951188.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728330951188.png"], }, { title: 'باربیکیو وینگز(new)', @@ -7779,7 +7779,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728330940826.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728330940826.png"], }, { title: 'قارچ سوخاری(new)', @@ -7790,7 +7790,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729757626041.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729757626041.png"], }, { title: 'دوسیب ، البالو ، ادامس دارچین ، موهیتو ، انبه ، سیب یخ ، هندوانه نعنا ، بلوبری ، پرتغال خامه ، آلو یخ ، نعنا ، طالبی ، پاستیل ، کیس می ، شاتوت بستنی ، کاپتان بلک ، ', @@ -8032,7 +8032,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729758313692.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729758313692.png"], }, { title: 'سیب کلاسیک', @@ -8054,7 +8054,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729758014480.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729758014480.png"], }, { title: 'کباب مخصوص سعادت', @@ -9363,7 +9363,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729757064050.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729757064050.png"], }, { title: 'بوته اسپشیال', @@ -9374,7 +9374,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1765281838221.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1765281838221.png"], }, { title: 'اراک برک', @@ -9385,7 +9385,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1761678002013.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1761678002013.png"], }, { title: 'لیمون کوکو', @@ -9418,7 +9418,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1659522888259.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1659522888259.png"], }, { title: 'پیتزا پپرونی', @@ -9440,7 +9440,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728330592819.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728330592819.png"], }, { title: 'چیکن آلفردو', @@ -9451,7 +9451,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1663567920922.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1663567920922.png"], }, { title: 'وا فل', @@ -9462,7 +9462,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729758734918.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729758734918.png"], }, { title: 'پنکیک', @@ -9473,7 +9473,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729756930760.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729756930760.png"], }, { title: 'کاتانیا', @@ -9484,7 +9484,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729756502136.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729756502136.png"], }, { title: 'سالاد مرغ و گردو', @@ -9495,7 +9495,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729757913755.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729757913755.png"], }, { title: 'شف برگر (امضای ژیوان).. burger chef', @@ -9506,7 +9506,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713706844133.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713706844133.png"], }, { title: 'پنینی مرغ', @@ -9517,7 +9517,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1662297483531.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1662297483531.png"], }, { title: 'پنینی هات داگ اسپشیال', @@ -9528,7 +9528,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1662297660322.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1662297660322.png"], }, { title: 'آویشن', @@ -9550,7 +9550,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728331212413.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728331212413.png"], }, { title: 'شیرنسکافه', @@ -9583,7 +9583,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715855188287.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715855188287.png"], }, { title: 'اورئو شیک oreo milkshake', @@ -9594,7 +9594,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715854766909.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715854766909.png"], }, { title: 'کورتادو Cortado', @@ -9605,7 +9605,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715710960967.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715710960967.png"], }, { title: 'موهیتو میکس mixed mojito', @@ -9616,7 +9616,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714293251086.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714293251086.png"], }, { title: 'اسپرسو', @@ -9627,7 +9627,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1670941019217.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1670941019217.png"], }, { title: 'آمریکانو', @@ -9638,7 +9638,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1670941158643.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1670941158643.png"], }, { title: 'کورتادو', @@ -9649,7 +9649,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1670941278888.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1670941278888.png"], }, { title: 'لاته', @@ -9660,7 +9660,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1670941383289.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1670941383289.png"], }, { title: 'هات چاکلت', @@ -9671,7 +9671,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1683374090799.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1683374090799.png"], }, { title: 'ماسالا ', @@ -9682,7 +9682,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1670943585434.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1670943585434.png"], }, { title: 'کیک روز', @@ -9693,7 +9693,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1671205548041.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1671205548041.png"], }, { title: 'وافل', @@ -9704,7 +9704,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1671206028714.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1671206028714.png"], }, { title: 'سیب زمینی چدار', @@ -9715,7 +9715,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1674117429783.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1674117429783.png"], }, { title: 'کاپوچینو', @@ -9726,7 +9726,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1683373474894.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1683373474894.png"], }, { title: 'کمکس', @@ -9737,7 +9737,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1674317833311.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1674317833311.png"], }, { title: 'سایفون', @@ -9748,7 +9748,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1674318031385.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1674318031385.png"], }, { title: 'V 60', @@ -9759,7 +9759,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1674318145146.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1674318145146.png"], }, { title: 'ایروپرس', @@ -9770,7 +9770,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1683374626803.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1683374626803.png"], }, { title: 'ترک', @@ -9781,7 +9781,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1674318357015.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1674318357015.png"], }, { title: 'پشن لاین', @@ -9858,7 +9858,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728330530614.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728330530614.png"], }, { title: 'چیز فرایز لارج', @@ -9891,7 +9891,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1681745992648.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1681745992648.png"], }, { title: 'پیتزا مارگاریتا', @@ -9902,7 +9902,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1681746130413.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1681746130413.png"], }, { title: 'شیک بادام زمینی', @@ -9913,7 +9913,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1683377587080.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1683377587080.png"], }, { title: 'سیب زمینی سرخ شده', @@ -9924,7 +9924,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715934532096.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715934532096.png"], }, { title: 'برگر آجیلی سپنج', @@ -10650,7 +10650,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695805575659.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695805575659.png"], }, { title: 'اسپرسو عربیکا ', @@ -10661,7 +10661,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695805517940.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695805517940.png"], }, { title: 'آمریکانو گرم', @@ -10672,7 +10672,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695288603043.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695288603043.png"], }, { title: 'کارامل ماکیاتو گرم', @@ -10683,7 +10683,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695287233293.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695287233293.png"], }, { title: 'موکا گرم', @@ -10694,7 +10694,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695287143843.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695287143843.png"], }, { title: 'هات چاکلت ', @@ -10705,7 +10705,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695287057123.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695287057123.png"], }, { title: 'شیر گرم', @@ -10716,7 +10716,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695286705042.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695286705042.png"], }, { title: 'شیر زردچوبه ', @@ -10727,7 +10727,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695286602239.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695286602239.png"], }, { title: 'ماسالا گرم', @@ -10738,7 +10738,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695286309005.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695286309005.png"], }, { title: 'چای سیاه', @@ -10749,7 +10749,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733426880348.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733426880348.png"], }, { title: 'چای سبز', @@ -10760,7 +10760,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695285898103.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695285898103.png"], }, { title: 'چای آویشن', @@ -10771,7 +10771,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695285962920.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695285962920.png"], }, { title: 'چای گل گاوزبان', @@ -10782,7 +10782,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695286023471.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695286023471.png"], }, { title: 'چای ترش ', @@ -10793,7 +10793,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695286204867.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695286204867.png"], }, { title: 'آمریکانو سرد', @@ -10804,7 +10804,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695285667290.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695285667290.png"], }, { title: 'کاپوچینو سرد ', @@ -10815,7 +10815,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695285589063.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695285589063.png"], }, { title: 'آیس کارامل ماکیاتو ', @@ -10826,7 +10826,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695285486443.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695285486443.png"], }, { title: 'موکا سرد ', @@ -10837,7 +10837,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695285373905.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695285373905.png"], }, { title: 'آیس چاکلت ', @@ -10848,7 +10848,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695285086684.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695285086684.png"], }, { title: 'سیروپ اضافه ', @@ -10859,7 +10859,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733343050554.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733343050554.png"], }, { title: 'کیک هویج و گردو روز ', @@ -10870,7 +10870,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733345313635.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733345313635.png"], }, { title: 'اسپرسو ماکیاتو', @@ -10881,7 +10881,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1683373207313.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1683373207313.png"], }, { title: 'موکا', @@ -10892,7 +10892,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1683373800924.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1683373800924.png"], }, { title: 'آفوگاتو + گرانولا', @@ -10903,7 +10903,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696438010688.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696438010688.png"], }, { title: 'فرنچ پرس', @@ -10914,7 +10914,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1683374733936.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1683374733936.png"], }, { title: 'فراپه لاوندر', @@ -10925,7 +10925,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1683376449033.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1683376449033.png"], }, { title: 'فراپه افرا ', @@ -10936,7 +10936,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1683376900135.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1683376900135.png"], }, { title: 'موهیتو ', @@ -10947,7 +10947,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1683378984433.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1683378984433.png"], }, { title: 'لیموناد اسپرسو ', @@ -10958,7 +10958,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1683379091941.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1683379091941.png"], }, { title: 'چای و نبات', @@ -10969,7 +10969,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1683399387668.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1683399387668.png"], }, { title: 'گل گاوزبان', @@ -10980,7 +10980,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1683399523608.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1683399523608.png"], }, { title: 'به لیمو و آویشن', @@ -10991,7 +10991,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1683399598375.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1683399598375.png"], }, { title: 'دمنوش ترش و عسل', @@ -11002,7 +11002,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1683399710195.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1683399710195.png"], }, { title: 'اسپرسو 50٪', @@ -12938,7 +12938,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713707131956.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713707131956.png"], }, { title: 'آیس چاکلت ', @@ -12960,7 +12960,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1686422430315.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1686422430315.png"], }, { title: 'آیس لته', @@ -12971,7 +12971,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1686422578987.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1686422578987.png"], }, { title: 'مت سلامی.. Salami', @@ -12982,7 +12982,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713772598492.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713772598492.png"], }, { title: 'دنر میکس .. doner kebab sandwich ', @@ -12993,7 +12993,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713772562102.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713772562102.png"], }, { title: 'مک اند چیز .. Mac & cheese', @@ -13004,7 +13004,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715787937416.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715787937416.png"], }, { title: 'دنر میکس(تک نفره).. Mixed doner ', @@ -13015,7 +13015,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713772515977.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713772515977.png"], }, { title: 'دنر میکس(دونفره).. Mixed doner', @@ -13026,7 +13026,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713771713173.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713771713173.png"], }, { title: 'چای سیاه(تک نفره) black tea', @@ -13037,7 +13037,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715853902968.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715853902968.png"], }, { title: 'چای سیاه(دونفره) black tea', @@ -13048,7 +13048,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715853712320.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715853712320.png"], }, { title: 'چای سیاه زعفرانی (تک نفره) saffron tea', @@ -13059,7 +13059,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715853866749.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715853866749.png"], }, { title: 'چای سیاه زعفرانی(دونفره) saffron tea', @@ -13070,7 +13070,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715853587100.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715853587100.png"], }, { title: 'لاته.. Latte ', @@ -13081,7 +13081,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715710811427.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715710811427.png"], }, { title: 'آیس آمریکانو .. ice Americano ', @@ -13092,7 +13092,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715714615956.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715714615956.png"], }, { title: 'آیس موکا ..ice mocha', @@ -13103,7 +13103,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715714518406.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715714518406.png"], }, { title: 'آیس لاته .. ice latte ', @@ -13114,7 +13114,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715714441403.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715714441403.png"], }, { title: 'پاستا چیکن آلفردو', @@ -13125,7 +13125,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1689254831099.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1689254831099.png"], }, { title: 'پاستا بیف آلفردو', @@ -13136,7 +13136,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1689255132686.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1689255132686.png"], }, { title: 'پاستا بلونز', @@ -13147,7 +13147,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696432291066.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696432291066.png"], }, { title: 'نان سیر', @@ -13158,7 +13158,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1689259303799.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1689259303799.png"], }, { title: 'سالاد سزار و مرغ گریل', @@ -13169,7 +13169,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1689259719810.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1689259719810.png"], }, { title: 'سالاد سزار با مرغ گریل', @@ -14390,7 +14390,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1692637912175.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1692637912175.png"], }, { title: 'وایت فرایز White fries', @@ -14401,7 +14401,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1692635556395.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1692635556395.png"], }, { title: 'یامی برگر', @@ -14412,7 +14412,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222298625.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222298625.png"], }, { title: 'یامی اسپشیال', @@ -14423,7 +14423,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733221989785.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733221989785.png"], }, { title: 'چیز برگر', @@ -14434,7 +14434,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222342056.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222342056.png"], }, { title: 'ماشروم برگر', @@ -14445,7 +14445,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222376578.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222376578.png"], }, { title: 'چوریتسو برگر', @@ -14456,7 +14456,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1699784885688.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1699784885688.png"], }, { title: 'آمریکن برگر', @@ -14467,7 +14467,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222439998.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222439998.png"], }, { title: 'هالوپینو برگر(تند)', @@ -14478,7 +14478,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222055490.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222055490.png"], }, { title: 'کلاسیک برگر', @@ -14489,7 +14489,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222495307.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222495307.png"], }, { title: 'چیکن برگر', @@ -14500,7 +14500,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222208247.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222208247.png"], }, { title: 'دبل برگر', @@ -14511,7 +14511,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222558661.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222558661.png"], }, { title: 'دبل چیز برگر', @@ -14522,7 +14522,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222616471.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222616471.png"], }, { title: 'دبل چیز اسپشیال', @@ -14533,7 +14533,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1699785752276.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1699785752276.png"], }, { title: 'یامی چیکن', @@ -14544,7 +14544,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222265811.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222265811.png"], }, { title: 'تریپل برگر', @@ -14555,7 +14555,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222694715.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222694715.png"], }, { title: 'میکس تریپل', @@ -14566,7 +14566,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222144761.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222144761.png"], }, { title: 'سالاد سزار', @@ -14577,7 +14577,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222826703.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222826703.png"], }, { title: 'سالاد یامی', @@ -14588,7 +14588,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222864377.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222864377.png"], }, { title: 'فرنچ فرایز', @@ -14599,7 +14599,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1699784947500.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1699784947500.png"], }, { title: 'قهوه ترک', @@ -15281,7 +15281,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733223584119.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733223584119.png"], }, { title: 'پپرونی', @@ -15292,7 +15292,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733221872848.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733221872848.png"], }, { title: 'میت ژامبون', @@ -15303,7 +15303,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733221914467.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733221914467.png"], }, { title: 'پیده(مخصوص یامی)', @@ -15314,7 +15314,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1699784972822.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1699784972822.png"], }, { title: 'چیکن پستو', @@ -15325,7 +15325,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1699785036611.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1699785036611.png"], }, { title: 'لیموناد طبیعی', @@ -15336,7 +15336,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222964994.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222964994.png"], }, { title: 'موهیتو طبیعی', @@ -15347,7 +15347,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222984965.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222984965.png"], }, { title: 'دلستر قوطی', @@ -15358,7 +15358,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733223033671.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733223033671.png"], }, { title: 'نوشابه قوطی', @@ -15369,7 +15369,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733223011213.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733223011213.png"], }, { title: 'دلستر خانواده', @@ -15380,7 +15380,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733223060511.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733223060511.png"], }, { title: 'آب معدنی', @@ -15391,7 +15391,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733223199180.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733223199180.png"], }, { title: 'شیک لوتوس', @@ -15611,7 +15611,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715934447089.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715934447089.png"], }, { title: 'سیب زمینی با دیپ چدار و بیکن(new)', @@ -15622,7 +15622,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728330958600.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728330958600.png"], }, { title: 'لاته', @@ -15633,7 +15633,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695288832011.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695288832011.png"], }, { title: 'کاپوچینو ', @@ -15644,7 +15644,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695289099887.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695289099887.png"], }, { title: 'لاته سرد', @@ -15655,7 +15655,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695805895784.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695805895784.png"], }, { title: 'ماسالا سرد', @@ -15666,7 +15666,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695806144076.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695806144076.png"], }, { title: 'کافی ژلاتو', @@ -15677,7 +15677,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695807888134.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695807888134.png"], }, { title: 'کاپاچیلو', @@ -15688,7 +15688,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695808108259.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695808108259.png"], }, { title: 'کارامل کاپاچیلو سرد', @@ -15699,7 +15699,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695808700457.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695808700457.png"], }, { title: 'موکاچیلو ', @@ -15710,7 +15710,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1695915741217.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1695915741217.png"], }, { title: 'چیکن آلفردو', @@ -15721,7 +15721,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700505401539.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700505401539.png"], }, { title: 'کلاسیک فرایز', @@ -15732,7 +15732,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697470183400.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697470183400.png"], }, { title: 'وگاس فرایز', @@ -15743,7 +15743,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697470153246.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697470153246.png"], }, { title: 'وایت فرایز', @@ -15754,7 +15754,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697470087842.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697470087842.png"], }, { title: 'چیز فرایز', @@ -15765,7 +15765,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697470068926.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697470068926.png"], }, { title: 'داینامیت شریمپ', @@ -15776,7 +15776,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700064997776.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700064997776.png"], }, { title: 'اورینتال چیکن', @@ -15787,7 +15787,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697470045975.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697470045975.png"], }, { title: 'سوپ روز', @@ -15798,7 +15798,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700503529696.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700503529696.png"], }, { title: 'کته استیک', @@ -15809,7 +15809,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1705685449063.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1705685449063.png"], }, { title: 'جوجه کباب زعفرانی ', @@ -15820,7 +15820,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700418953476.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700418953476.png"], }, { title: 'ته چین مرغ شیرازی', @@ -15831,7 +15831,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700418905745.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700418905745.png"], }, { title: 'ته چین گوشت ', @@ -15842,7 +15842,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700418859025.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700418859025.png"], }, { title: 'فسنجان عیانی', @@ -15853,7 +15853,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700418787599.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700418787599.png"], }, { title: 'خوراک قزل آلا', @@ -15864,7 +15864,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700506766244.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700506766244.png"], }, { title: 'فراید شریمپ', @@ -15875,7 +15875,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1711381169606.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1711381169606.png"], }, { title: 'بیف آلفردو ', @@ -15886,7 +15886,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1709920205103.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1709920205103.png"], }, { title: 'فتوچینی پستو', @@ -15897,7 +15897,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700505314228.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700505314228.png"], }, { title: 'اوشن اسپایسی', @@ -15908,7 +15908,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1711381126223.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1711381126223.png"], }, { title: 'پوتانسکا', @@ -15919,7 +15919,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1711381107855.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1711381107855.png"], }, { title: 'لازانیا ', @@ -15930,7 +15930,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700065921952.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700065921952.png"], }, { title: 'کلاسیک برگر', @@ -15941,7 +15941,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700064676261.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700064676261.png"], }, { title: 'هاوایی برگر', @@ -15952,7 +15952,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700064706052.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700064706052.png"], }, { title: 'هانی بیف', @@ -15963,7 +15963,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700579878511.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700579878511.png"], }, { title: 'ماریا برگر', @@ -15974,7 +15974,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700579834554.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700579834554.png"], }, { title: 'بلک اند بلو', @@ -15985,7 +15985,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1711380975664.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1711380975664.png"], }, { title: 'فراید چیکن', @@ -15996,7 +15996,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700579747065.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700579747065.png"], }, { title: 'سس دست ساز BBQ', @@ -16007,7 +16007,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1711381413862.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1711381413862.png"], }, { title: 'دیپ گودا', @@ -16018,7 +16018,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1711381392297.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1711381392297.png"], }, { title: 'سس بلوچیز', @@ -16029,7 +16029,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1711381375392.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1711381375392.png"], }, { title: 'سس آووکادو ', @@ -16040,7 +16040,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1711392780130.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1711392780130.png"], }, { title: 'سس قارچ', @@ -16051,7 +16051,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1711392409168.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1711392409168.png"], }, { title: 'سالاد سزار با مرغ گریل', @@ -16073,7 +16073,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700064850761.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700064850761.png"], }, { title: 'سالاد لانکا', @@ -16084,7 +16084,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1709920706028.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1709920706028.png"], }, { title: 'سالاد هالومی بیکن', @@ -16095,7 +16095,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700064817754.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700064817754.png"], }, { title: 'سالاد آسیایی', @@ -16106,7 +16106,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700506184020.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700506184020.png"], }, { title: 'استیک فیله مینیون', @@ -16117,7 +16117,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1711381090415.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1711381090415.png"], }, { title: 'استیک لانکا', @@ -16128,7 +16128,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1709920062622.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1709920062622.png"], }, { title: 'لمب استیک ', @@ -16139,7 +16139,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1711381067217.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1711381067217.png"], }, { title: 'سورف اند تورف', @@ -16150,7 +16150,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1711381042187.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1711381042187.png"], }, { title: 'چیکن استیک', @@ -16161,7 +16161,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1711381020688.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1711381020688.png"], }, { title: 'دل کاپو', @@ -16172,7 +16172,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700504370110.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700504370110.png"], }, { title: 'چیکن جنوا', @@ -16183,7 +16183,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700065708184.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700065708184.png"], }, { title: 'دیاوولا(پپرونی)', @@ -16194,7 +16194,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1705681791453.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1705681791453.png"], }, { title: 'موکاورده', @@ -16205,7 +16205,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700065792298.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700065792298.png"], }, { title: 'سالاد مرغ کاریCurry chicken salad', @@ -16216,7 +16216,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696430012307.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696430012307.png"], }, { title: 'سالاد گرین green salad', @@ -16227,7 +16227,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696430495660.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696430495660.png"], }, { title: 'چیز برگر', @@ -16238,7 +16238,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696435374474.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696435374474.png"], }, { title: 'چیکن برگر ', @@ -16249,7 +16249,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696435891017.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696435891017.png"], }, { title: 'لیموناد', @@ -16260,7 +16260,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696439347250.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696439347250.png"], }, { title: 'مینت چاکلت', @@ -16271,7 +16271,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696440035125.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696440035125.png"], }, { title: 'چای سبز و نعنا', @@ -16282,7 +16282,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696442765180.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696442765180.png"], }, { title: 'دمنوش کوهی', @@ -16293,7 +16293,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696442921555.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696442921555.png"], }, { title: 'شیک منگو دریم ', @@ -16304,7 +16304,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696444988115.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696444988115.png"], }, { title: 'چیز شیک ', @@ -16315,7 +16315,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696445529672.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696445529672.png"], }, { title: 'شیک اورئو ', @@ -16326,7 +16326,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696445850261.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696445850261.png"], }, { title: 'لاوندر', @@ -16337,7 +16337,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696446980423.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696446980423.png"], }, { title: 'وینو', @@ -16348,7 +16348,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696447312768.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696447312768.png"], }, { title: 'اس تی بلک', @@ -16359,7 +16359,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696447665612.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696447665612.png"], }, { title: 'فیزی بلک', @@ -16370,7 +16370,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696447800091.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696447800091.png"], }, { title: 'love', @@ -16381,7 +16381,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696448428513.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696448428513.png"], }, { title: 'لیدی کیلر', @@ -16392,7 +16392,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696448494533.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696448494533.png"], }, { title: 'آدامس دارچین', @@ -16403,7 +16403,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696448567661.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696448567661.png"], }, { title: 'سیب یخ', @@ -16414,7 +16414,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696448599521.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696448599521.png"], }, { title: 'آلو یخ', @@ -16425,7 +16425,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696448628354.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696448628354.png"], }, { title: 'هندوانه نعنا', @@ -16436,7 +16436,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1696448896830.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1696448896830.png"], }, { title: 'مارگریتا', @@ -16447,7 +16447,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728639153521.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728639153521.png"], }, { title: 'اسپرسو ', @@ -16458,7 +16458,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697923414665.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697923414665.png"], }, { title: 'اسپرسو70/30', @@ -16469,7 +16469,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697923462054.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697923462054.png"], }, { title: 'امریکانو', @@ -16480,7 +16480,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697923497768.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697923497768.png"], discount: 1, }, { @@ -16492,7 +16492,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697997795070.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697997795070.png"], }, { title: 'کاپوچینو', @@ -16503,7 +16503,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697923705360.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697923705360.png"], }, { title: 'لاته', @@ -16514,7 +16514,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697923748826.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697923748826.png"], }, { title: 'موکا', @@ -16525,7 +16525,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697923777904.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697923777904.png"], }, { title: 'ماست موسیر', @@ -16536,7 +16536,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700503768714.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700503768714.png"], }, { title: 'بورانی بادمجان', @@ -16547,7 +16547,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700503897293.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700503897293.png"], }, { title: 'ماست و خیار', @@ -16558,7 +16558,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700503854385.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700503854385.png"], }, { title: 'زیتون پرورده', @@ -16569,7 +16569,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700503801658.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700503801658.png"], }, { title: 'هات چاکلت', @@ -16580,7 +16580,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1699531171893.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1699531171893.png"], }, { title: 'وایت چاکلت', @@ -16591,7 +16591,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1699531024668.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1699531024668.png"], }, { title: 'چای ماسالا', @@ -16602,7 +16602,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1699530957021.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1699530957021.png"], }, { title: 'هات لوتوس', @@ -16613,7 +16613,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697997963811.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697997963811.png"], }, { title: 'شیر کارامل دارچین', @@ -16624,7 +16624,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697997918424.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697997918424.png"], }, { title: 'ایس امریکانو', @@ -16635,7 +16635,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700505148529.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700505148529.png"], }, { title: 'ایس لاته', @@ -16646,7 +16646,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700505066167.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700505066167.png"], }, { title: 'ایس کوکی لاته', @@ -16657,7 +16657,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700505009799.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700505009799.png"], }, { title: 'ایس پاپکورن لاته', @@ -16668,7 +16668,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700504953778.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700504953778.png"], }, { title: 'ایس کارامل ماکیاتو', @@ -16679,7 +16679,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700504882868.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700504882868.png"], }, { title: 'ایس کوکو لاته', @@ -16690,7 +16690,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700504694051.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700504694051.png"], }, { title: 'لوتوس باتر', @@ -16701,7 +16701,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697995109260.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697995109260.png"], }, { title: 'لایف چاکلت', @@ -16712,7 +16712,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697998248760.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697998248760.png"], }, { title: 'پینات باتر', @@ -16723,7 +16723,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697999716171.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697999716171.png"], }, { title: 'لیموناد', @@ -16734,7 +16734,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697998467799.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697998467799.png"], }, { title: 'ویرجین موهیتو', @@ -16745,7 +16745,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697998418915.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697998418915.png"], }, { title: 'چیز کیک لوتوس', @@ -16756,7 +16756,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1734024510493.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1734024510493.png"], }, { title: 'فیله استریپس 3 تیکه ', @@ -16767,7 +16767,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697469906857.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697469906857.png"], }, { title: 'فراید پلیت ', @@ -16778,7 +16778,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1705682276880.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1705682276880.png"], }, { title: 'بوفالو وینگز', @@ -16789,7 +16789,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697469854714.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697469854714.png"], }, { title: 'فیله استریپس 5تیکه', @@ -16800,7 +16800,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697469825117.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697469825117.png"], }, { title: 'چای سیاه', @@ -16811,7 +16811,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1734024149641.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1734024149641.png"], }, { title: 'چای سیاه 2 نفره', @@ -16822,7 +16822,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697923912214.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697923912214.png"], }, { title: 'چای سیاه 4نفره', @@ -16833,7 +16833,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697923944307.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697923944307.png"], }, { title: 'اقیانوس آبی ', @@ -16844,7 +16844,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1734023335326.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1734023335326.png"], }, { title: 'دمنوش بعد از شام', @@ -16855,7 +16855,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1734023260428.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1734023260428.png"], }, { title: 'اکسترا فیله ', @@ -16866,7 +16866,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697469803784.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697469803784.png"], }, { title: 'پولد بیف ', @@ -16877,7 +16877,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1705682387141.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1705682387141.png"], }, { title: 'اسپرسو عربیکا', @@ -16888,7 +16888,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701607992109.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701607992109.png"], }, { title: 'بلو اوشن', @@ -16899,7 +16899,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697996464397.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697996464397.png"], }, { title: 'لانکا بری', @@ -16910,7 +16910,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697998762565.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697998762565.png"], }, { title: 'بلک ویدو', @@ -16921,7 +16921,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697998657211.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697998657211.png"], }, { title: 'چیلی فلاور', @@ -16932,7 +16932,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697993972425.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697993972425.png"], }, { title: 'بیتر آلموند ', @@ -16943,7 +16943,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1697923853450.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1697923853450.png"], }, { title: 'اسپرسو 50-50', @@ -16954,7 +16954,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701608031535.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701608031535.png"], }, { title: 'ربوستا دوپیو ربوستا', @@ -16965,7 +16965,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701608129536.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701608129536.png"], }, { title: 'V 60', @@ -16976,7 +16976,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701608093471.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701608093471.png"], }, { title: 'ماسالا اسپرسو', @@ -16987,7 +16987,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701607738884.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701607738884.png"], }, { title: 'هات چاکلت', @@ -16998,7 +16998,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700662718913.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700662718913.png"], }, { title: 'هات چاکلت فندوقی', @@ -17009,7 +17009,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701607453105.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701607453105.png"], }, { title: 'ماسالا', @@ -17020,7 +17020,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701607360495.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701607360495.png"], }, { title: 'وایت چاکلت', @@ -17031,7 +17031,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701608212804.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701608212804.png"], }, { title: 'شیر فندوق', @@ -17064,7 +17064,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701608264002.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701608264002.png"], }, { title: 'آیس آمریکانو ربوستا', @@ -17075,7 +17075,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701606499539.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701606499539.png"], }, { title: 'آیس موکا', @@ -17086,7 +17086,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701606450996.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701606450996.png"], }, { title: 'آیس لیان', @@ -17097,7 +17097,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701605340716.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701605340716.png"], }, { title: 'موز شکلات', @@ -17108,7 +17108,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701606038603.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701606038603.png"], }, { title: 'بادام زمینی', @@ -17119,7 +17119,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701605978968.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701605978968.png"], }, { title: 'نوتلا توییکس', @@ -17130,7 +17130,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701605889766.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701605889766.png"], }, { title: ' اسپرسو', @@ -17141,7 +17141,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701605808978.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701605808978.png"], }, { title: 'چای سیاه', @@ -17163,7 +17163,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701604795540.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701604795540.png"], }, { title: 'مدیترانه', @@ -17174,7 +17174,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701608482959.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701608482959.png"], }, { title: 'آیس لاته', @@ -17185,7 +17185,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1725301291531.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1725301291531.png"], }, { title: 'سیب سرخ کرده', @@ -17251,7 +17251,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1705685420900.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1705685420900.png"], }, { title: 'قهوه ترک', @@ -17262,7 +17262,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1744480231161.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1744480231161.png"], }, { title: 'V-60', @@ -17273,7 +17273,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1711380844317.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1711380844317.png"], }, { title: 'هات داگ اسپشیال', @@ -17284,7 +17284,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733223422595.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733223422595.png"], }, { title: 'میت لاورز ', @@ -17295,7 +17295,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733221743797.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733221743797.png"], }, { title: 'میکس تو', @@ -17306,7 +17306,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733221726935.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733221726935.png"], }, { title: 'جگر گوسفندی ', @@ -17317,7 +17317,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700257580271.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700257580271.png"], }, { title: 'دل گوسفندی', @@ -17328,7 +17328,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700291221757.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700291221757.png"], }, { title: 'قلوه گوسفندی', @@ -17350,7 +17350,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700310947996.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700310947996.png"], }, { title: 'چنجه ', @@ -17372,7 +17372,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700311095564.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700311095564.png"], }, { title: 'قلوه شکاری', @@ -17416,7 +17416,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700311451584.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700311451584.png"], }, { title: 'دل گوساله', @@ -17482,7 +17482,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700312385716.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700312385716.png"], }, { title: 'کباب کوبیده ممتاز', @@ -17515,7 +17515,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700312935278.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700312935278.png"], }, { title: 'جوجه مکزیکی', @@ -17526,7 +17526,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700313100271.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700313100271.png"], }, { title: 'جوجه ترش مخصوص ', @@ -17537,7 +17537,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700313261875.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700313261875.png"], }, { title: 'کتف و بال زعفرانی ', @@ -17548,7 +17548,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700313401274.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700313401274.png"], }, { title: 'کتف و بال ترش ', @@ -17603,7 +17603,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700313994866.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700313994866.png"], }, { title: 'قارچ کبابی طعم دار', @@ -17614,7 +17614,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700314072117.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700314072117.png"], }, { title: 'لیوان دوغ محلی', @@ -17625,7 +17625,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700320142532.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700320142532.png"], }, { title: 'کوکا قوطی ', @@ -17746,7 +17746,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700320798249.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700320798249.png"], }, { title: 'لیموناد', @@ -17757,7 +17757,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700320859207.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700320859207.png"], }, { title: 'چایی تک نفره و باقلوا', @@ -17768,7 +17768,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700321026241.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700321026241.png"], }, { title: 'سرویس چایی و باقلوا ', @@ -17779,7 +17779,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1700321087269.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1700321087269.png"], }, { title: 'چایی ماچا', @@ -18010,7 +18010,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701533184098.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701533184098.png"], }, { title: 'رول بادمجان و گوجه ', @@ -18021,7 +18021,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701533325745.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701533325745.png"], }, { title: 'پیده پپرونی', @@ -18032,7 +18032,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701534131794.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701534131794.png"], }, { title: 'پیده سبزیجات ', @@ -18043,7 +18043,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701534236314.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701534236314.png"], }, { title: 'پیده اسفناج و تخم مرغ', @@ -18054,7 +18054,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1701534392361.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1701534392361.png"], }, { title: 'ماشروم برگر', @@ -18065,7 +18065,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729756411302.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729756411302.png"], }, { title: 'ویکتوریا تک نفره Victoria ', @@ -18076,7 +18076,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715853437636.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715853437636.png"], }, { title: 'سیزن موهیتو - season mojito', @@ -18087,7 +18087,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715790991573.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715790991573.png"], }, { title: 'ویکتوریا دو نفره Victoria ', @@ -18098,7 +18098,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715853408811.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715853408811.png"], }, { title: 'سیر و استیک', @@ -18109,7 +18109,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1705685396897.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1705685396897.png"], }, { title: 'خوراک ماهیچه گوسفندی', @@ -18120,7 +18120,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1705681718685.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1705681718685.png"], }, { title: 'چیکن پنیری', @@ -18131,7 +18131,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1705680891927.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1705680891927.png"], }, { title: 'اسپرسو سینگل عربیکا', @@ -18604,7 +18604,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714229914645.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714229914645.png"], }, { title: ' برگر الفردو', @@ -18615,7 +18615,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714229843007.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714229843007.png"], }, { title: 'میلکو برگر', @@ -18626,7 +18626,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714229794246.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714229794246.png"], }, { title: 'چیز برگر', @@ -18637,7 +18637,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714229694410.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714229694410.png"], }, { title: 'هالوپینو برگر', @@ -18648,7 +18648,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714229659721.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714229659721.png"], }, { title: 'باربیکیو برگر', @@ -18670,7 +18670,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714229555597.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714229555597.png"], }, { title: 'برگر آلفردو (سس قارچ)', @@ -18692,7 +18692,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714231997120.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714231997120.png"], }, { title: 'هات داگ باربیکیو', @@ -18703,7 +18703,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714231799092.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714231799092.png"], }, { title: 'هات داگ قارچ و پنیر', @@ -18714,7 +18714,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714231644573.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714231644573.png"], }, { title: 'هات داگ مخصوص میلکو', @@ -18725,7 +18725,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714231434599.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714231434599.png"], }, { title: 'هات داگ هالوپینو', @@ -18736,7 +18736,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714231390596.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714231390596.png"], }, { title: 'کوکتل ساده ', @@ -18747,7 +18747,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714232175149.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714232175149.png"], }, { title: 'تک لقمه ساده', @@ -18758,7 +18758,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714232152695.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714232152695.png"], }, { title: 'تک لقمه مخصوص', @@ -18769,7 +18769,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714232119536.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714232119536.png"], }, { title: 'بال و کتف سوخاری۷تکه', @@ -18780,7 +18780,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714233976658.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714233976658.png"], }, { title: 'بال و کتف۹تکه +سیب زمینی', @@ -18791,7 +18791,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714233954479.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714233954479.png"], }, { title: 'فیله سوخاری ۳ تیکه', @@ -18802,7 +18802,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714233374520.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714233374520.png"], }, { title: 'فیله سوخاری ۵ تیکه با سیب زمینی', @@ -18813,7 +18813,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714233347221.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714233347221.png"], }, { title: 'فیله سوخاری ۷ تیکه با سیب زمینی', @@ -18824,7 +18824,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714233322046.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714233322046.png"], }, { title: 'سیب زمینی ساده (متوسط)', @@ -18857,7 +18857,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714233563859.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714233563859.png"], }, { title: 'سوسیس سیب زمینی با دیپ گودا (بزرگ)', @@ -18901,7 +18901,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714233584644.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714233584644.png"], }, { title: 'سیب زمینی آلفردو بزرگ', @@ -18923,7 +18923,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1711392599728.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1711392599728.png"], }, { title: 'رول سوخاری', @@ -18934,7 +18934,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1711478461824.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1711478461824.png"], }, { title: 'اسپرسو سینگل', @@ -18967,7 +18967,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715700983206.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715700983206.png"], }, { title: 'اسپرسو روبوستا', @@ -19660,7 +19660,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714079813660.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714079813660.png"], }, { title: 'کته استیک .. fillet steak & rice ', @@ -19671,7 +19671,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1713941274547.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1713941274547.png"], }, { title: 'کته کباب چنجه .. chenjeh kabab & rice ', @@ -19682,7 +19682,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715696779861.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715696779861.png"], }, { title: 'پنیر سوخاری .. cheese fries ', @@ -19693,7 +19693,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715934346706.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715934346706.png"], }, { title: 'پیتزا پپرونی تک نفره', @@ -19946,7 +19946,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714732721495.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714732721495.png"], }, { title: 'هات داگ کلاسیک', @@ -20012,7 +20012,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714293401098.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714293401098.png"], }, { title: 'باقالی پلو با گردن دو نفره', @@ -20023,7 +20023,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714733620233.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714733620233.png"], }, { title: 'ساندویچ کوکتل', @@ -20232,7 +20232,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1724694688777.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1724694688777.png"], }, { title: 'پنه سبزیجات', @@ -20254,7 +20254,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714242244841.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714242244841.png"], }, { title: 'خوراک جوجه کباب. Chicken kebab/3 skewers ', @@ -20265,7 +20265,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715696138450.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715696138450.png"], }, { title: 'رویال برگر ', @@ -20276,7 +20276,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714230711903.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714230711903.png"], }, { title: 'کوکتل قارچ وپنیر ', @@ -20298,10 +20298,10 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1714233840875.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1714233840875.png"], }, { - title: 'بشقاب پروتئین(رژیمی).. dietetic foods', + title: 'بشقاب پروتئین(رژیمی).. dietetic products', desc: 'گوشت گوساله،فیله مرغ،بی بی اسفناج،سبزیجات روز،سیب زمینی تنوری،تخم مرغ آب پز،قارچ،سس مخصوص ژیوان..veal/chicken fillet/baby spinach/vegetable/roast potatoes/boiled egg/mushrom/ special Zhivan sauce ', price: 558000, restaurantSlug: 'zhivan', @@ -20309,7 +20309,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715701220774.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715701220774.png"], }, { title: 'کته استیک ریبای . Ribeye steak & rice', @@ -20320,7 +20320,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715697744094.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715697744094.png"], }, { title: 'آمریکانو روبوستا', @@ -20375,7 +20375,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715700359170.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715700359170.png"], }, { title: 'هما .. Homa', @@ -20386,7 +20386,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715700302453.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715700302453.png"], }, { title: 'جانا .. Jana', @@ -20397,7 +20397,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715700257579.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715700257579.png"], }, { title: 'سالاد سزار گریل', @@ -20947,7 +20947,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1715697924107.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1715697924107.png"], }, { title: 'رول پنیری', @@ -21442,7 +21442,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1718492975613.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1718492975613.png"], }, { title: 'آل پولو ایتالیایی', @@ -22036,7 +22036,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1721822590888.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1721822590888.png"], }, { title: 'چیز برگر', @@ -22982,7 +22982,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1723556152610.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1723556152610.png"], }, { title: 'اسپرسو عربیکا ویژه', @@ -23246,7 +23246,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1736521255416.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1736521255416.png"], }, { title: 'اگ وافل(new)', @@ -23257,7 +23257,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728329980738.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728329980738.png"], }, { title: 'املت ویژه', @@ -23268,7 +23268,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1765281756496.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1765281756496.png"], }, { title: 'املت شاپوری', @@ -23279,7 +23279,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1765281673778.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1765281673778.png"], }, { title: 'مدالیون استیک', @@ -23290,7 +23290,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732099143873.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732099143873.png"], }, { title: 'باربیکیو چیکن(new)', @@ -23301,7 +23301,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728331573491.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728331573491.png"], }, { title: 'چیکن بلو(new)', @@ -23312,7 +23312,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729758234581.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729758234581.png"], }, { title: 'داینامیت شریمپ(new)', @@ -23323,7 +23323,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728330007896.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728330007896.png"], }, { title: 'شنیسل مرغ(new)', @@ -23334,7 +23334,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728331603363.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728331603363.png"], }, { title: 'جاکارتا جینجر', @@ -23345,7 +23345,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728373582119.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728373582119.png"], }, { title: 'فرنچ پاستیس', @@ -23356,7 +23356,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728373531857.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728373531857.png"], }, { title: 'موهیتو اسپارکل', @@ -23367,7 +23367,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728373498052.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728373498052.png"], }, { title: 'تونیک جینجر', @@ -23378,7 +23378,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728373498950.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728373498950.png"], }, { title: 'کرونا سودا واتر', @@ -23389,7 +23389,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728373326721.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728373326721.png"], }, { title: 'بالتیکا مارگاریتا', @@ -23400,7 +23400,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728373364742.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728373364742.png"], }, { title: 'لیموناد مصری', @@ -23411,7 +23411,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728373396422.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728373396422.png"], }, { title: 'الدوراند بالی', @@ -23422,7 +23422,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728373551935.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728373551935.png"], }, { title: 'چاکلت پاپچی', @@ -23433,7 +23433,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728372980251.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728372980251.png"], }, { title: 'بلک چری', @@ -23444,7 +23444,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728372948803.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728372948803.png"], }, { title: 'کرانچ وانیلا باتر', @@ -23455,7 +23455,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728372895437.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728372895437.png"], }, { title: 'ماراش استانبول', @@ -23466,7 +23466,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728372863049.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728372863049.png"], }, { title: 'تی مو تی مانگو', @@ -23477,7 +23477,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728373344734.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728373344734.png"], }, { title: 'می مو سا آفریقایی', @@ -23488,7 +23488,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728373241200.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728373241200.png"], }, { title: 'آناستازیا', @@ -23499,7 +23499,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728373220295.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728373220295.png"], }, { title: 'مکزیکن(new)', @@ -23510,7 +23510,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728330318027.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728330318027.png"], }, { title: 'پیتزا برگر(new)', @@ -23521,7 +23521,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728306990260.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728306990260.png"], }, { title: 'کارنه(new)', @@ -23532,7 +23532,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728330463701.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728330463701.png"], }, { title: 'چانو(new)', @@ -23543,7 +23543,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728330684783.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728330684783.png"], }, { title: 'جینجرپشن', @@ -23554,7 +23554,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1726913724347.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1726913724347.png"], }, { title: 'فاهیتامیکس(new) تند', @@ -23565,7 +23565,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728331131292.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728331131292.png"], }, { title: 'چای ماسالا', @@ -23576,7 +23576,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728374980662.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728374980662.png"], }, { title: 'چای کرک', @@ -23587,7 +23587,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728374956579.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728374956579.png"], }, { title: 'چای مراکشی', @@ -23598,7 +23598,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728377431806.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728377431806.png"], }, { title: 'چای لاته', @@ -23609,7 +23609,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729765132668.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729765132668.png"], }, { title: 'چای سبز', @@ -23620,7 +23620,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728377808931.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728377808931.png"], }, { title: 'لانگ بلک', @@ -23631,7 +23631,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728377481568.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728377481568.png"], }, { title: 'اورنج امریکانو', @@ -23642,7 +23642,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728372536686.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728372536686.png"], }, { title: 'آیریش کافی', @@ -23653,7 +23653,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729759379045.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729759379045.png"], }, { title: 'آمریکانو', @@ -23664,7 +23664,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728377490744.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728377490744.png"], }, { title: 'ایبریک (قهوه ترک)', @@ -23675,7 +23675,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728373971406.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728373971406.png"], }, { title: 'عثمانی', @@ -23686,7 +23686,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728374077203.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728374077203.png"], }, { title: 'دله', @@ -23697,7 +23697,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728374188201.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728374188201.png"], }, { title: 'موکاچینو', @@ -23708,7 +23708,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728374516173.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728374516173.png"], }, { title: 'اسپرسو ماکیاتو', @@ -23719,7 +23719,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729765217266.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729765217266.png"], }, { title: 'اسپرسو اسپشیالیتی', @@ -23730,7 +23730,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729758883089.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729758883089.png"], }, { title: 'اسپرسو رومانو', @@ -23741,7 +23741,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728374453525.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728374453525.png"], }, { title: 'کاپوچینو', @@ -23752,7 +23752,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728374681449.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728374681449.png"], }, { title: 'کافه لاته', @@ -23763,7 +23763,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728374690285.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728374690285.png"], }, { title: 'اسپرسو کورتادو', @@ -23774,7 +23774,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728374070853.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728374070853.png"], }, { title: 'اسپرسو آریش کرما', @@ -23785,7 +23785,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729758906445.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729758906445.png"], }, { title: 'هات چاکلت', @@ -23796,7 +23796,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728377462810.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728377462810.png"], }, { title: 'هات چاکلت بیسکوف', @@ -23807,7 +23807,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728377484916.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728377484916.png"], }, { title: 'وایت چاکلت', @@ -23818,7 +23818,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728377480666.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728377480666.png"], }, { title: 'آیس موکا', @@ -23829,7 +23829,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728377253866.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728377253866.png"], }, { title: 'آیس کورتادو', @@ -23840,7 +23840,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728376290215.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728376290215.png"], }, { title: 'آیس آمریکانو', @@ -23851,7 +23851,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728376953071.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728376953071.png"], }, { title: 'آیس لاته', @@ -23862,7 +23862,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728377261101.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728377261101.png"], }, { title: 'آیس رومانو', @@ -23873,7 +23873,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728376208132.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728376208132.png"], }, { title: 'اسپرسو کامرشیال', @@ -23884,7 +23884,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729758879931.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729758879931.png"], }, { title: 'چای سیاه لاهیجان 2 کاپ', @@ -23895,7 +23895,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728377477277.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728377477277.png"], }, { title: 'سالاد چاینیز(new)', @@ -23906,7 +23906,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728306986068.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728306986068.png"], }, { title: 'چلو گردن ', @@ -23928,7 +23928,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729757889287.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729757889287.png"], }, { title: 'نان سیر', @@ -23939,7 +23939,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729757637426.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729757637426.png"], }, { title: 'رول سوخاری', @@ -23950,7 +23950,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729757745572.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729757745572.png"], }, { title: 'سیزلر استیک', @@ -23961,7 +23961,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729758019524.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729758019524.png"], }, { title: 'فیله استریپس(new)', @@ -23972,7 +23972,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1739472531418.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1739472531418.png"], }, { title: 'ته چین گوشت و بادمجان', @@ -23983,7 +23983,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728331171079.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728331171079.png"], }, { title: 'براونی کیت کت', @@ -23994,7 +23994,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1728221807368.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1728221807368.png"], }, { title: 'براونی پنیری همراه با بستنی', @@ -24005,7 +24005,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729759080723.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729759080723.png"], }, { title: 'خوراک جوجه ', @@ -24071,7 +24071,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729756970934.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729756970934.png"], }, { title: 'لیموناد', @@ -24082,7 +24082,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729756906514.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729756906514.png"], }, { title: 'براونی پنیری', @@ -24093,7 +24093,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729800488338.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729800488338.png"], }, { title: 'چیزکیک لوتوس', @@ -24104,7 +24104,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1759837227083.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1759837227083.png"], }, { title: 'ردموهیتو', @@ -24115,7 +24115,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729755149179.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729755149179.png"], }, { title: 'اب میوه فصل', @@ -24126,7 +24126,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1729755296114.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1729755296114.png"], }, { title: 'شیک نوتلا', @@ -24247,7 +24247,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743526924119.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743526924119.png"], }, { title: 'ویتامینه معجون', @@ -24258,7 +24258,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733563611746.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733563611746.png"], }, { title: 'چالیس فروت', @@ -24269,7 +24269,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733306399133.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733306399133.png"], }, { title: 'چالیس کیک', @@ -24280,7 +24280,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733306350712.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733306350712.png"], }, { title: 'دونات بستنی', @@ -24291,7 +24291,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180961735.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180961735.png"], }, { title: 'کیک بستنی', @@ -24302,7 +24302,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733142832782.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733142832782.png"], }, { title: 'برلینر معجون', @@ -24379,7 +24379,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731760342565.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731760342565.png"], }, { title: 'آیس آمریکانو', @@ -24390,7 +24390,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731760427059.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731760427059.png"], }, { title: 'آیس موکا', @@ -24401,7 +24401,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731759538021.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731759538021.png"], }, { title: 'آیس لته', @@ -24412,7 +24412,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731759571881.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731759571881.png"], }, { title: 'اسپرسو ', @@ -24423,7 +24423,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733143237751.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733143237751.png"], }, { title: 'قهوه فرانسه ', @@ -24434,7 +24434,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733143297427.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733143297427.png"], }, { title: 'کارامل ماکیاتو', @@ -24445,7 +24445,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180816485.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180816485.png"], }, { title: 'کاپوچینو', @@ -24456,7 +24456,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180883149.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180883149.png"], }, { title: 'آمریکانو', @@ -24467,7 +24467,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180916579.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180916579.png"], }, { title: 'آفوگاتو', @@ -24478,7 +24478,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180792530.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180792530.png"], }, { title: 'لاته', @@ -24489,7 +24489,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180650251.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180650251.png"], }, { title: 'هات چاکلت اسپرسو', @@ -24500,7 +24500,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733143171406.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733143171406.png"], }, { title: 'هات چاکلت نوتلا', @@ -24511,7 +24511,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733143139138.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733143139138.png"], }, { title: 'هات چاکلت', @@ -24522,7 +24522,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733143112734.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733143112734.png"], }, { title: 'هات چاکلت دارک', @@ -24533,7 +24533,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733143077005.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733143077005.png"], }, { title: 'وایت چاکلت', @@ -24566,7 +24566,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733142954323.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733142954323.png"], }, { title: 'شیرنسکافه', @@ -24577,7 +24577,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733142892750.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733142892750.png"], }, { title: 'چای ماسالا', @@ -24588,7 +24588,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733142461417.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733142461417.png"], }, { title: 'شیر عسل دارچین', @@ -24599,7 +24599,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733142510825.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733142510825.png"], }, { title: 'چای سیاه', @@ -24610,7 +24610,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733142551995.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733142551995.png"], }, { title: 'چای ترش ', @@ -24621,7 +24621,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733142584507.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733142584507.png"], }, { title: 'دمنوش به', @@ -24632,7 +24632,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733142615641.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733142615641.png"], }, { title: 'دمنوش زنجبیل', @@ -24643,7 +24643,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733142649142.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733142649142.png"], }, { title: 'گل گاو زبان', @@ -24654,7 +24654,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733142675241.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733142675241.png"], }, { title: 'سیب دارچین', @@ -24665,7 +24665,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733142720798.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733142720798.png"], }, { title: 'آیس معجون ', @@ -24753,7 +24753,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731760921692.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731760921692.png"], }, { title: 'آب طالبی', @@ -24797,7 +24797,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180737310.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180737310.png"], }, { title: 'تیرامیسو', @@ -24808,7 +24808,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180706730.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180706730.png"], }, { title: 'نوتلا شیشه ای', @@ -24819,7 +24819,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733146270989.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733146270989.png"], }, { title: 'اسنیکرز', @@ -24830,7 +24830,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733146241787.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733146241787.png"], }, { title: 'کیندر', @@ -24841,7 +24841,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733146295503.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733146295503.png"], }, { title: 'نوتلا', @@ -24852,7 +24852,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733146214104.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733146214104.png"], }, { title: 'کیت کت', @@ -24863,7 +24863,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733146319268.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733146319268.png"], }, { title: 'توییکس', @@ -24874,7 +24874,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733146188871.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733146188871.png"], }, { title: 'ام اند ام', @@ -24885,7 +24885,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733146348034.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733146348034.png"], }, { title: 'هوبی', @@ -24896,7 +24896,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733146551965.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733146551965.png"], }, { title: 'اورئو', @@ -24907,7 +24907,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733146582932.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733146582932.png"], }, { title: 'وبی', @@ -24918,7 +24918,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180029406.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180029406.png"], }, { title: 'اسپیرال', @@ -24929,7 +24929,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180052223.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180052223.png"], }, { title: 'استریپی', @@ -24940,7 +24940,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180073573.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180073573.png"], }, { title: 'زبرا', @@ -24951,7 +24951,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180093424.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180093424.png"], }, { title: 'رابی', @@ -24962,7 +24962,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180179189.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180179189.png"], }, { title: 'رزتا', @@ -24973,7 +24973,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180161432.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180161432.png"], }, { title: 'مینیون', @@ -24984,7 +24984,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731576162224.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731576162224.png"], }, { title: 'کافی', @@ -24995,7 +24995,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180206128.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180206128.png"], }, { title: 'دونات شکلات', @@ -25006,7 +25006,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180258080.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180258080.png"], }, { title: 'دونات توت فرنگی', @@ -25017,7 +25017,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180232243.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180232243.png"], }, { title: 'دونات دارک', @@ -25028,7 +25028,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180128527.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180128527.png"], }, { title: 'دونات شیری', @@ -25039,7 +25039,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733178966498.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733178966498.png"], }, { title: 'دونات شکری', @@ -25050,7 +25050,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733179002531.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733179002531.png"], }, { title: 'دونات نارگیل', @@ -25061,7 +25061,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733179035398.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733179035398.png"], }, { title: 'دونات کارامل', @@ -25072,7 +25072,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733179058776.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733179058776.png"], }, { title: 'دونات دارچین', @@ -25083,7 +25083,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733179092163.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733179092163.png"], }, { title: 'برلینر نوتلا', @@ -25105,7 +25105,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733143433807.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733143433807.png"], }, { title: 'کرم شیر', @@ -25116,7 +25116,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733145942477.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733145942477.png"], }, { title: 'برلینر دارک', @@ -25138,7 +25138,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731756831421.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731756831421.png"], }, { title: 'رست نات توت فرنگی', @@ -25149,7 +25149,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733179129124.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733179129124.png"], }, { title: 'رست نات چوبی ', @@ -25160,7 +25160,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733179150342.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733179150342.png"], }, { title: 'رست نات کارامل', @@ -25171,7 +25171,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733179172451.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733179172451.png"], }, { title: 'رست نات موز نوتلا', @@ -25182,7 +25182,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733179238571.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733179238571.png"], }, { title: ' رست نات فروتی نوتلا', @@ -25193,7 +25193,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733179754391.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733179754391.png"], }, { title: 'کیک', @@ -25204,7 +25204,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733179332686.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733179332686.png"], }, { title: 'پیگمنت', @@ -25215,7 +25215,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733179444761.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733179444761.png"], }, { title: 'اسمارتین', @@ -25226,7 +25226,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733179690846.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733179690846.png"], }, { title: 'گلوبال', @@ -25237,7 +25237,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733179479179.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733179479179.png"], }, { title: 'لاولی', @@ -25248,7 +25248,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733179728101.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733179728101.png"], }, { title: 'پیلو', @@ -25259,7 +25259,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733178577704.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733178577704.png"], }, { title: 'دونات پسته', @@ -25270,7 +25270,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733178624247.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733178624247.png"], }, { title: 'دونات کنجد', @@ -25281,7 +25281,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733178650347.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733178650347.png"], }, { title: 'میکس ناتس', @@ -25292,7 +25292,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733178679557.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733178679557.png"], }, { title: 'بادام هندی', @@ -25303,7 +25303,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733178707024.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733178707024.png"], }, { title: 'فندق', @@ -25314,7 +25314,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733178735904.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733178735904.png"], }, { title: 'گردو', @@ -25325,7 +25325,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733178755505.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733178755505.png"], }, { title: 'بادام', @@ -25336,7 +25336,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733178778940.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733178778940.png"], }, { title: 'لوتوس', @@ -25358,7 +25358,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733178810557.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733178810557.png"], }, { title: 'شوکوفال', @@ -25380,7 +25380,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733178833313.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733178833313.png"], }, { title: 'کارامل', @@ -25402,7 +25402,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733211567462.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733211567462.png"], }, { title: 'کارامل فندق', @@ -25413,7 +25413,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733179996739.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733179996739.png"], }, { title: 'تگرال', @@ -25435,7 +25435,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733179971176.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733179971176.png"], }, { title: 'پیتزا استیک', @@ -25446,7 +25446,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731411277692.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731411277692.png"], }, { title: 'پیتزا مخصوص', @@ -25457,7 +25457,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731411636704.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731411636704.png"], }, { title: 'پیتزا مرغ', @@ -25468,7 +25468,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731411735773.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731411735773.png"], }, { title: 'پیتزا تاکو', @@ -25479,7 +25479,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731411826143.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731411826143.png"], }, { title: 'پیتزا سبزیجات', @@ -25490,7 +25490,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731411906820.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731411906820.png"], }, { title: 'پیتزا پپرونی', @@ -25501,7 +25501,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731411990084.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731411990084.png"], }, { title: 'کلاسیک برگر', @@ -25512,7 +25512,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731412092522.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731412092522.png"], }, { title: 'قارچ برگر', @@ -25523,7 +25523,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731412145634.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731412145634.png"], }, { title: 'دوبل برگر', @@ -25534,7 +25534,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731412222935.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731412222935.png"], }, { title: 'چیزبرگر', @@ -25545,7 +25545,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731412297126.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731412297126.png"], }, { title: 'رویال برگر', @@ -25556,7 +25556,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731412378414.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731412378414.png"], }, { title: 'چیکن برگر', @@ -25567,7 +25567,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731412496429.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731412496429.png"], }, { title: 'چیکن برگر با قارچ و پنیر', @@ -25578,7 +25578,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731412559712.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731412559712.png"], }, { title: 'پاستا پنه آلفردو', @@ -25589,7 +25589,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731412728968.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731412728968.png"], }, { title: 'پاستا آرابیتا', @@ -25600,7 +25600,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731412794164.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731412794164.png"], }, { title: 'سیب زمینی ساده', @@ -25611,7 +25611,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732981239945.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732981239945.png"], }, { title: 'سیب با قارچ و پنیر', @@ -25622,7 +25622,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731413339741.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731413339741.png"], }, { title: 'سیب زمینی ویژه', @@ -25633,7 +25633,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731413407048.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731413407048.png"], }, { title: 'سیب زمینی با سس الفردو', @@ -25644,7 +25644,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731413473719.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731413473719.png"], }, { title: 'سیب زمینی با سس چدار', @@ -25655,7 +25655,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731413532205.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731413532205.png"], }, { title: 'سالاد سزار', @@ -25666,7 +25666,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732981174286.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732981174286.png"], }, { title: 'سالاد کلم ', @@ -25677,7 +25677,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731413627560.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731413627560.png"], }, { title: 'سالاد شف', @@ -25688,7 +25688,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732980912025.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732980912025.png"], }, { title: 'سالاد فصل', @@ -25699,7 +25699,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731413776749.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731413776749.png"], }, { title: 'ماست موسیر', @@ -25710,7 +25710,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731413843112.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731413843112.png"], }, { title: 'زیتون شور', @@ -25721,7 +25721,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731413888957.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731413888957.png"], }, { title: 'زیتون پرورده', @@ -25732,7 +25732,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731413923790.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731413923790.png"], }, { title: 'ژله بستنی ۴نفره', @@ -25743,7 +25743,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731413957375.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731413957375.png"], }, { title: 'ژله بستنی تک نفره', @@ -25754,7 +25754,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731413996457.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731413996457.png"], }, { title: 'کوکا قوطی', @@ -25765,7 +25765,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731414193558.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731414193558.png"], }, { title: 'فانتا قوطی', @@ -25776,7 +25776,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731414213873.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731414213873.png"], }, { title: 'اسپرایت قوطی', @@ -25787,7 +25787,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731414243110.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731414243110.png"], }, { title: 'زیرو قوطی', @@ -25798,7 +25798,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731414267628.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731414267628.png"], }, { title: 'کوکا بطری', @@ -25809,7 +25809,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731414291175.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731414291175.png"], }, { title: 'فانتا بطری', @@ -25820,7 +25820,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731414311705.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731414311705.png"], }, { title: 'اسپرایت بطری', @@ -25831,7 +25831,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731414334741.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731414334741.png"], }, { title: 'دلستر هلو قوطی', @@ -25842,7 +25842,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731414358764.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731414358764.png"], }, { title: 'دلستر قوطی لیمو', @@ -25853,7 +25853,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731414383446.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731414383446.png"], }, { title: 'دلستر قوطی استوایی', @@ -25864,7 +25864,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731414416539.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731414416539.png"], }, { title: 'دلستر قوطی اناناس', @@ -25875,7 +25875,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731414437905.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731414437905.png"], }, { title: 'لیموناد شیشه ای', @@ -25886,7 +25886,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731414461946.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731414461946.png"], }, { title: 'دوغ سنتی', @@ -25897,7 +25897,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731414507415.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731414507415.png"], }, { title: 'اب معدنی کوچک', @@ -25908,7 +25908,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731414527513.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731414527513.png"], }, { title: 'اب معدنی بزرگ', @@ -25919,7 +25919,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731414548792.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731414548792.png"], }, { title: 'چای ماسالا ', @@ -25930,7 +25930,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731426631526.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731426631526.png"], }, { title: 'آیس چاکلت ', @@ -25941,7 +25941,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731756734489.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731756734489.png"], }, { title: 'آیس لته فندق ', @@ -25952,7 +25952,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731760524883.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731760524883.png"], }, { title: 'رست نات نوتلا', @@ -25963,7 +25963,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733178896471.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733178896471.png"], }, { title: 'دونات لوتوس', @@ -25974,7 +25974,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731757253386.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731757253386.png"], }, { title: 'دونات دبل چاکلت', @@ -25985,7 +25985,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733180317775.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733180317775.png"], }, { title: 'دونات موز', @@ -25996,7 +25996,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731757165838.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731757165838.png"], }, { title: 'بیسکو بستنی', @@ -26007,7 +26007,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731785589735.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731785589735.png"], }, { title: 'دونات موکا', @@ -26029,7 +26029,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731756902912.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731756902912.png"], }, { title: 'موکا', @@ -26051,7 +26051,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733178537171.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733178537171.png"], }, { title: 'شیک لوتوس', @@ -26062,7 +26062,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731757109397.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731757109397.png"], }, { title: 'لقمه کره بادام زمینی همراه با آیس کافی ', @@ -26073,7 +26073,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731759308900.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731759308900.png"], }, { title: 'لقمه نوتلا همراه با آیس کافی', @@ -26084,7 +26084,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731759372412.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731759372412.png"], }, { title: 'برلینر خامه', @@ -26150,7 +26150,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731839915863.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731839915863.png"], }, { title: 'آیس لته', @@ -26161,7 +26161,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731839980535.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731839980535.png"], }, { title: 'آیس موکا', @@ -26172,7 +26172,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731840146230.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731840146230.png"], }, { title: 'آیس کارامل ماکیاتو', @@ -26183,7 +26183,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731840047857.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731840047857.png"], }, { title: 'بابل آیس لته کاراملی', @@ -26194,7 +26194,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731840082007.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731840082007.png"], }, { title: 'کافه گلاسه', @@ -26205,7 +26205,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731840114012.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731840114012.png"], }, { title: 'آیس ماچا لته', @@ -26216,7 +26216,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731840179642.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731840179642.png"], }, { title: 'آفوگاتو', @@ -26227,7 +26227,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731840216807.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731840216807.png"], }, { title: 'اسپرسو', @@ -26238,7 +26238,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731842514051.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731842514051.png"], }, { title: 'آمریکانو', @@ -26249,7 +26249,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731842589131.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731842589131.png"], }, { title: 'کاپوچینو', @@ -26260,7 +26260,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731842666471.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731842666471.png"], }, { title: 'لته', @@ -26271,7 +26271,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731842722244.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731842722244.png"], }, { title: 'موکا', @@ -26282,7 +26282,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731842854030.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731842854030.png"], }, { title: 'کارامل ماکیاتو', @@ -26293,7 +26293,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731843233734.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731843233734.png"], }, { title: 'قهوه دمی', @@ -26304,7 +26304,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731843283042.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731843283042.png"], }, { title: 'نسکافه', @@ -26315,7 +26315,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731843554862.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731843554862.png"], }, { title: 'سیروپ اضافه(نارگیل- وانیل- آیریش- فندق- کارامل- شکلات)', @@ -26326,7 +26326,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731843901508.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731843901508.png"], }, { title: 'شیر غیر لبنی( بادام- فندق- سویا- گاومیش- بدون لاکتوز)', @@ -26337,7 +26337,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731844009732.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731844009732.png"], }, { title: 'قهوه ۱۰۰ عربیکا', @@ -26348,7 +26348,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731844095978.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731844095978.png"], }, { title: 'قهوه بدون کافئین', @@ -26359,7 +26359,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731844139530.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731844139530.png"], }, { title: 'قوری چای تی بگ دو نفره+ نبات', @@ -26370,7 +26370,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731844409966.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731844409966.png"], }, { title: 'قوری چای تی بگ دو نفره + قند', @@ -26381,7 +26381,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731844447354.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731844447354.png"], }, { title: 'قوری چای دمی تک نفره ', @@ -26392,7 +26392,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731844493317.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731844493317.png"], }, { title: 'قوری چای دمی دو نفره', @@ -26403,7 +26403,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731844524655.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731844524655.png"], }, { title: 'چای سبز تک نفره', @@ -26414,7 +26414,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731844572185.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731844572185.png"], }, { title: 'چای سبز دو نفره', @@ -26425,7 +26425,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731844608662.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731844608662.png"], }, { title: 'چای کرک', @@ -26436,7 +26436,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731844642144.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731844642144.png"], }, { title: 'چای ماسالا', @@ -26447,7 +26447,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731844677728.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731844677728.png"], }, { title: 'دمنوش میوه های ترش تک نفره', @@ -26458,7 +26458,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731844716456.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731844716456.png"], }, { title: 'دمنوش میوه های ترش دونفره ', @@ -26469,7 +26469,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731844756865.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731844756865.png"], }, { title: 'دمنوش میوه های شیرین تک نفره ', @@ -26480,7 +26480,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731844791962.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731844791962.png"], }, { title: 'دمنوش میوه های شیرین دونفره', @@ -26491,7 +26491,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731844840101.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731844840101.png"], }, { title: 'هات چاکلت ', @@ -26502,7 +26502,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731844875467.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731844875467.png"], }, { title: 'وایت چاکلت', @@ -26513,7 +26513,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731844907633.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731844907633.png"], }, { title: 'موهیتو', @@ -26524,7 +26524,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731845522341.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731845522341.png"], }, { title: 'لیموناد ', @@ -26535,7 +26535,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731845623466.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731845623466.png"], }, { title: 'شربت بهار نارنج ', @@ -26546,7 +26546,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731845654713.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731845654713.png"], }, { title: 'ایس چاکلت', @@ -26557,7 +26557,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731845691173.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731845691173.png"], }, { title: 'اب هویج بستنی', @@ -26568,7 +26568,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731845826747.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731845826747.png"], }, { title: 'طالبی بستنی', @@ -26579,7 +26579,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731845859178.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731845859178.png"], }, { title: 'انبه بستنی', @@ -26590,7 +26590,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731845890478.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731845890478.png"], }, { title: 'توت بستنی', @@ -26601,7 +26601,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731845921498.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731845921498.png"], }, { title: 'شاتوت بستنی', @@ -26612,7 +26612,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731845967183.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731845967183.png"], }, { title: 'شیر موز', @@ -26623,7 +26623,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731846168393.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731846168393.png"], }, { title: 'شیر انبه', @@ -26634,7 +26634,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731846303557.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731846303557.png"], }, { title: 'شیر پسته', @@ -26645,7 +26645,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731846384825.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731846384825.png"], }, { title: 'شیر موز انبه', @@ -26656,7 +26656,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731846470584.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731846470584.png"], }, { title: 'شیر موز خرما', @@ -26667,7 +26667,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731846511022.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731846511022.png"], }, { title: 'شیر موز شکلات ', @@ -26678,7 +26678,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731846579935.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731846579935.png"], }, { title: 'شیر موز قهوه ', @@ -26689,7 +26689,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1731846648318.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1731846648318.png"], }, { title: 'خوراک جوجه', @@ -26711,7 +26711,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732089438973.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732089438973.png"], }, { title: 'اب طالبی', @@ -26722,7 +26722,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732089491149.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732089491149.png"], }, { title: 'اب هندوانه ', @@ -26733,7 +26733,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732089545598.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732089545598.png"], }, { title: 'اب پرتقال', @@ -26744,7 +26744,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732090599736.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732090599736.png"], }, { title: 'اب انار', @@ -26755,7 +26755,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732090646560.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732090646560.png"], }, { title: 'اب اناناس ', @@ -26766,7 +26766,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732090716302.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732090716302.png"], }, { title: 'اب توت فرنگی', @@ -26777,7 +26777,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732090768365.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732090768365.png"], }, { title: 'اب شاتوت ', @@ -26788,7 +26788,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732091322530.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732091322530.png"], }, { title: 'اب سیب', @@ -26799,7 +26799,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732091384413.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732091384413.png"], }, { title: 'انبه اناناس', @@ -26810,7 +26810,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732091444892.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732091444892.png"], }, { title: 'موز انبه', @@ -26821,7 +26821,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732091854953.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732091854953.png"], }, { title: 'پرتقال انار', @@ -26832,7 +26832,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732091930952.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732091930952.png"], }, { title: 'توت شاتوت ', @@ -26843,7 +26843,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732091967969.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732091967969.png"], }, { title: 'اب انبه ', @@ -26854,7 +26854,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732092020362.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732092020362.png"], }, { title: 'پرتقال انبه', @@ -26865,7 +26865,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732092066831.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732092066831.png"], }, { title: 'شیک نوتلا', @@ -26876,7 +26876,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732092152836.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732092152836.png"], }, { title: 'شیک توت فرنگی', @@ -26887,7 +26887,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732092233333.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732092233333.png"], }, { title: 'شیک لوتوس ', @@ -26898,7 +26898,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732092544878.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732092544878.png"], }, { title: 'شیک اورئو', @@ -26909,7 +26909,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732092580168.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732092580168.png"], }, { title: 'شیک انبه', @@ -26920,7 +26920,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732092629927.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732092629927.png"], }, { title: 'ایس پک ', @@ -26931,7 +26931,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732092722313.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732092722313.png"], }, { title: 'کیک شکلات', @@ -26942,7 +26942,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732980656070.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732980656070.png"], }, { title: 'چیز کیک شکلاتی دو نفره', @@ -26953,7 +26953,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732980434978.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732980434978.png"], }, { title: 'چیز کیک لوتوس دو نفره', @@ -26964,7 +26964,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732979733603.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732979733603.png"], }, { title: 'خوراک چنجه ', @@ -26975,7 +26975,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732979580830.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732979580830.png"], }, { title: 'خوراک برگ', @@ -26986,7 +26986,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732094118572.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732094118572.png"], }, { title: 'خوراک سلطانی', @@ -26997,7 +26997,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732094158201.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732094158201.png"], }, { title: 'خوراک بختیاری', @@ -27008,7 +27008,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732094195105.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732094195105.png"], }, { title: 'خوراک کباب ترش', @@ -27019,7 +27019,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732094233214.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732094233214.png"], }, { title: 'خوراک کباب نگینی', @@ -27030,7 +27030,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732974433427.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732974433427.png"], }, { title: 'خوراک کباب لبنانی', @@ -27041,7 +27041,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732974297311.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732974297311.png"], }, { title: 'خوراک کوبیده', @@ -27052,7 +27052,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732974212826.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732974212826.png"], }, { title: 'خوراک کباب تک سیخ', @@ -27063,7 +27063,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732094438499.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732094438499.png"], }, { title: 'خوراک کباب سه سیخ', @@ -27074,7 +27074,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732362637401.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732362637401.png"], }, { title: 'خوراک میکس ساده', @@ -27085,7 +27085,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732094523215.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732094523215.png"], }, { title: 'خوراک میکس مخصوص', @@ -27096,7 +27096,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732094560339.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732094560339.png"], }, { title: 'خوراک شیشلیک', @@ -27107,7 +27107,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732094603053.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732094603053.png"], }, { title: 'خوراک جوجه', @@ -27118,7 +27118,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732726476100.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732726476100.png"], }, { title: 'خوراک جوجه ترش', @@ -27129,7 +27129,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732726584156.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732726584156.png"], }, { title: 'خوراک جوجه حلزونی', @@ -27140,7 +27140,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732094690877.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732094690877.png"], }, { title: 'خوراک جوجه نارسیس', @@ -27151,7 +27151,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732727015511.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732727015511.png"], }, { title: 'خوراک جوجه نگینی', @@ -27162,7 +27162,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732727091606.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732727091606.png"], }, { title: 'خوراک ماهی کباب', @@ -27173,7 +27173,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732094792449.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732094792449.png"], }, { title: 'خوراک کباب شالتو', @@ -27184,7 +27184,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732973739516.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732973739516.png"], }, { title: 'خوراک کباب مصری', @@ -27195,7 +27195,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732973812554.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732973812554.png"], }, { title: 'کتف و بال زعفرانی', @@ -27206,7 +27206,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732973881136.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732973881136.png"], }, { title: 'خوراک جوجه با استخوان', @@ -27217,7 +27217,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732726005132.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732726005132.png"], }, { title: 'خوراک ماهیچه', @@ -27228,7 +27228,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732363269121.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732363269121.png"], }, { title: 'خوراک گردن', @@ -27239,7 +27239,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732099406737.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732099406737.png"], }, { title: 'خوراک گوشت', @@ -27250,7 +27250,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732099369819.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732099369819.png"], }, { title: 'خوراک مرغ', @@ -27261,7 +27261,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732363192936.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732363192936.png"], }, { title: 'جوجه چینی ۲۰۰گرم فیله', @@ -27272,7 +27272,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732362915343.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732362915343.png"], }, { title: 'شیک موز‌ نوتلا', @@ -27294,7 +27294,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732099328269.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732099328269.png"], }, { title: 'خوراک اکبرجوجه', @@ -27305,7 +27305,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732362466605.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732362466605.png"], }, { title: 'زرشک پلو', @@ -27316,7 +27316,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732099137172.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732099137172.png"], }, { title: 'برنج ساده ایرانی', @@ -27327,7 +27327,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732099192345.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732099192345.png"], }, { title: 'باقالی پلو', @@ -27338,7 +27338,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732099243481.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732099243481.png"], }, { title: 'سوپ', @@ -27349,7 +27349,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732362358247.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732362358247.png"], }, { title: 'شوید پلو با ماهی', @@ -27360,7 +27360,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732100319064.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732100319064.png"], }, { title: 'باقالی پلو با مرغ', @@ -27371,7 +27371,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732100297076.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732100297076.png"], }, { title: 'زرشک پلو با مرغ', @@ -27382,7 +27382,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732100371100.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732100371100.png"], }, { title: 'باقالی پلو با ماهیچه', @@ -27393,7 +27393,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732100418501.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732100418501.png"], }, { title: 'چلو ماهیچه', @@ -27404,7 +27404,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732100453301.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732100453301.png"], }, { title: 'چلو گوشت', @@ -27415,7 +27415,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732100504110.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732100504110.png"], }, { title: 'چلو جوجه', @@ -27426,7 +27426,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732100561534.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732100561534.png"], }, { title: 'چلو میکس ساده', @@ -27437,7 +27437,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732100596151.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732100596151.png"], }, { title: 'چلو کباب', @@ -27448,7 +27448,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732100637568.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732100637568.png"], }, { title: 'چلو سلطانی', @@ -27459,7 +27459,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732100674202.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732100674202.png"], }, { title: 'چلو برگ', @@ -27470,7 +27470,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732100709573.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732100709573.png"], }, { title: 'چلو چنجه', @@ -27481,7 +27481,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732100746067.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732100746067.png"], }, { title: 'باقالی پلو با گردن', @@ -27492,7 +27492,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732100816942.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732100816942.png"], }, { title: 'چلو گردن', @@ -27503,7 +27503,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1732361682177.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1732361682177.png"], }, { title: 'سیب تنوری', @@ -27514,7 +27514,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222900831.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222900831.png"], }, { title: 'فانتوم', @@ -27525,7 +27525,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733221708079.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733221708079.png"], }, { title: 'رد موهیتو طبیعی', @@ -27536,7 +27536,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733222939222.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733222939222.png"], }, { title: 'برلینر موز نوتلا', @@ -27547,7 +27547,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733143644676.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733143644676.png"], }, { title: 'برلینر خامه توت فرنگی', @@ -27558,7 +27558,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733143785931.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733143785931.png"], }, { title: 'چیز کیک روز ', @@ -27569,7 +27569,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733344545667.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733344545667.png"], }, { title: 'کیک اسنیکرز روز ', @@ -27580,7 +27580,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 0, stockDefault: 0, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733411402579.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733411402579.png"], }, { title: 'ساندویج کالباس سرد ', @@ -27591,7 +27591,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733423443280.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733423443280.png"], }, { title: 'آفوگاتو', @@ -27602,7 +27602,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733431869244.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733431869244.png"], }, { title: 'مارتینی', @@ -27613,7 +27613,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733433123133.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733433123133.png"], }, { title: 'پینک چاکلت ', @@ -27624,7 +27624,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733433539453.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733433539453.png"], }, { title: 'وایت چاکلت ', @@ -27635,7 +27635,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733434215353.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733434215353.png"], }, { title: 'دارک چاکلت ', @@ -27646,7 +27646,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1733434710098.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1733434710098.png"], }, { title: 'وگن پلیت', @@ -27943,7 +27943,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1736521695625.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1736521695625.png"], }, { title: 'کوکی شکلات فندق', @@ -28196,7 +28196,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1737030471416.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1737030471416.png"], }, { title: 'چای زعفران', @@ -28207,7 +28207,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1737291548706.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1737291548706.png"], }, { title: 'ساندویچ گود بیف new', @@ -28218,7 +28218,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1739469717534.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1739469717534.png"], }, { title: 'لازانیا new', @@ -28229,7 +28229,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1739469613044.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1739469613044.png"], }, { title: 'ماچا', @@ -28306,7 +28306,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741624882952.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741624882952.png"], }, { title: 'آیس لاته ۷۰/۳۰', @@ -28317,7 +28317,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741624761374.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741624761374.png"], }, { title: 'آیس ماچا لاته', @@ -28328,7 +28328,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741624724783.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741624724783.png"], }, { title: 'فراپاچینو', @@ -28339,7 +28339,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741624675083.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741624675083.png"], }, { title: 'آیس ماچا بری', @@ -28361,7 +28361,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741718046900.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741718046900.png"], }, { title: 'کوکو آیس ماچا', @@ -28372,7 +28372,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741718020809.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741718020809.png"], }, { title: 'V60 کلمبیا هانی گیشا', @@ -28427,7 +28427,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741624348642.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741624348642.png"], }, { title: 'یونیتی', @@ -28438,7 +28438,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741623784133.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741623784133.png"], }, { title: 'سیید فلو', @@ -28449,7 +28449,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741623681207.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741623681207.png"], }, { title: 'میدنایت', @@ -28460,7 +28460,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741623638099.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741623638099.png"], }, { title: 'ناتی بری', @@ -28471,7 +28471,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741623561027.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741623561027.png"], }, { title: 'هات چاکلت', @@ -28537,7 +28537,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741622808905.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741622808905.png"], }, { title: 'ساندویچ سوسیس و خردل', @@ -28548,7 +28548,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741622646582.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741622646582.png"], }, { title: 'ساندویچ چیکن پارمسان', @@ -28559,7 +28559,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741622576851.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741622576851.png"], }, { title: 'ساندویچ سبزیجات', @@ -28570,7 +28570,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741622410069.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741622410069.png"], }, { title: 'ساندویچ چیکن ملانزانا', @@ -28581,7 +28581,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741622230110.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741622230110.png"], }, { title: 'ساندویچ چیکن پستو', @@ -28592,7 +28592,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741622155566.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741622155566.png"], }, { title: 'ساندویچ چیکن هالوپینو', @@ -28603,7 +28603,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741621934158.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741621934158.png"], }, { title: 'چای سیاه', @@ -28636,7 +28636,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741621829898.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741621829898.png"], }, { title: 'کرم بروله', @@ -28647,7 +28647,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741621763441.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741621763441.png"], }, { title: 'موس شکلات و پرتقال', @@ -28658,7 +28658,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741621732851.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741621732851.png"], }, { title: 'لاته سیروپ', @@ -28669,7 +28669,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741717242990.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741717242990.png"], }, { title: 'دونات دوبی', @@ -28680,7 +28680,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743526505742.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743526505742.png"], }, { title: 'دونات پسته دوبی ', @@ -28691,7 +28691,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1738534628614.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1738534628614.png"], }, { title: 'اسپرسو ۷۰/۳۰', @@ -28702,7 +28702,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741717154499.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741717154499.png"], }, { title: 'اسپرسو ماکیاتو ۷۰/۳۰', @@ -28713,7 +28713,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741716889953.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741716889953.png"], }, { title: 'اسپرسو پیکولو ۷۰/۳۰', @@ -28724,7 +28724,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741716997525.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741716997525.png"], }, { title: 'اسپرسو کورتادو ۷۰/۳۰', @@ -28735,7 +28735,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741716966384.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741716966384.png"], }, { title: 'آمریکانو ۷۰/۳۰', @@ -28746,7 +28746,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741632315585.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741632315585.png"], }, { title: 'لاته ۷۰/۳۰', @@ -28757,7 +28757,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741716779814.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741716779814.png"], }, { title: 'کاپوچینو ۷۰/۳۰', @@ -28768,7 +28768,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741716756922.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741716756922.png"], }, { title: 'فلت وایت ۷۰/۳۰', @@ -28779,7 +28779,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741716693388.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741716693388.png"], }, { title: 'ماچا لاته', @@ -28790,7 +28790,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741716616701.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741716616701.png"], }, { title: 'کوکو لاته', @@ -28801,7 +28801,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741716569208.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741716569208.png"], }, { title: 'کوکو ماچا لاته', @@ -28812,7 +28812,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741716528276.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741716528276.png"], }, { title: 'آیس لاته سیروپ', @@ -28823,7 +28823,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741717568965.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741717568965.png"], }, { title: 'کیک روز', @@ -28845,7 +28845,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741717726294.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741717726294.png"], }, { title: 'آیس ماچا بابل تی', @@ -28856,7 +28856,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741717765520.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741717765520.png"], }, { title: 'فراپاچینو سیروپ', @@ -29098,7 +29098,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741615796962.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741615796962.png"], }, { title: 'کلدبرو پرشین', @@ -29109,7 +29109,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741615745223.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741615745223.png"], }, { title: 'کلدبرو کوکو آچری', @@ -29120,7 +29120,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741615718530.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741615718530.png"], }, { title: 'کلدبرو آیریش', @@ -29131,7 +29131,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741615672755.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741615672755.png"], }, { title: 'تست اسفناج و قارچ', @@ -29142,7 +29142,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741615541780.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741615541780.png"], }, { title: 'بیکن و نیمرو', @@ -29153,7 +29153,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741615479089.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741615479089.png"], }, { title: 'سوسیس و اسکرامبل', @@ -29164,7 +29164,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741615422472.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741615422472.png"], }, { title: 'ساندویچ مرغ و زیتون', @@ -29175,7 +29175,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741615365988.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741615365988.png"], }, { title: 'اسپرسو', @@ -29197,7 +29197,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1741608384524.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1741608384524.png"], }, { title: 'زینگر new', @@ -29208,7 +29208,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1739469537281.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1739469537281.png"], }, { title: 'معجون نوتلا', @@ -29219,7 +29219,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1738534156977.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1738534156977.png"], }, { title: 'اسنک ژامبون مرغ', @@ -29230,7 +29230,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1738534544438.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1738534544438.png"], }, { title: 'اسنک پپرونی', @@ -29241,7 +29241,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1738534733565.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1738534733565.png"], }, { title: 'اسنک ژامبون گوشت ', @@ -29252,7 +29252,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1738534806343.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1738534806343.png"], }, { title: 'کوکی شکلات پرتقال', @@ -29923,7 +29923,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1740650953725.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1740650953725.png"], }, { title: 'کوکی رژیمی آجیلی', @@ -29945,7 +29945,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1742224608597.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1742224608597.png"], }, { title: 'بشقاب وافل بستنی', @@ -29956,7 +29956,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743355847058.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743355847058.png"], }, { title: 'اسپرسو70/30عربیکا', @@ -29967,7 +29967,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743364293564.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743364293564.png"], }, { title: 'امریکانو', @@ -29978,7 +29978,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743364344906.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743364344906.png"], }, { title: 'لاته', @@ -29989,7 +29989,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743364403723.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743364403723.png"], }, { title: 'کورتادو', @@ -30000,7 +30000,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743364465048.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743364465048.png"], }, { title: 'موکا', @@ -30011,7 +30011,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743364504072.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743364504072.png"], }, { title: 'کارامل ماکیاتو', @@ -30022,7 +30022,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743364535455.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743364535455.png"], }, { title: 'کاپوچینو', @@ -30033,7 +30033,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743364584676.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743364584676.png"], }, { title: 'تیرامیسو', @@ -30044,7 +30044,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743364671908.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743364671908.png"], }, { title: 'سه شیر شکلاتی', @@ -30055,7 +30055,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743364718345.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743364718345.png"], }, { title: 'تارت وانیل توت فرنگی', @@ -30066,7 +30066,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1745075465530.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1745075465530.png"], }, { title: 'تارت شکلات توت فرنگی', @@ -30077,7 +30077,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1745075559489.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1745075559489.png"], }, { title: 'تارت شکلات', @@ -30088,7 +30088,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1745075535367.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1745075535367.png"], }, { title: 'اسنیکرز', @@ -30099,7 +30099,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1745075435287.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1745075435287.png"], }, { title: 'چیزکیک نیویورکی', @@ -30110,7 +30110,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1745075502061.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1745075502061.png"], }, { title: 'چیزکیک لوتوس', @@ -30121,7 +30121,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743365073647.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743365073647.png"], }, { title: 'چیزکیک سن سباستین', @@ -30132,7 +30132,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1745075798711.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1745075798711.png"], }, { title: 'کیک شکلاتی', @@ -30143,7 +30143,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1745075898953.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1745075898953.png"], }, { title: 'کوکی شکلاتی', @@ -30154,7 +30154,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1766415189898.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1766415189898.png"], }, { title: 'رول دارچین', @@ -30209,7 +30209,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424279408.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424279408.png"], }, { title: 'شیرچای', @@ -30220,7 +30220,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424314094.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424314094.png"], }, { title: 'دمنوش کاسکارا', @@ -30231,7 +30231,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424350103.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424350103.png"], }, { title: 'دمنوش نعنای مراکشی', @@ -30242,7 +30242,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424384817.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424384817.png"], }, { title: 'دمنوش جزمین ', @@ -30253,7 +30253,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424415786.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424415786.png"], }, { title: 'نوش لمون گرس', @@ -30264,7 +30264,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424447389.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424447389.png"], }, { title: 'دمنوش گل گاوزبان', @@ -30275,7 +30275,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424474750.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424474750.png"], }, { title: 'دمنوش سیب دارچین', @@ -30286,7 +30286,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424513858.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424513858.png"], }, { title: 'دمنوش اویشن عسل ', @@ -30297,7 +30297,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424543729.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424543729.png"], }, { title: 'دمنوش میکس', @@ -30308,7 +30308,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424600044.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424600044.png"], }, { title: 'چای زعفران ', @@ -30319,7 +30319,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424623958.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424623958.png"], }, { title: 'ماسالا کوچک', @@ -30330,7 +30330,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424653130.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424653130.png"], }, { title: 'ماسالا بزرگ', @@ -30341,7 +30341,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424679613.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424679613.png"], }, { title: 'ایس امریکانو', @@ -30352,7 +30352,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424722177.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424722177.png"], }, { title: 'ایس لاته', @@ -30363,7 +30363,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424758258.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424758258.png"], }, { title: 'ایس موکا', @@ -30374,7 +30374,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424789295.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424789295.png"], }, { title: 'ایس کارامل ماکیاتو', @@ -30385,7 +30385,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424816575.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424816575.png"], }, { title: 'ایس پشن اسپرسو', @@ -30396,7 +30396,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424845982.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424845982.png"], }, { title: 'ایس چاکلت ', @@ -30407,7 +30407,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424882858.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424882858.png"], }, { title: 'فراپاچینو', @@ -30418,7 +30418,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743424956422.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743424956422.png"], }, { title: 'فراپاچینو بیسکوییت ', @@ -30429,7 +30429,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425026117.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425026117.png"], }, { title: 'فراپاچینو فندق', @@ -30440,7 +30440,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425066064.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425066064.png"], }, { title: 'فراپاچینو بادام زمینی', @@ -30451,7 +30451,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425105083.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425105083.png"], }, { title: 'وان پیس ', @@ -30462,7 +30462,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425142826.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425142826.png"], }, { title: 'منگوپل', @@ -30473,7 +30473,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425184464.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425184464.png"], }, { title: 'مانتیی', @@ -30484,7 +30484,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425233026.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425233026.png"], }, { title: 'مجیک مومنت', @@ -30495,7 +30495,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425278366.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425278366.png"], }, { title: 'لیمو', @@ -30506,7 +30506,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425304489.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425304489.png"], }, { title: 'افوگاتو', @@ -30517,7 +30517,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425339605.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425339605.png"], }, { title: 'شیک شکلات', @@ -30528,7 +30528,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425371152.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425371152.png"], }, { title: 'شیک وانیل ', @@ -30539,7 +30539,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425394027.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425394027.png"], }, { title: 'شیک بادام زمینی', @@ -30550,7 +30550,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425422246.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425422246.png"], }, { title: 'هات چاکلت کوچک', @@ -30561,7 +30561,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425461105.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425461105.png"], }, { title: 'هات چاکلت بزرگ', @@ -30572,7 +30572,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425485315.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425485315.png"], }, { title: 'شیر', @@ -30583,7 +30583,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425516799.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425516799.png"], }, { title: 'شیرعسل', @@ -30594,7 +30594,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425550396.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425550396.png"], }, { title: 'شیر عسل دارچین', @@ -30605,7 +30605,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425607248.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425607248.png"], }, { title: 'کلاب گوشت', @@ -30616,7 +30616,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425767434.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425767434.png"], }, { title: 'کلاب مرغ ', @@ -30627,7 +30627,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425794235.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425794235.png"], }, { title: 'کلاب بوقلمون', @@ -30638,7 +30638,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1743425833967.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1743425833967.png"], }, { title: 'سالاد سیب زمینی', @@ -30671,7 +30671,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1745075310765.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1745075310765.png"], }, { title: 'کیک سیب دارچین', @@ -30682,7 +30682,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1745075289490.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1745075289490.png"], }, { title: 'آویشن عسل', @@ -30715,7 +30715,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1744480103541.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1744480103541.png"], }, { title: 'ماسالا شنی', @@ -30737,7 +30737,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1744480310105.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1744480310105.png"], }, { title: 'کارابیچ', @@ -30748,7 +30748,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1744480386774.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1744480386774.png"], }, { title: 'کرن دریم', @@ -30759,7 +30759,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1744480458800.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1744480458800.png"], }, { title: 'گرین گاردن', @@ -30770,7 +30770,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1744480557853.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1744480557853.png"], }, { title: 'بری موهیتو', @@ -30781,7 +30781,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1744480625767.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1744480625767.png"], }, { title: 'سیروپ کارامل', @@ -30836,7 +30836,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1744482053233.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1744482053233.png"], }, { title: 'هوراکان', @@ -30847,7 +30847,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1744482088578.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1744482088578.png"], }, { title: 'واینکا', @@ -30858,7 +30858,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1744482131071.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1744482131071.png"], }, { title: 'ارسیسا', @@ -30924,7 +30924,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1744813029366.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1744813029366.png"], }, { title: 'ویرجین کولادا', @@ -30946,7 +30946,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1745075397924.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1745075397924.png"], }, { title: 'کروسان', @@ -30979,7 +30979,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1746350274914.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1746350274914.png"], }, { title: 'پای توت فرنگی', @@ -30990,7 +30990,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1746350309090.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1746350309090.png"], }, { title: 'گارلیک چیکن/ Garlick chicken', @@ -31001,7 +31001,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 3, stockDefault: 3, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1761750232870.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1761750232870.png"], }, { title: 'پاریس برست', @@ -31012,7 +31012,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1746445205213.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1746445205213.png"], }, { title: 'اسپرسو ۱۰۰ برزیل', @@ -31155,7 +31155,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760984472872.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760984472872.png"], }, { title: 'چای سیاه لاهیجان 3کاپ', @@ -31166,7 +31166,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1749574230701.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1749574230701.png"], }, { title: 'شیک استرابلا', @@ -31188,7 +31188,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1753793881494.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1753793881494.png"], }, { title: 'شیک فروتی', @@ -31199,7 +31199,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1753793899891.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1753793899891.png"], }, { title: 'شیک ماچانگو', @@ -31210,7 +31210,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1753793935719.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1753793935719.png"], }, { title: 'پاستا ریحان و پسته ', @@ -31221,7 +31221,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760981977562.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760981977562.png"], }, { title: 'پاستا گود کرما‌‌', @@ -31232,7 +31232,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760981814392.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760981814392.png"], }, { title: 'پاستا چدارلا', @@ -31243,7 +31243,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760981750380.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760981750380.png"], }, { title: 'پاساتا پلاس', @@ -31254,7 +31254,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760981465649.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760981465649.png"], }, { title: 'هاتینو پاستا(تند)', @@ -31265,7 +31265,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760981392033.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760981392033.png"], }, { title: 'راویولی‌ پنیر و مرغ ( روزهای دوشنبه و سه شنبه )', @@ -31276,7 +31276,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760893100067.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760893100067.png"], }, { title: 'راگو', @@ -31287,7 +31287,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760892964603.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760892964603.png"], }, { title: 'چیکن', @@ -31298,7 +31298,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760892860513.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760892860513.png"], }, { title: 'میگو', @@ -31309,7 +31309,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760892744593.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760892744593.png"], }, { title: 'چیکن استیک', @@ -31320,7 +31320,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760892668573.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760892668573.png"], }, { title: 'بیکن گوشت و مرغ', @@ -31331,7 +31331,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760892529571.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760892529571.png"], }, { title: 'بادمجان', @@ -31342,7 +31342,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760892427936.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760892427936.png"], }, { title: 'پیاز کاراملی', @@ -31353,7 +31353,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760892187306.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760892187306.png"], }, { title: 'وگن استار', @@ -31364,7 +31364,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760892091585.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760892091585.png"], }, { title: 'راگوسفردو', @@ -31375,7 +31375,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760983316509.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760983316509.png"], }, { title: 'چیکناتا', @@ -31386,7 +31386,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760984684653.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760984684653.png"], }, { title: 'بیکندویچ', @@ -31397,7 +31397,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760984608997.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760984608997.png"], }, { title: 'کوکا', @@ -31408,7 +31408,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760890300457.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760890300457.png"], }, { title: 'فانتا', @@ -31419,7 +31419,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760890421825.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760890421825.png"], }, { title: 'اسپرایت', @@ -31430,7 +31430,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760890505141.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760890505141.png"], }, { title: 'کاکتوس', @@ -31441,7 +31441,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760890822242.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760890822242.png"], }, { title: 'کوکا زیرو', @@ -31452,7 +31452,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760890772796.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760890772796.png"], }, { title: 'آب معدنی', @@ -31463,7 +31463,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760890584189.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760890584189.png"], }, { title: 'آب سودا ', @@ -31485,7 +31485,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751458394662.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751458394662.png"], }, { title: 'آش رشته ترشی', @@ -31496,7 +31496,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751458332627.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751458332627.png"], }, { title: 'آش جو بدون سیرابی', @@ -31507,7 +31507,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751458284386.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751458284386.png"], }, { title: 'آش جو با سیرابی', @@ -31518,7 +31518,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751458241590.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751458241590.png"], }, { title: 'آش ترخینه', @@ -31529,7 +31529,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751458054499.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751458054499.png"], }, { title: 'کاله جوش', @@ -31540,7 +31540,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751457990529.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751457990529.png"], }, { title: 'جغور بغور', @@ -31551,7 +31551,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751457914487.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751457914487.png"], }, { title: 'پلو خورشت فسنجان ', @@ -31562,7 +31562,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751457659186.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751457659186.png"], }, { title: 'پلو خورشت قورمه سبزی', @@ -31573,7 +31573,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751457555463.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751457555463.png"], }, { title: 'پلو خورشت قیمه', @@ -31584,7 +31584,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751457401903.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751457401903.png"], }, { title: 'چلو کره', @@ -31595,7 +31595,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751457361220.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751457361220.png"], }, { title: 'دلمه ', @@ -31606,7 +31606,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751457305461.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751457305461.png"], }, { title: 'کوفته', @@ -31617,7 +31617,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751457265694.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751457265694.png"], }, { title: 'لوبیا پلو ', @@ -31628,7 +31628,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751457204685.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751457204685.png"], }, { title: 'ماکارونی ', @@ -31639,7 +31639,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751457166583.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751457166583.png"], }, { title: 'کوکو یا کتلت', @@ -31650,7 +31650,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751457113713.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751457113713.png"], }, { title: 'عدسی', @@ -31661,7 +31661,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751456994471.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751456994471.png"], }, { title: 'لوبیا', @@ -31672,7 +31672,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751456924636.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751456924636.png"], }, { title: 'املت', @@ -31683,7 +31683,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751456890468.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751456890468.png"], }, { title: 'املت شاپوری', @@ -31694,7 +31694,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751456837633.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751456837633.png"], }, { title: 'سوسیس تخم مرغ ', @@ -31705,7 +31705,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751456795641.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751456795641.png"], }, { title: 'خاگینه', @@ -31716,7 +31716,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751456757455.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751456757455.png"], }, { title: 'نیمرو', @@ -31727,7 +31727,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751456712560.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751456712560.png"], }, { title: 'صبحانه ایرانی', @@ -31738,7 +31738,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751456668824.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751456668824.png"], }, { title: 'چای', @@ -31749,7 +31749,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751456591727.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751456591727.png"], }, { title: 'چای مخصوص', @@ -31760,7 +31760,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751456482433.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751456482433.png"], }, { title: 'دمنوش آویشن', @@ -31771,7 +31771,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751456436613.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751456436613.png"], }, { title: 'دمنوش چای ترش', @@ -31782,7 +31782,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751456360232.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751456360232.png"], }, { title: 'دمنوش آرام بخش', @@ -31793,7 +31793,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751456209480.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751456209480.png"], }, { title: 'دمنوش،گل گاو زبان', @@ -31804,7 +31804,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751456113962.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751456113962.png"], }, { title: 'دوغ سنتی', @@ -31815,7 +31815,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751456034461.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751456034461.png"], }, { title: 'شربت سنتی', @@ -31826,7 +31826,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751455922149.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751455922149.png"], }, { title: 'کباب تابه ای', @@ -31837,7 +31837,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1753715784744.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1753715784744.png"], }, { title: 'پلو مرغ ویژه', @@ -31848,7 +31848,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751455810504.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751455810504.png"], }, { title: 'شله زرد', @@ -31859,7 +31859,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751455743435.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751455743435.png"], }, { title: 'حلوا', @@ -31870,7 +31870,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751455702434.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751455702434.png"], }, { title: 'زیره جوش', @@ -31881,7 +31881,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751455541519.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751455541519.png"], }, { title: 'سیب زمینی پنیری', @@ -31892,7 +31892,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751455318661.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751455318661.png"], }, { title: 'سیب زمینی سرخ کرده', @@ -31903,7 +31903,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751455184309.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751455184309.png"], }, { title: 'کشک و بادمجان', @@ -31914,7 +31914,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751455143526.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751455143526.png"], }, { title: 'میرزا قاسمی', @@ -31925,7 +31925,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751455054797.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751455054797.png"], }, { title: 'خوراک بندری', @@ -31936,7 +31936,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751454996470.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751454996470.png"], }, { title: 'آبدوغ خیار', @@ -31947,7 +31947,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751454938256.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751454938256.png"], }, { title: 'سالاد ماکارونی', @@ -31958,7 +31958,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751454495145.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751454495145.png"], }, { title: 'بورانی اسفناج', @@ -31969,7 +31969,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1751454418603.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1751454418603.png"], }, { title: 'جوسی لوسی برگر', @@ -32618,7 +32618,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1753185176937.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1753185176937.png"], }, { title: 'اسموکی چیکن ', @@ -32629,7 +32629,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760893752111.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760893752111.png"], }, { title: 'هات پرو ', @@ -32640,7 +32640,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760893651025.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760893651025.png"], }, { title: 'استاف چیکن ', @@ -32651,7 +32651,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760893974847.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760893974847.png"], }, { title: 'هات پرونی ', @@ -32662,7 +32662,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760982156044.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760982156044.png"], }, { title: 'چیکن اسموکی ', @@ -32673,7 +32673,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760982559459.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760982559459.png"], }, { title: 'خامه و خردل ', @@ -32684,7 +32684,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760981298852.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760981298852.png"], }, { title: 'کرم ماشرومه ', @@ -32695,7 +32695,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760981202234.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760981202234.png"], }, { title: 'چیز فتوچینی ', @@ -32706,7 +32706,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760981163990.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760981163990.png"], }, { title: 'اسپیرولینا پاستا ( روزهای شنبه و یکشنبه )', @@ -32717,7 +32717,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760982358410.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760982358410.png"], }, { title: 'پشن لایت ', @@ -32739,7 +32739,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1753792542995.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1753792542995.png"], }, { title: 'پنیر برشته', @@ -32750,7 +32750,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1753793163992.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1753793163992.png"], }, { title: 'ساندویچ استیک', @@ -32772,7 +32772,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1753795504991.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1753795504991.png"], }, { title: 'چیکن رپ', @@ -32783,7 +32783,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1753793299396.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1753793299396.png"], }, { title: 'نیمرو', @@ -32794,7 +32794,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1753793605530.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1753793605530.png"], }, { title: 'املت', @@ -32805,7 +32805,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1753793659160.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1753793659160.png"], }, { title: 'رست سیب‌زمینی و قارچ', @@ -32838,7 +32838,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1754752902259.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1754752902259.png"], }, { title: 'چای سبز گل سرخ', @@ -32849,7 +32849,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1754752948593.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1754752948593.png"], }, { title: 'چای سبز و گل یاسمن', @@ -32860,7 +32860,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1754752987903.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1754752987903.png"], }, { title: 'چای سبز لیمو', @@ -32871,7 +32871,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1754753062762.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1754753062762.png"], }, { title: 'چای سفید نخدی', @@ -32882,7 +32882,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1754753229195.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1754753229195.png"], }, { title: 'چای سفید مخملی', @@ -32893,7 +32893,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1754753270649.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1754753270649.png"], }, { title: 'میت درینک', @@ -32948,7 +32948,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1755436714685.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1755436714685.png"], }, { title: 'ایس ماچا انبه', @@ -32959,7 +32959,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1755436648303.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1755436648303.png"], }, { title: 'ایس ماچا', @@ -32981,7 +32981,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1755436593841.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1755436593841.png"], }, { title: 'ایس تی لیمو', @@ -32992,7 +32992,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1755436507683.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1755436507683.png"], }, { title: 'چیز فرایز مدیوم', @@ -33047,7 +33047,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1756992490158.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1756992490158.png"], }, { title: 'اسپرسو 50/50', @@ -33058,7 +33058,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1757173293195.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1757173293195.png"], }, { title: 'مارشمالو چاکلت', @@ -33113,7 +33113,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1766415350354.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1766415350354.png"], }, { title: 'پامکین لاته', @@ -33124,7 +33124,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1757439519150.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1757439519150.png"], }, { title: 'ایس پامکین لاته', @@ -33135,7 +33135,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1757439652703.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1757439652703.png"], }, { title: 'نان سنگک سنتی', @@ -33212,7 +33212,7 @@ export const foodsData: FoodData[] = [{ isActive: false, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1759326002631.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1759326002631.png"], }, { title: 'استرابری کیس - Strawberry kiss', @@ -33278,7 +33278,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1759837170128.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1759837170128.png"], }, { title: 'تیرامیسو', @@ -33322,7 +33322,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760984798612.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760984798612.png"], }, { title: 'موهیتو', @@ -33333,7 +33333,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760985010771.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760985010771.png"], }, { title: 'استوایی', @@ -33344,7 +33344,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1760985092729.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1760985092729.png"], }, { title: 'کوکو هات چاکلت', @@ -33575,7 +33575,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1765281700365.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1765281700365.png"], }, { title: 'نیمرو بیف', @@ -33586,7 +33586,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1765281612636.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1765281612636.png"], }, { title: 'پرشین برک', @@ -33641,7 +33641,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1762604734494.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1762604734494.png"], }, { title: 'خوراک جوجه ', @@ -34026,7 +34026,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1765530634407.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1765530634407.png"], }, { title: 'استیک میلانو ', @@ -34048,7 +34048,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1765900043529.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1765900043529.png"], }, { title: 'لاته عسل دارچین', @@ -34059,7 +34059,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1765900091502.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1765900091502.png"], }, { title: 'اسپنیش لته', @@ -34070,7 +34070,7 @@ export const foodsData: FoodData[] = [{ isActive: true, stock: 1, stockDefault: 1, - images: ["https://dmenu.danakcorp.com/uploads/images/food/food_1765900157490.png"], + images: ["https://dmenu.danakcorp.com/uploads/images/product/food_1765900157490.png"], }, { title: 'هات پسته', diff --git a/src/seeders/data/roles.data.ts b/src/seeders/data/roles.data.ts index 312cae4..f76b9cf 100644 --- a/src/seeders/data/roles.data.ts +++ b/src/seeders/data/roles.data.ts @@ -1,4 +1,4 @@ -import { Permission } from '../../common/enums/permission.enum'; +import { Permission } from '../../../common/enums/permission.enum'; export interface RoleConfig { name: string; @@ -26,7 +26,7 @@ export const rolesData: RoleConfig[] = [ { name: 'مدیر ( پلن ویژه)', isSystem: false, - permissionFilter: () => true, // All permissions for restaurant role + permissionFilter: () => true, // All permissions for shop role }, { name: 'حسابدار ', diff --git a/src/seeders/data/restaurants.data.ts b/src/seeders/data/shops.data.ts similarity index 99% rename from src/seeders/data/restaurants.data.ts rename to src/seeders/data/shops.data.ts index 3fa3f42..3568f61 100644 --- a/src/seeders/data/restaurants.data.ts +++ b/src/seeders/data/shops.data.ts @@ -1,6 +1,6 @@ -import { PlanEnum } from 'src/modules/restaurants/interface/plan.interface'; +import { PlanEnum } from '../../../modules/shops/interface/plan.interface'; -export interface RestaurantData { +export interface ShopData { name: string; slug: string; domain: string; @@ -21,7 +21,7 @@ export interface RestaurantData { subscriptionId: string; } -export const restaurantsData: RestaurantData[] = [ +export const shopsData: ShopData[] = [ { name: 'ژیوان', slug: 'zhivan', diff --git a/src/seeders/delivery-methods.seeder.ts b/src/seeders/delivery-methods.seeder.ts index 8970e9c..6fc321a 100644 --- a/src/seeders/delivery-methods.seeder.ts +++ b/src/seeders/delivery-methods.seeder.ts @@ -1,23 +1,23 @@ import type { EntityManager } from '@mikro-orm/core'; import { Delivery } from '../modules/delivery/entities/delivery.entity'; -import type { Restaurant } from '../modules/restaurants/entities/restaurant.entity'; +import type { Shop } from ../../..shops/entities/shop.entity'; import { deliveryMethodsData } from './data/delivery-methods.data'; import { DeliveryFeeTypeEnum } from 'src/modules/delivery/interface/delivery'; export class DeliveryMethodsSeeder { - async run(em: EntityManager, restaurants: Restaurant[]): Promise { - for (const restaurant of restaurants) { - if (!restaurant) continue; + async run(em: EntityManager, shops: Shop[]): Promise { + for (const shop of shops) { + if (!shop) continue; for (const methodData of deliveryMethodsData) { const existing = await em.findOne(Delivery, { - restaurant: { id: restaurant.id }, + shop: { id: shop.id }, method: methodData.method, }); if (!existing) { const delivery = em.create(Delivery, { - restaurant, + shop, method: methodData.method, description: methodData.description, deliveryFee: methodData.deliveryFee, diff --git a/src/seeders/foods.seeder.ts b/src/seeders/foods.seeder.ts deleted file mode 100644 index 19e87eb..0000000 --- a/src/seeders/foods.seeder.ts +++ /dev/null @@ -1,67 +0,0 @@ -import type { EntityManager } from '@mikro-orm/core'; -import { Food } from '../modules/foods/entities/food.entity'; -import type { Restaurant } from '../modules/restaurants/entities/restaurant.entity'; -import type { Category } from '../modules/foods/entities/category.entity'; -import { foodsData } from './data/foods.data'; - -export class FoodsSeeder { - async run( - em: EntityManager, - restaurantsMap: Map, - categoriesMap: Map, - ): Promise { - for (const foodData of foodsData) { - const restaurant = restaurantsMap.get(foodData.restaurantSlug); - const key = `${foodData.restaurantSlug}-${foodData.categoryTitle}`; - - const normalize = (s: string) => (s || '').replace(/\s+/g, ' ').trim(); - - let category = categoriesMap.get(key); - - // Fallback: try to find category by normalized title if exact key not found - if (!category) { - for (const [k, v] of categoriesMap.entries()) { - const parts = k.split('-'); - const kSlug = parts[0]; - const kTitle = parts.slice(1).join('-'); - if (kSlug === foodData.restaurantSlug && normalize(kTitle) === normalize(foodData.categoryTitle)) { - category = v; - break; - } - } - } - - if (!restaurant || !category) { - console.warn( - `Skipping food \"${foodData.title}\" — missing ${!restaurant ? 'restaurant' : 'category'} for key ${key}`, - ); - continue; - } - - const existing = await em.findOne(Food, { - title: foodData.title, - restaurant, - }); - - if (!existing) { - const food = em.create(Food, { - title: foodData.title, - desc: foodData.desc, - content: foodData.content, - price: foodData.price, - restaurant, - category, - isActive: foodData.isActive, - discount: foodData.discount ?? 0, - score: foodData.score ?? 0, - images: foodData.images, - isSpecialOffer: foodData.isSpecialOffer ?? false, - }); - - em.persist(food); - } - } - - await em.flush(); - } -} diff --git a/src/seeders/inventory.seeder.ts b/src/seeders/inventory.seeder.ts index 716715e..c169d07 100644 --- a/src/seeders/inventory.seeder.ts +++ b/src/seeders/inventory.seeder.ts @@ -1,20 +1,20 @@ import type { EntityManager } from '@mikro-orm/core'; -import { Food } from '../modules/foods/entities/food.entity'; +import { Product } from ../../..products/entities/product.entity'; import { Inventory } from '../modules/inventory/entities/inventory.entity'; export class InventorySeeder { async run(em: EntityManager): Promise { - const foods = await em.find(Food, {}); + const products = await em.find(Product, {}); - for (const food of foods) { - // Check if inventory already exists for this food + for (const product of products) { + // Check if inventory already exists for this product const existingInventory = await em.findOne(Inventory, { - food: { id: food.id }, + product: { id: product.id }, }); if (!existingInventory) { const inventory = em.create(Inventory, { - food, + product, totalStock: 50, availableStock: 50, }); diff --git a/src/seeders/notification-preferences.seeder.ts b/src/seeders/notification-preferences.seeder.ts index 0791d7e..c923942 100644 --- a/src/seeders/notification-preferences.seeder.ts +++ b/src/seeders/notification-preferences.seeder.ts @@ -1,22 +1,22 @@ import type { EntityManager } from '@mikro-orm/core'; import { NotificationPreference } from '../modules/notifications/entities/notification-preference.entity'; -import type { Restaurant } from '../modules/restaurants/entities/restaurant.entity'; +import type { Shop } from ../../..shops/entities/shop.entity'; import { notificationPreferencesData } from './data/notification-preferences.data'; export class NotificationPreferencesSeeder { - async run(em: EntityManager, restaurants: Restaurant[]): Promise { - for (const restaurant of restaurants) { - if (!restaurant) continue; + async run(em: EntityManager, shops: Shop[]): Promise { + for (const shop of shops) { + if (!shop) continue; for (const preferenceData of notificationPreferencesData) { const existing = await em.findOne(NotificationPreference, { - restaurant: { id: restaurant.id }, + shop: { id: shop.id }, title: preferenceData.title, }); if (!existing) { const preference = em.create(NotificationPreference, { - restaurant, + shop, title: preferenceData.title, channels: preferenceData.channels, }); diff --git a/src/seeders/notifications.seeder.ts b/src/seeders/notifications.seeder.ts index 33b97e0..76a8110 100644 --- a/src/seeders/notifications.seeder.ts +++ b/src/seeders/notifications.seeder.ts @@ -2,40 +2,40 @@ import type { EntityManager } from '@mikro-orm/core'; import { Notification } from '../modules/notifications/entities/notification.entity'; import { Admin } from '../modules/admin/entities/admin.entity'; import { User } from '../modules/users/entities/user.entity'; -import { Restaurant } from '../modules/restaurants/entities/restaurant.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; import { NotifTitleEnum } from '../modules/notifications/interfaces/notification.interface'; export class NotificationsSeeder { /** - * Seeds notifications for all admins and users for every restaurant. - * Ensures up to 33 notifications exist per (restaurant, admin) and (restaurant, user). + * Seeds notifications for all admins and users for every shop. + * Ensures up to 33 notifications exist per (shop, admin) and (shop, user). */ async run(em: EntityManager): Promise { - const restaurants = await em.find(Restaurant, {}); + const shops = await em.find(Shop, {}); const admins = await em.find(Admin, {}); const users = await em.find(User, {}); const titles = Object.values(NotifTitleEnum); - for (const restaurant of restaurants) { - if (!restaurant) continue; + for (const shop of shops) { + if (!shop) continue; // Admin notifications for (const admin of admins) { if (!admin) continue; const existingCount = await em.count(Notification, { - restaurant: { id: restaurant.id }, + shop: { id: shop.id }, admin: { id: admin.id }, }); const toCreate = Math.max(0, 33 - (existingCount || 0)); for (let i = 0; i < toCreate; i++) { const notif = em.create(Notification, { - restaurant, + shop, admin, title: titles[i % titles.length] as NotifTitleEnum, - content: `Seeded notification ${i + 1} for admin ${admin.id} at ${restaurant.slug}`, + content: `Seeded notification ${i + 1} for admin ${admin.id} at ${shop.slug}`, }); em.persist(notif); } @@ -46,17 +46,17 @@ export class NotificationsSeeder { if (!user) continue; const existingCount = await em.count(Notification, { - restaurant: { id: restaurant.id }, + shop: { id: shop.id }, user: { id: user.id }, }); const toCreate = Math.max(0, 33 - (existingCount || 0)); for (let i = 0; i < toCreate; i++) { const notif = em.create(Notification, { - restaurant, + shop, user, title: titles[i % titles.length] as NotifTitleEnum, - content: `Seeded notification ${i + 1} for user ${user.id} at ${restaurant.slug}`, + content: `Seeded notification ${i + 1} for user ${user.id} at ${shop.slug}`, }); em.persist(notif); } diff --git a/src/seeders/payment-methods.seeder.ts b/src/seeders/payment-methods.seeder.ts index 1765ce0..4acf4a8 100644 --- a/src/seeders/payment-methods.seeder.ts +++ b/src/seeders/payment-methods.seeder.ts @@ -1,22 +1,22 @@ import type { EntityManager } from '@mikro-orm/core'; import { PaymentMethod } from '../modules/payments/entities/payment-method.entity'; -import type { Restaurant } from '../modules/restaurants/entities/restaurant.entity'; +import type { Shop } from ../../..shops/entities/shop.entity'; import { paymentMethodsData } from './data/payment-methods.data'; export class PaymentMethodsSeeder { - async run(em: EntityManager, restaurants: Restaurant[]): Promise { - for (const restaurant of restaurants) { - if (!restaurant) continue; + async run(em: EntityManager, shops: Shop[]): Promise { + for (const shop of shops) { + if (!shop) continue; for (const methodData of paymentMethodsData) { const existing = await em.findOne(PaymentMethod, { - restaurant: { id: restaurant.id }, + shop: { id: shop.id }, method: methodData.method, }); if (!existing) { const paymentMethod = em.create(PaymentMethod, { - restaurant, + shop, method: methodData.method, description: methodData.description, enabled: methodData.enabled, diff --git a/src/seeders/products.seeder.ts b/src/seeders/products.seeder.ts new file mode 100644 index 0000000..2596e7a --- /dev/null +++ b/src/seeders/products.seeder.ts @@ -0,0 +1,67 @@ +import type { EntityManager } from '@mikro-orm/core'; +import { Product } from '../modules/products/entities/product.entity'; +import type { Shop } from '../modules/shops/entities/shop.entity'; +import type { Category } from '../modules/products/entities/category.entity'; +import { productsData } from './data/products.data'; + +export class ProductsSeeder { + async run( + em: EntityManager, + shopsMap: Map, + categoriesMap: Map, + ): Promise { + for (const productData of productsData) { + const shop = shopsMap.get(productData.shopSlug); + const key = `${productData.shopSlug}-${productData.categoryTitle}`; + + const normalize = (s: string) => (s || '').replace(/\s+/g, ' ').trim(); + + let category = categoriesMap.get(key); + + // Fallback: try to find category by normalized title if exact key not found + if (!category) { + for (const [k, v] of categoriesMap.entries()) { + const parts = k.split('-'); + const kSlug = parts[0]; + const kTitle = parts.slice(1).join('-'); + if (kSlug === productData.shopSlug && normalize(kTitle) === normalize(productData.categoryTitle)) { + category = v; + break; + } + } + } + + if (!shop || !category) { + console.warn( + `Skipping product \"${productData.title}\" — missing ${!shop ? 'shop' : 'category'} for key ${key}`, + ); + continue; + } + + const existing = await em.findOne(Product, { + title: productData.title, + shop, + }); + + if (!existing) { + const product = em.create(Product, { + title: productData.title, + desc: productData.desc, + content: productData.content, + price: productData.price, + shop, + category, + isActive: productData.isActive, + discount: productData.discount ?? 0, + score: productData.score ?? 0, + images: productData.images, + isSpecialOffer: productData.isSpecialOffer ?? false, + }); + + em.persist(product); + } + } + + await em.flush(); + } +} diff --git a/src/seeders/restaurants.seeder.ts b/src/seeders/restaurants.seeder.ts deleted file mode 100644 index cadd9bb..0000000 --- a/src/seeders/restaurants.seeder.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { EntityManager } from '@mikro-orm/core'; -import { Restaurant } from '../modules/restaurants/entities/restaurant.entity'; -import { restaurantsData } from './data/restaurants.data'; - -export class RestaurantsSeeder { - async run(em: EntityManager): Promise> { - const restaurantsMap = new Map(); - - for (const restaurantData of restaurantsData) { - let restaurant = await em.findOne(Restaurant, { slug: restaurantData.slug }); - if (!restaurant) { - restaurant = em.create(Restaurant, { - ...restaurantData, - subscriptionStartDate: new Date('2026-01-01'), - subscriptionEndDate: new Date('2026-01-07'), - isActive: true, - }); - em.persist(restaurant); - } - restaurantsMap.set(restaurantData.slug, restaurant); - } - - await em.flush(); - return restaurantsMap; - } -} diff --git a/src/seeders/schedules.seeder.ts b/src/seeders/schedules.seeder.ts index dd72389..8b23737 100644 --- a/src/seeders/schedules.seeder.ts +++ b/src/seeders/schedules.seeder.ts @@ -1,19 +1,19 @@ import type { EntityManager } from '@mikro-orm/core'; -import { Schedule } from '../modules/restaurants/entities/schedule.entity'; -import type { Restaurant } from '../modules/restaurants/entities/restaurant.entity'; +import { Schedule } from ../../..shops/entities/schedule.entity'; +import type { Shop } from ../../..shops/entities/shop.entity'; import { timeSlots } from './data/schedules.data'; export class SchedulesSeeder { - async run(em: EntityManager, restaurants: Restaurant[]): Promise { - for (const restaurant of restaurants) { - if (!restaurant) continue; + async run(em: EntityManager, shops: Shop[]): Promise { + for (const shop of shops) { + if (!shop) continue; // Create schedules for each day (0 = Sunday, 6 = Saturday) for (let weekDay = 0; weekDay <= 6; weekDay++) { // Create 3 schedules per day for (const timeSlot of timeSlots) { const existing = await em.findOne(Schedule, { - restId: restaurant.id, + restId: shop.id, weekDay, openTime: timeSlot.openTime, closeTime: timeSlot.closeTime, @@ -21,7 +21,7 @@ export class SchedulesSeeder { if (!existing) { const schedule = em.create(Schedule, { - restId: restaurant.id, + restId: shop.id, weekDay, openTime: timeSlot.openTime, closeTime: timeSlot.closeTime, diff --git a/src/seeders/shops.seeder.ts b/src/seeders/shops.seeder.ts new file mode 100644 index 0000000..979fbd7 --- /dev/null +++ b/src/seeders/shops.seeder.ts @@ -0,0 +1,26 @@ +import type { EntityManager } from '@mikro-orm/core'; +import { Shop } from '../modules/shops/entities/shop.entity'; +import { shopsData } from './data/shops.data'; + +export class ShopsSeeder { + async run(em: EntityManager): Promise> { + const shopsMap = new Map(); + + for (const shopData of shopsData) { + let shop = await em.findOne(Shop, { slug: shopData.slug }); + if (!shop) { + shop = em.create(Shop, { + ...shopData, + subscriptionStartDate: new Date('2026-01-01'), + subscriptionEndDate: new Date('2026-01-07'), + isActive: true, + }); + em.persist(shop); + } + shopsMap.set(shopData.slug, shop); + } + + await em.flush(); + return shopsMap; + } +} diff --git a/src/seeders/user-wallets.seeder.ts b/src/seeders/user-wallets.seeder.ts index 068afd1..553f398 100644 --- a/src/seeders/user-wallets.seeder.ts +++ b/src/seeders/user-wallets.seeder.ts @@ -1,26 +1,26 @@ import type { EntityManager } from '@mikro-orm/core'; import { User } from '../modules/users/entities/user.entity'; -import { Restaurant } from '../modules/restaurants/entities/restaurant.entity'; +import { Shop } from ../../..shops/entities/shop.entity'; import { WalletTransaction } from '../modules/users/entities/wallet-transaction.entity'; import { WalletTransactionReason, WalletTransactionType } from 'src/modules/users/interface/wallet'; export class UserWalletsSeeder { async run(em: EntityManager): Promise { const users = await em.find(User, {}); - const restaurants = await em.find(Restaurant, {}); + const shops = await em.find(Shop, {}); for (const user of users) { - for (const restaurant of restaurants) { - // Check if wallet already exists for this user-restaurant combination + for (const shop of shops) { + // Check if wallet already exists for this user-shop combination const existingWallet = await em.findOne(WalletTransaction, { user: { id: user.id }, - restaurant: { id: restaurant.id }, + shop: { id: shop.id }, }); if (!existingWallet) { const wallet = em.create(WalletTransaction, { user, - restaurant, + shop, balance: 150000000, amount: 150000000, type: WalletTransactionType.CREDIT,