import { CommunityService } from '../services/community.service'; import { Body, Controller, Delete, Get, Param, Post, Put, Query, UseGuards, } from '@nestjs/common'; import { ApiTags, ApiBearerAuth, ApiOperation } from '@nestjs/swagger'; import { AddCommunityDto } from '../dtos/add.community.dto'; import { GetCommunityParams } from '../dtos/get.community.dto'; import { UpdateCommunityNameDto } from '../dtos/update.community.dto'; // import { CheckUserCommunityGuard } from 'src/guards/user.community.guard'; import { ControllerRoute } from '@app/common/constants/controller-route'; import { BaseResponseDto } from '@app/common/dto/base.response.dto'; import { ProjectParam } from '../dtos'; import { PermissionsGuard } from 'src/guards/permissions.guard'; import { Permissions } from 'src/decorators/permissions.decorator'; import { PaginationRequestWithSearchGetListDto } from '@app/common/dto/pagination-with-search.request.dto'; @ApiTags('Community Module') @Controller({ version: '1', path: ControllerRoute.COMMUNITY.ROUTE, }) export class CommunityController { constructor(private readonly communityService: CommunityService) {} @ApiBearerAuth() @UseGuards(PermissionsGuard) @Permissions('COMMUNITY_ADD') @Post() @ApiOperation({ summary: ControllerRoute.COMMUNITY.ACTIONS.CREATE_COMMUNITY_SUMMARY, description: ControllerRoute.COMMUNITY.ACTIONS.CREATE_COMMUNITY_DESCRIPTION, }) async createCommunity( @Param() param: ProjectParam, @Body() addCommunityDto: AddCommunityDto, ): Promise { return await this.communityService.createCommunity(param, addCommunityDto); } @ApiBearerAuth() @UseGuards(PermissionsGuard) @Permissions('COMMUNITY_VIEW') @ApiOperation({ summary: ControllerRoute.COMMUNITY.ACTIONS.GET_COMMUNITY_BY_ID_SUMMARY, description: ControllerRoute.COMMUNITY.ACTIONS.GET_COMMUNITY_BY_ID_DESCRIPTION, }) @Get('/:communityUuid') async getCommunityByUuid( @Param() params: GetCommunityParams, ): Promise { return await this.communityService.getCommunityById(params); } @ApiBearerAuth() @UseGuards(PermissionsGuard) @Permissions('COMMUNITY_VIEW') @ApiOperation({ summary: ControllerRoute.COMMUNITY.ACTIONS.LIST_COMMUNITY_SUMMARY, description: ControllerRoute.COMMUNITY.ACTIONS.LIST_COMMUNITY_DESCRIPTION, }) @Get() async getCommunities( @Param() param: ProjectParam, @Query() query: PaginationRequestWithSearchGetListDto, ): Promise { return this.communityService.getCommunities(param, query); } @ApiBearerAuth() @UseGuards(PermissionsGuard) @Permissions('COMMUNITY_UPDATE') @ApiOperation({ summary: ControllerRoute.COMMUNITY.ACTIONS.UPDATE_COMMUNITY_SUMMARY, description: ControllerRoute.COMMUNITY.ACTIONS.UPDATE_COMMUNITY_DESCRIPTION, }) @Put('/:communityUuid') async updateCommunity( @Param() params: GetCommunityParams, @Body() updateCommunityDto: UpdateCommunityNameDto, ) { return this.communityService.updateCommunity(params, updateCommunityDto); } @ApiBearerAuth() @UseGuards(PermissionsGuard) @Permissions('COMMUNITY_DELETE') @Delete('/:communityUuid') @ApiOperation({ summary: ControllerRoute.COMMUNITY.ACTIONS.DELETE_COMMUNITY_SUMMARY, description: ControllerRoute.COMMUNITY.ACTIONS.DELETE_COMMUNITY_DESCRIPTION, }) async deleteCommunity( @Param() params: GetCommunityParams, ): Promise { return this.communityService.deleteCommunity(params); } }