import { ControllerRoute } from '@app/common/constants/controller-route'; import { BaseResponseDto } from '@app/common/dto/base.response.dto'; import { SuccessResponseDto } from '@app/common/dto/success.response.dto'; import { Body, Controller, Delete, Get, Param, ParseUUIDPipe, Post, Put, Query, UseGuards, } from '@nestjs/common'; import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; import { Permissions } from 'src/decorators/permissions.decorator'; import { PermissionsGuard } from 'src/guards/permissions.guard'; import { AddSpaceDto, CommunitySpaceParam, UpdateSpaceDto } from '../dtos'; import { DuplicateSpaceDto } from '../dtos/duplicate-space.dto'; import { GetSpaceDto } from '../dtos/get.space.dto'; import { GetSpaceParam } from '../dtos/get.space.param'; import { OrderSpacesDto } from '../dtos/order.spaces.dto'; import { SpaceService } from '../services'; @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_ADD') @ApiOperation({ summary: ControllerRoute.SPACE.ACTIONS.DUPLICATE_SPACE_SUMMARY, description: ControllerRoute.SPACE.ACTIONS.DUPLICATE_SPACE_DESCRIPTION, }) @Post(':spaceUuid/duplicate') async duplicateSpace( @Param('spaceUuid', ParseUUIDPipe) spaceUuid: string, @Body() dto: DuplicateSpaceDto, @Param() communitySpaceParam: CommunitySpaceParam, ): Promise { return await this.spaceService.duplicateSpace( spaceUuid, communitySpaceParam, dto, ); } @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, @Query() getSpaceDto: GetSpaceDto, ): Promise { return this.spaceService.getSpacesHierarchyForCommunity( params, getSpaceDto, ); } @ApiBearerAuth() @UseGuards(PermissionsGuard) @Permissions('SPACE_UPDATE') @ApiOperation({ summary: ControllerRoute.SPACE.ACTIONS .UPDATE_CHILDREN_SPACES_ORDER_OF_A_SPACE_SUMMARY, description: ControllerRoute.SPACE.ACTIONS .UPDATE_CHILDREN_SPACES_ORDER_OF_A_SPACE_DESCRIPTION, }) @Post(':parentSpaceUuid/spaces/order') async updateSpacesOrder( @Body() orderSpacesDto: OrderSpacesDto, @Param() communitySpaceParam: CommunitySpaceParam, @Param('parentSpaceUuid', ParseUUIDPipe) parentSpaceUuid: string, ) { await this.spaceService.updateSpacesOrder(parentSpaceUuid, orderSpacesDto); return new SuccessResponseDto({ statusCode: 200, message: 'Spaces order updated successfully', }); } @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); } }