From ac6090824fb56ec4b750d68e32ebf7cfcfaab17f Mon Sep 17 00:00:00 2001 From: Sergey Elpashev Date: Mon, 20 Nov 2023 21:53:00 +0300 Subject: [PATCH] Added image module --- backend/src/app.module.ts | 3 ++- backend/src/modules/image/image.controller.ts | 16 ++++++++++++ backend/src/modules/image/image.dto.ts | 8 ++++++ backend/src/modules/image/image.module.ts | 11 ++++++++ backend/src/modules/image/image.service.ts | 26 +++++++++++++++++++ 5 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 backend/src/modules/image/image.controller.ts create mode 100644 backend/src/modules/image/image.dto.ts create mode 100644 backend/src/modules/image/image.module.ts create mode 100644 backend/src/modules/image/image.service.ts diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index dac3c0f..65d3643 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -3,12 +3,13 @@ import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm'; import { config } from 'config'; import { LibsModule } from 'libs/libs.module'; import { AdminModule } from './modules/admin/admin.module'; +import { ImageModule } from './modules/image/image.module'; import { AppInitService } from './modules/initialization/app.init.service'; import { PostModule } from './modules/post/post.module'; import { UserModule } from './modules/user/user.module'; @Module({ - imports: [LibsModule, PostModule, AdminModule, UserModule, TypeOrmModule.forRoot(config.database)], + imports: [LibsModule, PostModule, AdminModule, UserModule, ImageModule, TypeOrmModule.forRoot(config.database)], controllers: [], providers: [AppInitService], }) diff --git a/backend/src/modules/image/image.controller.ts b/backend/src/modules/image/image.controller.ts new file mode 100644 index 0000000..d83fbb4 --- /dev/null +++ b/backend/src/modules/image/image.controller.ts @@ -0,0 +1,16 @@ +import { Body, Controller, Post } from '@nestjs/common'; +import { ApiOperation, ApiTags } from '@nestjs/swagger'; +import { IAddImage } from './image.dto'; +import { ImageService } from './image.service'; + +@ApiTags('Image') +@Controller('image') +export class ImageController { + constructor(private imageService: ImageService) {} + + @ApiOperation({ description: 'A method to add photo to post' }) + @Post('add') + async addImage(@Body() data: IAddImage) { + return await this.imageService.add(data); + } +} diff --git a/backend/src/modules/image/image.dto.ts b/backend/src/modules/image/image.dto.ts new file mode 100644 index 0000000..8a027b6 --- /dev/null +++ b/backend/src/modules/image/image.dto.ts @@ -0,0 +1,8 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class IAddImage { + @ApiProperty({ description: 'A post that contains this photo', example: '1212-4324-asdf-23432' }) readonly post_id!: string; + @ApiProperty({ description: 'A telegram file id of photo', example: '1214244' }) readonly file_id!: string; + @ApiProperty({ description: 'Has image the spoiler?', example: false }) readonly has_spoiler!: boolean; + @ApiProperty({ description: 'A photo message id', example: '123124' }) readonly message_id!: number; +} diff --git a/backend/src/modules/image/image.module.ts b/backend/src/modules/image/image.module.ts new file mode 100644 index 0000000..2c8c6c1 --- /dev/null +++ b/backend/src/modules/image/image.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { LibsModule } from 'libs/libs.module'; +import { ImageController } from './image.controller'; +import { ImageService } from './image.service'; + +@Module({ + imports: [LibsModule], + controllers: [ImageController], + providers: [ImageService], +}) +export class ImageModule {} diff --git a/backend/src/modules/image/image.service.ts b/backend/src/modules/image/image.service.ts new file mode 100644 index 0000000..b2e4818 --- /dev/null +++ b/backend/src/modules/image/image.service.ts @@ -0,0 +1,26 @@ +import { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Image } from 'libs/database/image.entity'; +import { Post } from 'libs/database/post.entity'; +import { Repository } from 'typeorm'; +import { IAddImage } from './image.dto'; +@Injectable() +export class ImageService { + private readonly logger: Logger = new Logger(ImageService.name); + constructor( + @InjectRepository(Image) private imageRepository: Repository, + @InjectRepository(Post) private postRepository: Repository, + ) {} + + async add(data: IAddImage) { + try { + this.logger.log(`[image.add] data: ${JSON.stringify(data)}`); + const post = await this.postRepository.findOne({ where: { uuid: data.post_id } }); + await this.imageRepository.save({ post: post, file_id: data.file_id, has_spoiler: data.has_spoiler, message_id: data.message_id }); + return { status: 'ok' }; + } catch (error) { + this.logger.debug(`[image.add] error: ${JSON.stringify(error)}`); + throw new HttpException('No posts', HttpStatus.BAD_REQUEST); + } + } +}