import { Body, Controller, Delete, Get, Param, Patch, Post, Query } from "@nestjs/common"; import { ApiOperation, ApiTags } from "@nestjs/swagger"; import { AdsSearchQueryDto, GetAdsByLocationQueryDto } from "./DTO/ads-search-query.dto"; import { CreateAdsDto } from "./DTO/create-ads.dto"; import { UpdateAdsDto } from "./DTO/update-ads.dto"; import { AdsService } from "./providers/ads.service"; import { AuthGuards } from "../../common/decorators/auth-guard.decorator"; import { PermissionsDec } from "../../common/decorators/permission.decorator"; import { SkipAuth } from "../../common/decorators/skip-auth.decorator"; import { ParamDto } from "../../common/DTO/param.dto"; import { PermissionEnum } from "../users/enums/permission.enum"; @Controller("advertise") @ApiTags("Advertisements") @AuthGuards() export class AdsController { constructor(private readonly adsService: AdsService) {} @ApiOperation({ summary: "Create new ads" }) @Post() @PermissionsDec(PermissionEnum.ADVERTISEMENTS) createAds(@Body() createDto: CreateAdsDto) { return this.adsService.createAds(createDto); } @ApiOperation({ summary: "Get all ads" }) @PermissionsDec(PermissionEnum.ADVERTISEMENTS) @Get("list") getAdsList(@Query() queryDto: AdsSearchQueryDto) { return this.adsService.getAdsList(queryDto); } @ApiOperation({ summary: "Get ads by id" }) @PermissionsDec(PermissionEnum.ADVERTISEMENTS) @Get(":id") getAdsById(@Param() paramDto: ParamDto) { return this.adsService.getAdsById(paramDto.id); } @ApiOperation({ summary: "Update ads by id" }) @PermissionsDec(PermissionEnum.ADVERTISEMENTS) @Patch(":id") updateAdsById(@Param() paramDto: ParamDto, @Body() updateDto: UpdateAdsDto) { return this.adsService.updateAdsById(paramDto.id, updateDto); } @ApiOperation({ summary: "Delete ads by id" }) @PermissionsDec(PermissionEnum.ADVERTISEMENTS) @Delete(":id") deleteAdsById(@Param() paramDto: ParamDto) { return this.adsService.deleteAdsById(paramDto.id); } @ApiOperation({ summary: "Toggle ads status" }) @PermissionsDec(PermissionEnum.ADVERTISEMENTS) @Patch("toggle-status/:id") toggleAdsStatus(@Param() paramDto: ParamDto) { return this.adsService.toggleAdsStatus(paramDto.id); } @ApiOperation({ summary: "Get ads by location ==> both user and admin" }) @SkipAuth() @Get("by-location") getAdsByLocation(@Query() queryDto: GetAdsByLocationQueryDto) { return this.adsService.getAdsByLocation(queryDto); } @ApiOperation({ summary: "Get all ads grouped by location ==> both user and admin" }) @SkipAuth() @Get("grouped-by-location") getAdsGroupedByLocation() { return this.adsService.getAdsGroupedByLocation(); } }