LandvibeDev / web-chat-backend

Web Chat Application 🛩
1 stars 3 forks source link

채팅방 입장시 메시지 리스트 조회하는 기능 #7

Closed raccoonback closed 4 years ago

raccoonback commented 4 years ago

🥤 추가 기능

채팅방 입장시 메시지 리스트 조회하는 기능 추가

☕ ps

Add any other context or screenshots about the feature request here.

raccoonback commented 4 years ago

Room - Message 매핑 관계 테스트

Message 에서 ManyToOne 한 경우

Optional<List> findAllByRoomId(Long id); List messages = messageRepository.findAllByRoomId(id).get();

select message0_.id           as id1_0_,
       message0_.contents     as contents2_0_,
       message0_.created_at   as created_3_0_,
       message0_.message_type as message_4_0_,
       message0_.room_id      as room_id5_0_
from message message0_
         left outer join room room1_ on message0_.room_id = room1_.id
where room1_.id = 1;

select room0_.id as id1_1_0_, room0_.title as title2_1_0_
from room room0_
where room0_.id = 1;

Room 에서 OneToMany 한 경우

List messages = roomRepository.findById(id).get().getMessages()

select room0_.id as id1_1_0_, room0_.title as title2_1_0_
from room room0_
where room0_.id = 1;

select messages0_.room_id      as room_id5_0_0_,
       messages0_.id           as id1_0_0_,
       messages0_.id           as id1_0_1_,
       messages0_.contents     as contents2_0_1_,
       messages0_.created_at   as created_3_0_1_,
       messages0_.message_type as message_4_0_1_
from message messages0_
where messages0_.room_id = 1;

차이점

raccoonback commented 4 years ago

Message 에서 ManyToOne 한 경우

select room0_.id as id1_1_0_, room0_.title as title2_1_0_
from room room0_
where room0_.id = 1;

insert into message (contents, created_at, message_type, room_id)
values (?, ?, ?, ?);

Room 에서 OneToMany 한 경우

select room0_.id as id1_1_0_, room0_.title as title2_1_0_
from room room0_
where room0_.id = 1;

select messages0_.room_id      as room_id5_0_0_,
       messages0_.id           as id1_0_0_,
       messages0_.id           as id1_0_1_,
       messages0_.contents     as contents2_0_1_,
       messages0_.created_at   as created_3_0_1_,
       messages0_.message_type as message_4_0_1_
from message messages0_
where messages0_.room_id = 1;

insert into message (contents, created_at, message_type)
values (?, ?, ?);

update message
set room_id=?
where id = ?;
KeonHee commented 4 years ago

위 경우에서 Optional을 꼭 써야할까?

raccoonback commented 4 years ago

@KeonHee 조회된 값이 없으면 빈 리스트로 반환해주는구나 👍 👍 null 반환하는줄 알았어..; messageRepository.findAllByRoomId(id).get() 요거는 테스트용으로 해본거라서.. empty까지 고려 안했어ㅜ 뜨허 🙀 JPA 어렵다아아

raccoonback commented 4 years ago

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/LocalDateTime.html

raccoonback commented 4 years ago

image