Skip to content

Commit

Permalink
ordering messages
Browse files Browse the repository at this point in the history
  • Loading branch information
terryyin committed Oct 25, 2024
1 parent 75ea660 commit addd23f
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public class Conversation extends EntityIdentifiedByIdOnly {

@Column(name = "created_at")
@NotNull
@Setter
private Timestamp createdAt = new Timestamp(new Date().getTime());

@Column(name = "updated_at")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,14 @@ public interface ConversationRepository extends CrudRepository<Conversation, Int
+ "OR c.subjectOwnership IN (SELECT o FROM Ownership o JOIN o.circle.members mem WHERE mem = :user) "
+ "OR c.conversationInitiator = :user";

@Query("SELECT c FROM Conversation c WHERE " + USER_CONVERSATION_CONDITION)
@Query(
"SELECT c FROM Conversation c "
+ "LEFT JOIN c.conversationMessages m "
+ "WHERE "
+ USER_CONVERSATION_CONDITION
+ " "
+ "GROUP BY c "
+ "ORDER BY MAX(m.createdAt) DESC, c.createdAt DESC")
List<Conversation> findByUserInSubjectOwnershipOrConversationInitiator(@Param("user") User user);

@Query(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertIterableEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;

import com.odde.doughnut.entities.*;
Expand Down Expand Up @@ -298,4 +299,68 @@ void shouldstartConversationAboutAssessmentQuestionToConversation() {
assertEquals(message.getMessage(), msg);
}
}

@Nested
class ConversationOrderingTests {
User otherUser;

@BeforeEach
void setup() {
otherUser = makeMe.aUser().please();
}

@Test
void testConversationsOrderedByLastMessageTime() {
Conversation conv1 = makeMe.aConversation().from(currentUser).please();
Conversation conv2 = makeMe.aConversation().from(currentUser).please();
Conversation conv3 = makeMe.aConversation().from(currentUser).please();

// Add messages with specific timestamps
makeMe
.aConversationMessage(conv1)
.sender(otherUser)
.createdAt(makeMe.aTimestamp().of(1, 1).please())
.please();
makeMe
.aConversationMessage(conv2)
.sender(otherUser)
.createdAt(makeMe.aTimestamp().of(1, 2).please())
.please();
makeMe
.aConversationMessage(conv3)
.sender(otherUser)
.createdAt(makeMe.aTimestamp().of(1, 3).please())
.please();

List<Conversation> orderedConversations = controller.getConversationsOfCurrentUser();

assertIterableEquals(List.of(conv3, conv2, conv1), orderedConversations);
}

@Test
void testConversationsOrderedByCreationTimeWhenNoMessages() {
Conversation conv1 =
makeMe
.aConversation()
.from(currentUser)
.createdAt(makeMe.aTimestamp().of(1, 1).please())
.please();
Conversation conv2 =
makeMe
.aConversation()
.from(currentUser)
.createdAt(makeMe.aTimestamp().of(1, 2).please())
.please();
Conversation conv3 =
makeMe
.aConversation()
.from(currentUser)
.createdAt(makeMe.aTimestamp().of(1, 3).please())
.please();

List<Conversation> orderedConversations = controller.getConversationsOfCurrentUser();

assertIterableEquals(List.of(conv3, conv2, conv1), orderedConversations);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.odde.doughnut.models.UserModel;
import com.odde.doughnut.testability.EntityBuilder;
import com.odde.doughnut.testability.MakeMe;
import java.sql.Timestamp;

public class ConversationBuilder extends EntityBuilder<Conversation> {
public ConversationBuilder(MakeMe makeMe) {
Expand Down Expand Up @@ -43,4 +44,9 @@ public ConversationBuilder from(UserModel currentUser) {
this.entity.setConversationInitiator(currentUser.getEntity());
return this;
}

public ConversationBuilder createdAt(Timestamp time) {
entity.setCreatedAt(time);
return this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.odde.doughnut.entities.User;
import com.odde.doughnut.testability.EntityBuilder;
import com.odde.doughnut.testability.MakeMe;
import java.sql.Timestamp;
import org.apache.logging.log4j.util.Strings;

public class ConversationMessageBuilder extends EntityBuilder<ConversationMessage> {
Expand Down Expand Up @@ -33,4 +34,9 @@ public ConversationMessageBuilder readByReceiver() {
entity.setReadByReceiver(true);
return this;
}

public ConversationMessageBuilder createdAt(Timestamp time) {
entity.setCreatedAt(time);
return this;
}
}

0 comments on commit addd23f

Please sign in to comment.