mirror of
https://github.com/MrSedan/neuro-reply-website.git
synced 2026-01-14 20:49:42 +03:00
Using transactions where it needed
This commit is contained in:
@@ -1,70 +1,66 @@
|
|||||||
import { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common';
|
import { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common';
|
||||||
import { InjectRepository } from '@nestjs/typeorm';
|
|
||||||
import { Admin } from 'libs/database/admin.entity';
|
import { Admin } from 'libs/database/admin.entity';
|
||||||
import { Image } from 'libs/database/image.entity';
|
import { Image } from 'libs/database/image.entity';
|
||||||
import { Post } from 'libs/database/post.entity';
|
import { Post } from 'libs/database/post.entity';
|
||||||
import { Repository } from 'typeorm';
|
import { DataSource, EntityManager } from 'typeorm';
|
||||||
import { IAddImage } from './image.dto';
|
import { IAddImage } from './image.dto';
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ImageService {
|
export class ImageService {
|
||||||
private readonly logger: Logger = new Logger(ImageService.name);
|
private readonly logger: Logger = new Logger(ImageService.name);
|
||||||
constructor(
|
constructor(private dataSource: DataSource) {}
|
||||||
@InjectRepository(Image) private imageRepository: Repository<Image>,
|
|
||||||
@InjectRepository(Post) private postRepository: Repository<Post>,
|
|
||||||
@InjectRepository(Admin) private adminRepository: Repository<Admin>,
|
|
||||||
) {}
|
|
||||||
|
|
||||||
async add(data: IAddImage) {
|
async add(data: IAddImage) {
|
||||||
try {
|
try {
|
||||||
this.logger.log(`[image.add] data: ${JSON.stringify(data)}`);
|
|
||||||
let created_new = false;
|
let created_new = false;
|
||||||
if (data.media_group_id) {
|
await this.dataSource.transaction(async (manager: EntityManager) => {
|
||||||
let post = await this.postRepository.findOne({ where: { media_group_id: data.media_group_id } });
|
this.logger.log(`[image.add] data: ${JSON.stringify(data)}`);
|
||||||
if (post) {
|
if (data.media_group_id) {
|
||||||
await this.imageRepository.save({
|
let post = await manager.findOne(Post, { where: { media_group_id: data.media_group_id } });
|
||||||
post: post,
|
if (post) {
|
||||||
file_id: data.file_id,
|
await manager.save(Image, {
|
||||||
has_spoiler: data.has_spoiler,
|
post: post,
|
||||||
message_id: data.message_id,
|
file_id: data.file_id,
|
||||||
});
|
has_spoiler: data.has_spoiler,
|
||||||
if (data.post_text) {
|
message_id: data.message_id,
|
||||||
post.text = data.post_text;
|
});
|
||||||
post.message_entities = data.message_entities;
|
if (data.post_text) {
|
||||||
post = await this.postRepository.save(post);
|
post.text = data.post_text;
|
||||||
|
post.message_entities = data.message_entities;
|
||||||
|
post = await manager.save(Post, post);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const user = await manager.findOne(Admin, { where: { user: { id: data.from_user_id } }, relations: { user: true } });
|
||||||
|
post = await manager.save(Post, {
|
||||||
|
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 manager.save(Image, {
|
||||||
|
post: post,
|
||||||
|
file_id: data.file_id,
|
||||||
|
has_spoiler: data.has_spoiler,
|
||||||
|
message_id: data.message_id,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const user = await this.adminRepository.findOne({ where: { user: { id: data.from_user_id } }, relations: { user: true } });
|
const user = await manager.findOne(Admin, { where: { user: { id: data.from_user_id } }, relations: { user: true } });
|
||||||
post = await this.postRepository.save({
|
const post = await manager.save(Post, {
|
||||||
media_group_id: data.media_group_id,
|
|
||||||
text: data.post_text,
|
text: data.post_text,
|
||||||
message_entities: data.message_entities,
|
message_entities: data.message_entities,
|
||||||
timestamp: new Date(),
|
timestamp: new Date(),
|
||||||
from_user: user,
|
from_user: user,
|
||||||
});
|
});
|
||||||
created_new = true;
|
await manager.save(Image, {
|
||||||
await this.imageRepository.save({
|
|
||||||
post: post,
|
post: post,
|
||||||
file_id: data.file_id,
|
file_id: data.file_id,
|
||||||
has_spoiler: data.has_spoiler,
|
has_spoiler: data.has_spoiler,
|
||||||
message_id: data.message_id,
|
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 };
|
return { status: 'ok', created: created_new };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.logger.debug(`[image.add] error: ${JSON.stringify(error)}`);
|
this.logger.debug(`[image.add] error: ${JSON.stringify(error)}`);
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common';
|
import { HttpException, HttpStatus, Inject, Injectable, Logger } from '@nestjs/common';
|
||||||
import { InjectRepository } from '@nestjs/typeorm';
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
import { Admin } from 'libs/database/admin.entity';
|
import { Admin } from 'libs/database/admin.entity';
|
||||||
import { Post } from 'libs/database/post.entity';
|
import { Post } from 'libs/database/post.entity';
|
||||||
import { EGetAll } from 'libs/enums/getAll.enum';
|
import { EGetAll } from 'libs/enums/getAll.enum';
|
||||||
import { Repository } from 'typeorm';
|
import { DataSource, EntityManager, Repository } from 'typeorm';
|
||||||
import { ICreatePost, IEditPost } from './post.dto';
|
import { ICreatePost, IEditPost } from './post.dto';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
@@ -12,18 +12,22 @@ export class PostService {
|
|||||||
constructor(
|
constructor(
|
||||||
@InjectRepository(Post) private postRepository: Repository<Post>,
|
@InjectRepository(Post) private postRepository: Repository<Post>,
|
||||||
@InjectRepository(Admin) private adminRepository: Repository<Admin>,
|
@InjectRepository(Admin) private adminRepository: Repository<Admin>,
|
||||||
|
@Inject(DataSource) private dataSource: DataSource,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
async newPost(data: ICreatePost) {
|
async newPost(data: ICreatePost) {
|
||||||
try {
|
try {
|
||||||
this.logger.log(`[post.newPost] data: ${JSON.stringify(data)}`);
|
this.logger.log(`[post.newPost] data: ${JSON.stringify(data)}`);
|
||||||
|
let result: Post = null;
|
||||||
const user = await this.adminRepository.findOne({ where: { user: { id: data.from_user_id } }, relations: { user: true } });
|
const user = await this.adminRepository.findOne({ where: { user: { id: data.from_user_id } }, relations: { user: true } });
|
||||||
const result = await this.postRepository.save({
|
await this.dataSource.transaction(async (manager: EntityManager) => {
|
||||||
text: data.text,
|
result = await manager.save(Post, {
|
||||||
media_group_id: data.media_group_id,
|
text: data.text,
|
||||||
from_user: user,
|
media_group_id: data.media_group_id,
|
||||||
timestamp: new Date(),
|
from_user: user,
|
||||||
message_entities: data.message_entities,
|
timestamp: new Date(),
|
||||||
|
message_entities: data.message_entities,
|
||||||
|
});
|
||||||
});
|
});
|
||||||
this.logger.log(`Created new post: ${result.uuid}`);
|
this.logger.log(`Created new post: ${result.uuid}`);
|
||||||
return result;
|
return result;
|
||||||
@@ -113,7 +117,10 @@ export class PostService {
|
|||||||
async getByMediaGroup(mediaGroupId: string) {
|
async getByMediaGroup(mediaGroupId: string) {
|
||||||
try {
|
try {
|
||||||
this.logger.log(`[post.getByMediaGroup] data: ${mediaGroupId}`);
|
this.logger.log(`[post.getByMediaGroup] data: ${mediaGroupId}`);
|
||||||
const post = await this.postRepository.findOne({ where: { media_group_id: mediaGroupId } });
|
let post: Post = null;
|
||||||
|
await this.dataSource.transaction(async (manager: EntityManager) => {
|
||||||
|
post = await manager.findOne(Post, { where: { media_group_id: mediaGroupId } });
|
||||||
|
});
|
||||||
if (!post) throw new Error("Can't find post");
|
if (!post) throw new Error("Can't find post");
|
||||||
return post;
|
return post;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user