Я создаю приложение. В нем есть юзеры и посты.
Когда создается любой пост в приложении, я должен отправить уведомление администратору о том что создался пост.
Я делаю это так:
class PostService {
async create(data) {
const createdPost = await this.prisma.post.create({ // creates post
title: data.title,
text: data.text
userId: data.userId,
});
this.notificationService.notify(createdPost); // sends notification
}
}
Но у меня также есть случай, когда при создании юзера должен создаваться дефолтный пост для этого нового юзера.
И здесь я вижу 2 возможных варианта.
1й:
class UserService {
create(data) {
const createdUser = await this.prisma(...); // creates user
this.postService.create({ // creates post and sends notification
title: 'default title',
text: 'default text',
userId: createdUser.id,
});
}
}
Но в этом случае мне придется выполнить 2 запроса к базе данных (создать юзера и создать пост).
Пытаясь делать только один запрос, можно сделать следующее:
class UserService {
create(data) {
const created = await this.prisma.user.create({ // create user and post
name: data.name,
post: {
title: 'default title',
text: 'default text',
}
});
this.notificationService.notify(created.post) // sends notification, logic is duplicated
}
}
Однако, при использовании второго подхода, мне приходится дублировать выполнение "notificationService.notify", и я считаю это недостатком.
Существуют ли возможные решения для этой проблемы?