mirror of
https://github.com/nagisa77/OpenIsle.git
synced 2026-05-11 21:27:31 +08:00
Merge pull request #707 from nagisa77/codex/fix-multiple-results-error-in-findconversationbyusers
Handle multiple conversations between users
This commit is contained in:
@@ -1,23 +1,19 @@
|
|||||||
package com.openisle.repository;
|
package com.openisle.repository;
|
||||||
|
|
||||||
import com.openisle.model.MessageConversation;
|
import com.openisle.model.MessageConversation;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
import com.openisle.model.User;
|
import com.openisle.model.User;
|
||||||
import java.util.List;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.data.repository.query.Param;
|
import org.springframework.data.repository.query.Param;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
import java.util.Optional;
|
|
||||||
import com.openisle.model.User;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface MessageConversationRepository extends JpaRepository<MessageConversation, Long> {
|
public interface MessageConversationRepository extends JpaRepository<MessageConversation, Long> {
|
||||||
@Query("SELECT c FROM MessageConversation c JOIN c.participants p1 JOIN c.participants p2 WHERE p1.user = :user1 AND p2.user = :user2")
|
@Query("SELECT c FROM MessageConversation c JOIN c.participants p1 JOIN c.participants p2 " +
|
||||||
Optional<MessageConversation> findConversationByUsers(@Param("user1") User user1, @Param("user2") User user2);
|
"WHERE p1.user = :user1 AND p2.user = :user2 ORDER BY c.createdAt DESC")
|
||||||
|
List<MessageConversation> findConversationsByUsers(@Param("user1") User user1, @Param("user2") User user2);
|
||||||
|
|
||||||
@Query("SELECT DISTINCT c FROM MessageConversation c " +
|
@Query("SELECT DISTINCT c FROM MessageConversation c " +
|
||||||
"JOIN c.participants p " +
|
"JOIN c.participants p " +
|
||||||
@@ -32,4 +28,4 @@ public interface MessageConversationRepository extends JpaRepository<MessageConv
|
|||||||
List<MessageConversation> findByChannelTrue();
|
List<MessageConversation> findByChannelTrue();
|
||||||
|
|
||||||
long countByChannelTrue();
|
long countByChannelTrue();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -154,7 +154,8 @@ public class MessageService {
|
|||||||
|
|
||||||
private MessageConversation findOrCreateConversation(User user1, User user2) {
|
private MessageConversation findOrCreateConversation(User user1, User user2) {
|
||||||
log.info("Searching for existing conversation between {} and {}", user1.getUsername(), user2.getUsername());
|
log.info("Searching for existing conversation between {} and {}", user1.getUsername(), user2.getUsername());
|
||||||
return conversationRepository.findConversationByUsers(user1, user2)
|
return conversationRepository.findConversationsByUsers(user1, user2).stream()
|
||||||
|
.findFirst()
|
||||||
.orElseGet(() -> {
|
.orElseGet(() -> {
|
||||||
log.info("No existing conversation found. Creating a new one.");
|
log.info("No existing conversation found. Creating a new one.");
|
||||||
MessageConversation conversation = new MessageConversation();
|
MessageConversation conversation = new MessageConversation();
|
||||||
|
|||||||
Reference in New Issue
Block a user