import { Body, Controller, Get, Param, Post, Query } from "@nestjs/common"; import { ApiProperty, ApiTags } from "@nestjs/swagger"; import { AnnouncementService } from "./announcement.service"; import { CreateAnnouncementDto } from "./DTO/create-announcement.dto"; import { AuthGuards } from "../../common/decorators/auth-guard.decorator"; import { Roles } from "../../common/decorators/roles.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 { RoleEnum } from "../users/enums/role.enum"; @ApiTags("Announcements") @Controller("announcements") export class AnnouncementController { constructor(private readonly announcementService: AnnouncementService) {} @AuthGuards() @Roles(RoleEnum.ADMIN) @ApiProperty({ description: "Create a new announcement ===> login as admin", }) @Post() async create(@Body() createAnnouncementDto: CreateAnnouncementDto) { return await this.announcementService.createAnnouncement(createAnnouncementDto); } @AuthGuards() @Roles(RoleEnum.ADMIN, RoleEnum.USER) @ApiProperty({ description: "Get all announcements ===> login as admin", }) @Get() async getAllAnnouncements(@Query() queryDto: SearchCriticismQueryDto, @UserDec() user: User) { return await this.announcementService.getAllAnnouncements(queryDto, user.id); } @AuthGuards() @Roles(RoleEnum.ADMIN, RoleEnum.USER) @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() @Roles(RoleEnum.ADMIN, RoleEnum.USER) @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); } }