-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Chat 232 user nickname #79
Conversation
# Conflicts: # src/main/java/com/chat/yourway/listener/StompSubscriptionListener.java # src/main/java/com/chat/yourway/mapper/NotificationMapper.java # src/main/java/com/chat/yourway/model/event/ContactEvent.java # src/main/java/com/chat/yourway/service/ContactEventServiceImpl.java # src/main/java/com/chat/yourway/service/NotificationServiceImpl.java # src/main/java/com/chat/yourway/service/interfaces/ContactEventService.java # src/test/java/com/chat/yourway/integration/controller/ChatControllerTest.java # src/test/java/com/chat/yourway/unit/service/impl/ContactEventServiceImplTest.java # src/test/java/com/chat/yourway/unit/service/impl/NotificationServiceImplTest.java
Твій спосіб додавання нікнейу до MessageResponseDto буде працювати але на мою думку це оверхед. |
@Column(name = "send_to") | ||
private String sendTo; | ||
|
||
@ManyToOne(fetch = FetchType.EAGER) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Краще не використовувати FetchType.EAGER якщо в цьому не має потреби.
https://www.baeldung.com/hibernate-lazy-eager-loading
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
так. тут була помилка при завантаженні тому так поставив.
@@ -81,6 +84,8 @@ public MessageResponseDto createPrivate(MessagePrivateRequestDto message, String | |||
Message savedMessage = messageRepository.save(Message.builder() | |||
.sentFrom(email) | |||
.sendTo(message.getSendTo()) | |||
.sender(contactService.findByEmail(email)) | |||
.receiver(contactService.findByEmail(message.getSendTo())) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
При зберіганні кожного повідомлення будуть робитись два додаткові запити до бази данних що не є добре для перформенсу застосуну.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
contactService.findByEmail закешований, тому запитів в базу не буде.
Ти маєш на увазі отримання інформації про топік /topics/{id} де є список всіх контактів чи якісь інший метод? Тобто коли в топіку буде переписка з, наприклад, 1000 контактів ми при отриманні просто заголовку топіку отримаємо всі контакти. Це не оверхед? Гадаю що оверхед в реляційній базі даних це sent_from або send_to в message. Також не зрозумів навіщо зберігати що юзер був колись підписаний на топік. Де ця історія використовується крім того що потрібно отримати його контакт в топіку? |
я не згоден з тим що при виводі повідомлення ми кожного разу будемо отримувати його через пошук по email краще ніж один раз зберегти id в базу при створенні повідомлення. вибач, можливо я намагаюсь виправити вже створенну архітектуру бази даних чи застосунку, але робити костилями я не можу. переасайню таску на тебе. твій варіант краще підійде. |
Можливо це не найкращий варіант але не хотілося б змінювати структуру бази данних через нікнейм, тим паче пошук по email вже закешований. |
В таблицю message додані поля sender_id та receiver_id. В клас Message поля sender та receiver. Додані поля в MessageResponseDto sentFromNickname та sendToNickname. В LastMessageResponseDto доданий sentFromNickname. Змінений маппер.
Також додав порт 5557 в налаштування серверу тому що 8080 у мене зайнятий.