diff --git a/backend/src/modules/post/post.controller.ts b/backend/src/modules/post/post.controller.ts index e33c5ed..39f1e54 100644 --- a/backend/src/modules/post/post.controller.ts +++ b/backend/src/modules/post/post.controller.ts @@ -1,4 +1,4 @@ -import { Body, Controller, Delete, Get, Param, Post } from '@nestjs/common'; +import { Body, Controller, Delete, Get, Param, Post, Put } from '@nestjs/common'; import { ApiOperation, ApiParam, ApiTags } from '@nestjs/swagger'; import { EGetAll } from 'libs/enums/getAll.enum'; import { ICreatePost, IEditPost } from './post.dto'; @@ -69,4 +69,10 @@ export class PostController { async getDeletedPosts() { return await this.postService.getDeletedPosts(); } + + @ApiOperation({ description: 'Restore post by order' }) + @Put('restore-post-by-order/:order') + async restorePostByOrder(@Param('order') order: string) { + return await this.postService.restorePostByOrder(order); + } } diff --git a/backend/src/modules/post/post.service.ts b/backend/src/modules/post/post.service.ts index ed60b57..e2a54c0 100644 --- a/backend/src/modules/post/post.service.ts +++ b/backend/src/modules/post/post.service.ts @@ -199,4 +199,25 @@ export class PostService { throw new HttpException('Bad data', HttpStatus.BAD_REQUEST); } } + + async restorePostByOrder(order: string) { + try { + const posts = await this.postRepository.find({ order: { timestamp: 'ASC' }, where: { deleted: true, posted: false } }); + if (Math.abs(+order) > posts.length) { + throw new HttpException('There are only ' + posts.length + ' posts.', HttpStatus.BAD_REQUEST); + } + const post = posts[Math.abs(+order) - 1]; + post.deleted = false; + this.logger.log(`[post.restorePost] Post ${post.uuid} is restored`); + await this.postRepository.save(post); + return post; + } catch (error) { + if (error instanceof HttpException) { + this.logger.debug('[post.restorePost] Not found'); + throw error; + } + this.logger.debug(`[post.restorePost] error: ${JSON.stringify(error)}`); + throw new HttpException('Bad data', HttpStatus.BAD_REQUEST); + } + } }