diff --git a/src/modules/contact/interface/interface.ts b/src/modules/contact/interface/interface.ts index 827a6f6..5b22c21 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 = 'shop', + SHOP = 'shop', } diff --git a/src/modules/contact/providers/contact.service.ts b/src/modules/contact/providers/contact.service.ts index 39f87af..f4b288e 100644 --- a/src/modules/contact/providers/contact.service.ts +++ b/src/modules/contact/providers/contact.service.ts @@ -22,7 +22,7 @@ export class ContactService { let shop: Shop | null = null; - if ((restId || slug) && dto.scope === ContactScope.RESTAURANT) { + if ((restId || slug) && dto.scope === ContactScope.SHOP) { shop = await this.em.findOne(Shop, { ...(restId ? { id: restId } : {}) , ...(slug ? { slug: slug } : {}) @@ -49,7 +49,7 @@ export class ContactService { orderBy: dto.orderBy, order: dto.order, status: dto.status, - scope: ContactScope.RESTAURANT, + scope: ContactScope.SHOP, restaurantId }); } diff --git a/src/modules/coupons/controllers/coupon.controller.ts b/src/modules/coupons/controllers/coupon.controller.ts index 9614978..7915a47 100644 --- a/src/modules/coupons/controllers/coupon.controller.ts +++ b/src/modules/coupons/controllers/coupon.controller.ts @@ -6,12 +6,6 @@ import { FindCouponsDto } from '../dto/find-coupons.dto'; import { ApiTags, ApiOperation, - ApiCreatedResponse, - ApiOkResponse, - ApiNotFoundResponse, - ApiQuery, - ApiBody, - ApiParam, ApiBearerAuth, ApiHeader, } from '@nestjs/swagger'; @@ -24,89 +18,65 @@ import { Permissions } from 'src/common/decorators/permissions.decorator'; @ApiTags('coupons') @Controller() +@ApiBearerAuth() export class CouponController { constructor(private readonly couponService: CouponService) { } - @UseGuards(AuthGuard) - @ApiBearerAuth() @Get('public/coupons/me') + @UseGuards(AuthGuard) @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 }) - @ApiQuery({ name: 'search', required: false, type: String }) - @ApiQuery({ name: 'orderBy', required: false, type: String }) - @ApiQuery({ name: 'order', required: false, enum: ['asc', 'desc'] }) - @ApiQuery({ name: 'type', required: false, enum: ['PERCENTAGE', 'FIXED'] }) - @ApiQuery({ name: 'isActive', required: false, type: Boolean }) - getMyCoupons(@Query() dto: FindCouponsDto, @ShopId() restId: string) { - return this.couponService.findAll(restId, dto); + getMyCoupons(@Query() dto: FindCouponsDto, @ShopId() shopId: string) { + return this.couponService.findAll(shopId, dto); } - /*** Admin ***/ + + //========================== Admin ======================= + @UseGuards(AdminAuthGuard) - @ApiBearerAuth() @Permissions(Permission.MANAGE_COUPONS) @Post('admin/coupons') @ApiOperation({ summary: 'Create a new coupon' }) - @ApiCreatedResponse({ description: 'The coupon has been successfully created.', type: CreateCouponDto }) - @ApiBody({ type: CreateCouponDto }) - create(@Body() createCouponDto: CreateCouponDto, @ShopId() restId: string) { - return this.couponService.create(restId, createCouponDto); + create(@Body() createCouponDto: CreateCouponDto, @ShopId() shopId: string) { + return this.couponService.create(shopId, createCouponDto); } @UseGuards(AdminAuthGuard) - @ApiBearerAuth() @Permissions(Permission.MANAGE_COUPONS) @Get('admin/coupons') @ApiOperation({ summary: 'Get a paginated list of coupons' }) - @ApiQuery({ name: 'page', required: false, type: Number }) - @ApiQuery({ name: 'limit', required: false, type: Number }) - @ApiQuery({ name: 'search', required: false, type: String }) - @ApiQuery({ name: 'orderBy', required: false, type: String }) - @ApiQuery({ name: 'order', required: false, enum: ['asc', 'desc'] }) - @ApiQuery({ name: 'type', required: false, enum: ['PERCENTAGE', 'FIXED'] }) - @ApiQuery({ name: 'isActive', required: false, type: Boolean }) - findAll(@Query() dto: FindCouponsDto, @ShopId() restId: string) { - return this.couponService.findAll(restId, dto); + findAll(@Query() dto: FindCouponsDto, @ShopId() shopId: string) { + return this.couponService.findAll(shopId, dto); } @UseGuards(AdminAuthGuard) - @ApiBearerAuth() @Permissions(Permission.MANAGE_COUPONS) @Get('admin/coupons/:id') @ApiOperation({ summary: 'Get a coupon by id' }) - @ApiParam({ name: 'id', required: true }) findById(@Param('id') id: string) { return this.couponService.findById(id); } @UseGuards(AdminAuthGuard) - @ApiBearerAuth() @Permissions(Permission.MANAGE_COUPONS) @Patch('admin/coupons/:id') @ApiOperation({ summary: 'Update a coupon' }) - @ApiParam({ name: 'id', required: true }) - @ApiBody({ type: UpdateCouponDto }) update(@Param('id') id: string, @Body() updateCouponDto: UpdateCouponDto) { return this.couponService.update(id, updateCouponDto); } @UseGuards(AdminAuthGuard) - @ApiBearerAuth() @Permissions(Permission.MANAGE_COUPONS) @Delete('admin/coupons/:id') @ApiOperation({ summary: 'Delete (soft) a coupon' }) - @ApiParam({ name: 'id', required: true }) remove(@Param('id') id: string) { return this.couponService.remove(id); } @UseGuards(AdminAuthGuard) - @ApiBearerAuth() @Permissions(Permission.MANAGE_COUPONS) @Get('admin/coupons/generate-code') @ApiOperation({ summary: 'generate a coupon code' }) - generateCouponCode(@ShopId() restId: string) { - return this.couponService.generateCouponCode(restId); + generateCouponCode(@ShopId() shopId: string) { + return this.couponService.generateCouponCode(shopId); } } diff --git a/src/modules/coupons/dto/create-coupon.dto.ts b/src/modules/coupons/dto/create-coupon.dto.ts index 5a61813..fa18f71 100644 --- a/src/modules/coupons/dto/create-coupon.dto.ts +++ b/src/modules/coupons/dto/create-coupon.dto.ts @@ -93,7 +93,7 @@ export class CreateCouponDto { description: 'Array of product category IDs. If empty, coupon applies to all categories.', type: [String], }) - foodCategories?: string[]; + productCategories?: string[]; @IsOptional() @IsArray() diff --git a/src/modules/coupons/entities/coupon.entity.ts b/src/modules/coupons/entities/coupon.entity.ts index 4dc7dfa..65785c4 100644 --- a/src/modules/coupons/entities/coupon.entity.ts +++ b/src/modules/coupons/entities/coupon.entity.ts @@ -53,7 +53,7 @@ export class Coupon extends BaseEntity { isActive: boolean = true; @Property({ type: 'json', nullable: true }) - foodCategories?: string[]; // Array of category IDs + productCategories?: string[]; // Array of category IDs @Property({ type: 'json', nullable: true }) products?: string[]; // Array of product IDs diff --git a/src/modules/coupons/providers/coupon.service.ts b/src/modules/coupons/providers/coupon.service.ts index 7d42276..059cce1 100644 --- a/src/modules/coupons/providers/coupon.service.ts +++ b/src/modules/coupons/providers/coupon.service.ts @@ -17,7 +17,7 @@ export class CouponService { private readonly couponRepository: CouponRepository, private readonly shopRepository: ShopRepository, private readonly em: EntityManager, - ) {} + ) { } async create(restId: string, createCouponDto: CreateCouponDto): Promise { const shop = await this.shopRepository.findOne({ id: restId }); @@ -62,7 +62,7 @@ export class CouponService { endDate: createCouponDto.endDate ? new Date(createCouponDto.endDate) : undefined, isActive: createCouponDto.isActive ?? true, usedCount: 0, - foodCategories: createCouponDto.foodCategories, + productCategories: createCouponDto.productCategories, products: createCouponDto.products, userPhone: createCouponDto.userPhone, }; @@ -138,7 +138,7 @@ export class CouponService { if (dto.startDate !== undefined) coupon.startDate = dto.startDate ? new Date(dto.startDate) : undefined; 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.productCategories !== undefined) coupon.productCategories = dto.productCategories; if (dto.products !== undefined) coupon.products = dto.products; if (dto.userPhone !== undefined) coupon.userPhone = dto.userPhone;