import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; import { SpaceService } from '../services'; import { ControllerRoute } from '@app/common/constants/controller-route'; import { Body, Controller, Delete, Get, Param, Post, Put, UseGuards, } from '@nestjs/common'; import { AddSpaceDto, CommunitySpaceParam, UpdateSpaceDto } from '../dtos'; import { BaseResponseDto } from '@app/common/dto/base.response.dto'; import { GetSpaceParam } from '../dtos/get.space.param'; import { PermissionsGuard } from 'src/guards/permissions.guard'; import { Permissions } from 'src/decorators/permissions.decorator'; @ApiTags('Space Module') @Controller({ version: '1', path: ControllerRoute.SPACE.ROUTE, }) export class SpaceController { constructor(private readonly spaceService: SpaceService) {} @ApiBearerAuth() @UseGuards(PermissionsGuard) @Permissions('SPACE_ADD') @ApiOperation({ summary: ControllerRoute.SPACE.ACTIONS.CREATE_SPACE_SUMMARY, description: ControllerRoute.SPACE.ACTIONS.CREATE_SPACE_DESCRIPTION, }) @Post() async createSpace( @Body() addSpaceDto: AddSpaceDto, @Param() communitySpaceParam: CommunitySpaceParam, ): Promise { return await this.spaceService.createSpace( addSpaceDto, communitySpaceParam, ); } @ApiBearerAuth() @UseGuards(PermissionsGuard) @Permissions('SPACE_VIEW') @ApiOperation({ summary: ControllerRoute.SPACE.ACTIONS.GET_COMMUNITY_SPACES_HIERARCHY_SUMMARY, description: ControllerRoute.SPACE.ACTIONS.GET_COMMUNITY_SPACES_HIERARCHY_DESCRIPTION, }) @Get() async getHierarchy( @Param() params: CommunitySpaceParam, ): Promise { return this.spaceService.getSpacesHierarchyForCommunity(params); } @ApiBearerAuth() @UseGuards(PermissionsGuard) @Permissions('SPACE_DELETE') @ApiOperation({ summary: ControllerRoute.SPACE.ACTIONS.DELETE_SPACE_SUMMARY, description: ControllerRoute.SPACE.ACTIONS.DELETE_SPACE_DESCRIPTION, }) @Delete('/:spaceUuid') async deleteSpace(@Param() params: GetSpaceParam) { return await this.spaceService.delete(params); } @ApiBearerAuth() @UseGuards(PermissionsGuard) @Permissions('SPACE_UPDATE') @Put('/:spaceUuid') @ApiOperation({ summary: ControllerRoute.SPACE.ACTIONS.UPDATE_SPACE_SUMMARY, description: ControllerRoute.SPACE.ACTIONS.UPDATE_SPACE_SUMMARY, }) async updateSpace( @Param() params: GetSpaceParam, @Body() updateSpaceDto: UpdateSpaceDto, ): Promise { return this.spaceService.updateSpace(params, updateSpaceDto); } @ApiBearerAuth() @UseGuards(PermissionsGuard) @Permissions('SPACE_VIEW') @ApiOperation({ summary: ControllerRoute.SPACE.ACTIONS.GET_SPACE_SUMMARY, description: ControllerRoute.SPACE.ACTIONS.GET_SPACE_DESCRIPTION, }) @Get('/:spaceUuid') async get(@Param() params: GetSpaceParam): Promise { return this.spaceService.findOne(params); } @ApiBearerAuth() @UseGuards(PermissionsGuard) @Permissions('SPACE_VIEW') @ApiOperation({ summary: ControllerRoute.SPACE.ACTIONS.GET_HEIRARCHY_SUMMARY, description: ControllerRoute.SPACE.ACTIONS.GET_HEIRARCHY_DESCRIPTION, }) @Get('/:spaceUuid/hierarchy') async getHierarchyUnderSpace( @Param() params: GetSpaceParam, ): Promise { return this.spaceService.getSpacesHierarchyForSpace(params); } @ApiBearerAuth() @UseGuards(PermissionsGuard) @Permissions('SPACE_MEMBER_ADD') @ApiOperation({ summary: ControllerRoute.SPACE.ACTIONS.CREATE_INVITATION_CODE_SPACE_SUMMARY, description: ControllerRoute.SPACE.ACTIONS.CREATE_INVITATION_CODE_SPACE_DESCRIPTION, }) @Post(':spaceUuid/invitation-code') async generateSpaceInvitationCode( @Param() params: GetSpaceParam, ): Promise { return this.spaceService.generateSpaceInvitationCode(params); } }