나는 마니또 프로젝트에서 쪽지를 맡았다.
내가 구현해야할 것은
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를 구현하였다.