From 31b7dfba7d9dbf4a17e1f16c665adf041a3ff438 Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Mon, 5 Jan 2026 11:58:46 +0330 Subject: [PATCH] update sub --- .../controllers/restaurants.controller.ts | 14 ++++++++++++++ .../restaurants/dto/update-subscription.dto.ts | 14 ++++++++++++++ .../restaurants/providers/restaurants.service.ts | 16 ++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 src/modules/restaurants/dto/update-subscription.dto.ts diff --git a/src/modules/restaurants/controllers/restaurants.controller.ts b/src/modules/restaurants/controllers/restaurants.controller.ts index f2c7979..89f1b20 100644 --- a/src/modules/restaurants/controllers/restaurants.controller.ts +++ b/src/modules/restaurants/controllers/restaurants.controller.ts @@ -3,6 +3,7 @@ import { RestaurantsService } from '../providers/restaurants.service'; import { CreateRestaurantDto } from '../dto/create-restaurant.dto'; import { UpdateRestaurantDto } from '../dto/update-restaurant.dto'; import { UpgradeSubscriptionDto } from '../dto/upgrade-subscription.dto'; +import { UpdateSubscriptionDto } from '../dto/update-subscription.dto'; import { FindRestaurantsDto } from '../dto/find-restaurants.dto'; import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard'; import { @@ -122,4 +123,17 @@ export class RestaurantsController { return this.restaurantsService.upgradeSubscription(subscriptionId, upgradeSubscriptionDto); } + @UseGuards(SuperAdminAuthGuard) + @ApiBearerAuth() + @ApiOperation({ summary: 'Update subscription for a restaurant' }) + @ApiParam({ name: 'restaurantId', required: true, description: 'Restaurant ID' }) + @ApiBody({ type: UpdateSubscriptionDto }) + @Patch('super-admin/restaurants/:restaurantId/subscription') + updateSubscription( + @Param('restaurantId') restaurantId: string, + @Body() updateSubscriptionDto: UpdateSubscriptionDto + ) { + return this.restaurantsService.updateSubscription(restaurantId, updateSubscriptionDto); + } + } diff --git a/src/modules/restaurants/dto/update-subscription.dto.ts b/src/modules/restaurants/dto/update-subscription.dto.ts new file mode 100644 index 0000000..8bb80d5 --- /dev/null +++ b/src/modules/restaurants/dto/update-subscription.dto.ts @@ -0,0 +1,14 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsString, IsDate } from 'class-validator'; +import { Type } from 'class-transformer'; + +export class UpdateSubscriptionDto { + @ApiProperty({ example: 'sub_1234567890', description: 'Subscription ID' }) + @IsString() + subscriptionId!: string; + + @ApiProperty({ example: '2025-12-31', description: 'New subscription end date' }) + @Type(() => Date) + @IsDate() + subscriptionEndDate!: Date; +} diff --git a/src/modules/restaurants/providers/restaurants.service.ts b/src/modules/restaurants/providers/restaurants.service.ts index 3018aef..663a9f0 100644 --- a/src/modules/restaurants/providers/restaurants.service.ts +++ b/src/modules/restaurants/providers/restaurants.service.ts @@ -2,6 +2,7 @@ import { BadRequestException, Injectable, NotFoundException } from '@nestjs/comm import { CreateRestaurantDto } from '../dto/create-restaurant.dto'; import { UpdateRestaurantDto } from '../dto/update-restaurant.dto'; import { UpgradeSubscriptionDto } from '../dto/upgrade-subscription.dto'; +import { UpdateSubscriptionDto } from '../dto/update-subscription.dto'; import { Restaurant } from '../entities/restaurant.entity'; import { EntityManager } from '@mikro-orm/postgresql'; import { RestRepository } from '../repositories/rest.repository'; @@ -177,4 +178,19 @@ export class RestaurantsService { return restaurant; } + + async updateSubscription(restaurantId: string, dto: UpdateSubscriptionDto): Promise { + const restaurant = await this.restRepository.findOne({ id: restaurantId }); + + if (!restaurant) { + throw new NotFoundException(RestMessage.NOT_FOUND); + } + + restaurant.subscriptionId = dto.subscriptionId; + restaurant.subscriptionEndDate = dto.subscriptionEndDate; + + await this.em.persistAndFlush(restaurant); + + return restaurant; + } }