필터에서 JWT 토큰에 저장한 유효 객체에서 username과 사용자가 보낸 request Dto( title & contents ) 에서 데이터를 확보하여 C(Create) U(Update) D(Delete)를 구현한다.
@PostMapping("/memos")
public MemoResponseDto createMemo(@RequestBody MemoRequestDto requestDto, HttpServletRequest req) {
User user = (User) req.getAttribute("user");
return memoService.createMemo(requestDto, user.getUsername());
}
public MemoResponseDto createMemo(MemoRequestDto requestDto, String username) {
// RequestDto -> Entity
Memo memo = new Memo(requestDto, username);
// DB 저장
Memo saveMemo = memoRepository.save(memo);
// Entity -> ResponseDto
MemoResponseDto memoResponseDto = new MemoResponseDto(saveMemo);
return memoResponseDto;
}
@PutMapping("/memos/{id}")
public Memo updateMemo(@PathVariable Long id, @RequestBody MemoRequestDto requestDto, HttpServletRequest req) {
User user = (User) req.getAttribute("user");
return memoService.updateMemo(id, requestDto,user.getUsername());
}
@Transactional // updateMemo는 따로 Transactional 되어있지 않아 해줘야함
public Memo updateMemo(Long id, MemoRequestDto requestDto, String username) {
Memo memo = findMemo(id);
if(memo.getUsername().equals(username))
memo.update(requestDto, username); // update는 memo 클래스에서 만든 것
else
throw new IllegalArgumentException("당신에겐 글을 수정할 권한이 없습니다 >.< !!");
return memo;
}
if(memo.getUsername().equals(username))
=> 서버에게 토큰을 부여받은 사용자가 다른 사용자의 데이터를 수정하는 것을 방지
@DeleteMapping("/memos/{id}")
public ResponseEntity<String> deleteMemo(@PathVariable Long id, HttpServletRequest req) {
User user = (User) req.getAttribute("user");
return memoService.deleteMemo(id, user.getUsername());
}
public ResponseEntity<String> deleteMemo(Long id, String username) {
Memo memo = findMemo(id);
if(memo.getUsername().equals(username))
memoRepository.delete(memo);
else
return ResponseEntity.ok("{\"msg\": \"삭제 실패\", \"statusCode\": 444}");
return ResponseEntity.ok("{\"msg\": \"삭제 성공\", \"statusCode\": 200}");
}