import { Controller, Get, Param, Query } from "@nestjs/common"; import { ApiProperty, ApiTags } from "@nestjs/swagger"; import { AnnouncementService } from "./providers/announcement.service"; import { AuthGuards } from "../../common/decorators/auth-guard.decorator"; import { PermissionsDec } from "../../common/decorators/permission.decorator"; import { UserDec } from "../../common/decorators/user.decorator"; import { ParamDto } from "../../common/DTO/param.dto"; import { SearchCriticismQueryDto } from "../criticisms/DTO/search-criticism-query.dto"; import { User } from "../users/entities/user.entity"; import { PermissionEnum } from "../users/enums/permission.enum"; @ApiTags("Announcements") @Controller("announcements") export class AnnouncementController { constructor(private readonly announcementService: AnnouncementService) {} // @AuthGuards() // @PermissionsDec(PermissionEnum.ANNOUNCEMENTS) // @ApiProperty({ description: "Create a new announcement ===> login as admin" }) // @Post() // async create(@Body() createAnnouncementDto: CreateAnnouncementDto) { // return await this.announcementService.createAnnouncement(createAnnouncementDto); // } @AuthGuards() @ApiProperty({ description: "Get all announcements ===> login as admin" }) @PermissionsDec(PermissionEnum.ANNOUNCEMENTS) @Get() async getAllAnnouncements(@Query() queryDto: SearchCriticismQueryDto, @UserDec() user: User) { return await this.announcementService.getAllAnnouncements(queryDto, user.id); } @AuthGuards() @ApiProperty({ description: "Get all announcements ===> login as user" }) @Get("user") async getAllAnnouncementsByUser(@Query() queryDto: SearchCriticismQueryDto, @UserDec() user: User) { return await this.announcementService.getAllAnnouncementsByUser(queryDto, user.id); } @AuthGuards() @ApiProperty({ description: "Get one announcements with id" }) @Get(":id") getAnnouncement(@Param() paramDto: ParamDto, @UserDec() user: User) { return this.announcementService.getOneAnnouncement(paramDto.id, user.id); } @AuthGuards() @ApiProperty({ description: "Get all public announcements" }) @Get("public") async getPublicAnnouncements() { return await this.announcementService.getPublicAnnouncements(); } @AuthGuards() @ApiProperty({ description: "Get all public announcements" }) @Get("/service/:serviceId") async getAnnouncementsByService(@Query() queryDto: SearchCriticismQueryDto, @Param("serviceId") serviceId: string) { return await this.announcementService.getAnnouncementByService(queryDto, serviceId); } }