diff --git a/backend/libs/database/post.entity.ts b/backend/libs/database/post.entity.ts index f2e53de..8d5adf3 100644 --- a/backend/libs/database/post.entity.ts +++ b/backend/libs/database/post.entity.ts @@ -13,8 +13,8 @@ export class Post { @Column({ default: false }) public posted!: boolean; - @Column() - public text: string; + @Column({ nullable: true }) + public text?: string; @Column({ nullable: true }) public media_group_id: string; diff --git a/backend/src/modules/image/image.dto.ts b/backend/src/modules/image/image.dto.ts index 8a027b6..2d2a35a 100644 --- a/backend/src/modules/image/image.dto.ts +++ b/backend/src/modules/image/image.dto.ts @@ -1,8 +1,12 @@ 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 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; + @ApiProperty({ description: 'Post text', example: '#neurowaifu', required: false }) readonly post_text?: string; + @ApiProperty({ description: 'A media group id of the photo', example: '1241244', required: false }) readonly media_group_id?: string; + @ApiProperty({ description: 'Message entities of text', example: '[]' }) readonly message_entities?: string; + @ApiProperty({ description: 'The id of user that creating post', example: '1234' }) readonly from_user_id!: string; } diff --git a/backend/src/modules/image/image.service.ts b/backend/src/modules/image/image.service.ts index b2e4818..0deaae0 100644 --- a/backend/src/modules/image/image.service.ts +++ b/backend/src/modules/image/image.service.ts @@ -1,5 +1,6 @@ import { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; +import { Admin } from 'libs/database/admin.entity'; import { Image } from 'libs/database/image.entity'; import { Post } from 'libs/database/post.entity'; import { Repository } from 'typeorm'; @@ -10,14 +11,61 @@ export class ImageService { constructor( @InjectRepository(Image) private imageRepository: Repository, @InjectRepository(Post) private postRepository: Repository, + @InjectRepository(Admin) private adminRepository: 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' }; + let created_new = false; + if (data.media_group_id) { + let post = await this.postRepository.findOne({ where: { media_group_id: data.media_group_id } }); + if (post) { + await this.imageRepository.save({ + post: post, + file_id: data.file_id, + has_spoiler: data.has_spoiler, + message_id: data.message_id, + }); + if (data.post_text) { + post.text = data.post_text; + post.message_entities = data.message_entities; + post = await this.postRepository.save(post); + } + } else { + const user = await this.adminRepository.findOne({ where: { user: { id: data.from_user_id } }, relations: { user: true } }); + post = await this.postRepository.save({ + media_group_id: data.media_group_id, + text: data.post_text, + message_entities: data.message_entities, + timestamp: new Date(), + from_user: user, + }); + created_new = true; + await this.imageRepository.save({ + post: post, + file_id: data.file_id, + has_spoiler: data.has_spoiler, + message_id: data.message_id, + }); + this.logger.log('Created post'); + } + } else { + const user = await this.adminRepository.findOne({ where: { user: { id: data.from_user_id } }, relations: { user: true } }); + const post = await this.postRepository.save({ + text: data.post_text, + message_entities: data.message_entities, + timestamp: new Date(), + from_user: user, + }); + await this.imageRepository.save({ + post: post, + file_id: data.file_id, + has_spoiler: data.has_spoiler, + message_id: data.message_id, + }); + } + return { status: 'ok', created: created_new }; } catch (error) { this.logger.debug(`[image.add] error: ${JSON.stringify(error)}`); throw new HttpException('No posts', HttpStatus.BAD_REQUEST); diff --git a/backend/src/modules/settings/settings.service.ts b/backend/src/modules/settings/settings.service.ts index bcb744f..2294406 100644 --- a/backend/src/modules/settings/settings.service.ts +++ b/backend/src/modules/settings/settings.service.ts @@ -9,7 +9,7 @@ export class SettingsService { private readonly logger: Logger = new Logger(SettingsService.name); async getSettings() { - this.logger.log('[settings.getSettings]'); + this.logger.debug('[settings.getSettings]'); const settings = await this.botSettingsRepository.findOneBy({ isActive: true }); if (settings) return settings; this.logger.debug(`[settings.getSettings] No active settings found`);