나는 마니또 프로젝트에서 쪽지를 맡았다.
내가 구현해야할 것은
1. 나의 마니또에게 쪽지보내기
2. 나의 마니또에게 보냈던 쪽지들을 최근 20개만 조회하기
3. 마니또들에게 받았던 쪽지들을 최근 20개만 조회하기
Message Entity 필드이다.
User Entity 의 id에 N:1로 외래키를 걸었고,
TimeStamp를 상속받아 쪽지가 쓰여진 시간도 저장했다.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "message_id")
private Long id;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "messageGiver_id")
private User messageGiver; // message를 주는 사람 == 로그인 된 사용자
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "messageReceiver_id")
private User messageReceiver; // message를 받는 사람 == 나의 마니또
@Column(nullable = false, length = 500)
private String content;
jwtUtil.isTokenValid(token);
String userId = jwtUtil.getUsernameFromToken(token);
로그인이 되면 생성되는 token에서 userId를 가져옵니다.
가져온 userId로 userRepository에서 해당 User를 찾아 오늘의 마니또가 누구인지 확인합니다.
Manito myManito = manitoRepository.findManitoByGiverNameAndToday(
loginUser.getUserId(),
today
).orElseThrow(
() -> new IllegalArgumentException(NOT_FOUND_TODAYMANITO));
만약 해당 User를 가져왔으면 쪽지를 보내준다.
사실 보낸다는 의미는 맞지 않는 것 같다.
message table에 저장이 되면 해당 마니또에게만 GET으로 확인할 수 있도록 구현하였기 때문이다...
Message message = new Message(messageRequestDto, loginUser, myManito.getManitoReceiver());
messageRepository.save(message);
이렇게 "쪽지를 보낸다" 라는 것을 구현하였다(?)
보낸 쪽지함도 마찬가지로 로그인한 사용자의 token에서 userId를 가져와서 해당 User를 가져온다.
return messageRepository.findByMessageGiverOrderByCreatedAtDesc(loginUser)
.stream().limit(20).map(SendMessageResponseDto::new).toList();
20개만 가져올 수 있도록 .limit(20)을 해주었다.
받은 쪽지함도 로그인한 사용자의 token에서 userId를 가져와 User를 가져온다.
return messageRepository.findByMessageReceiverOrderByCreatedAtDesc(loginUser)
.stream().limit(20).map(ReceiveMessageResponseDto::new).toList();
20개만 가져올 수 있도록 .limit(20)을 해주었다.
이렇게 해서 쪽지에 대한 API를 구현하였다.