Skip to content

Commit

Permalink
Merge pull request #23 from Drink-Easy/feature/tastingNote
Browse files Browse the repository at this point in the history
#1 Refactor : Note Controller에 AuthenticationPrinciple 추가 완료
  • Loading branch information
jeongyeon0208 authored Aug 9, 2024
2 parents 22d4de0 + d070419 commit ce8f7dd
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public enum ErrorStatus implements BaseCode {

// Note Error
TASTING_NOTE_NOT_FOUND(HttpStatus.BAD_REQUEST, "NOTE4001", "테이스팅 노트가 없습니다."),
NOT_YOUR_NOTE(HttpStatus.BAD_REQUEST, "NOTE4002", "본인의 노트가 아닙니다."),

// WineNote Error
WINE_NOTE_NOT_FOUND(HttpStatus.BAD_REQUEST, "WINE_NOTE4001", "와인 노트가 없습니다."),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.drinkeg.drinkeg.apipayLoad.ApiResponse;
import com.drinkeg.drinkeg.domain.Member;
import com.drinkeg.drinkeg.dto.PrincipalDetail;
import com.drinkeg.drinkeg.dto.TastingNoteDTO.request.NoteRequestDTO;
import com.drinkeg.drinkeg.dto.TastingNoteDTO.request.NoteUpdateRequestDTO;
import com.drinkeg.drinkeg.dto.TastingNoteDTO.response.NotePriviewResponseDTO;
Expand All @@ -13,6 +14,7 @@
import com.drinkeg.drinkeg.service.wineService.WineService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;

import java.util.List;
Expand All @@ -28,9 +30,13 @@ public class TastingNoteController {

// 새 노트 작성
@PostMapping("/new-note")
public ApiResponse<String> saveNote(@RequestBody @Valid NoteRequestDTO noteRequestDTO) {
public ApiResponse<String> saveNote(@AuthenticationPrincipal PrincipalDetail principalDetail, @RequestBody @Valid NoteRequestDTO noteRequestDTO) {

tastingNoteService.saveNote(noteRequestDTO);
// 현재 로그인한 사용자 정보 가져오기
String username = principalDetail.getUsername();
Member foundMember = memberService.findMemberByUsername(username);

tastingNoteService.saveNote(noteRequestDTO, foundMember);
return ApiResponse.onSuccess("노트 작성 완료");
}

Expand All @@ -44,33 +50,47 @@ public ApiResponse<List<NoteWineResponseDTO>> saveNote(@RequestBody NoteWineRequ

// 선택한 노트 보기
@GetMapping("/{noteId}")
public ApiResponse<NoteResponseDTO> showNote(@PathVariable("noteId") Long noteId) {
public ApiResponse<NoteResponseDTO> showNote(@AuthenticationPrincipal PrincipalDetail principalDetail, @PathVariable("noteId") Long noteId) {

// 현재 로그인한 사용자 정보 가져오기
String username = principalDetail.getUsername();
Member foundMember = memberService.findMemberByUsername(username);

NoteResponseDTO noteResponseDTO = tastingNoteService.showNoteById(noteId);
return ApiResponse.onSuccess(noteResponseDTO);
}

// 전체 노트 보기
@GetMapping("/all-note/{memberId}")
public ApiResponse<List<NotePriviewResponseDTO>> showAllNote(@PathVariable("memberId") Long memberId) {
@GetMapping("/all-note")
public ApiResponse<List<NotePriviewResponseDTO>> showAllNote(@AuthenticationPrincipal PrincipalDetail principalDetail) {

Member foundMember = memberService.findMemberById(memberId);
// 현재 로그인한 사용자 정보 가져오기
String username = principalDetail.getUsername();
Member foundMember = memberService.findMemberByUsername(username);

List<NotePriviewResponseDTO> allNoteByMember = tastingNoteService.findAllNoteByMember(foundMember);
return ApiResponse.onSuccess(allNoteByMember);
}

@PatchMapping("/{noteId}")
public ApiResponse<String> updateTastingNote(@PathVariable("noteId") Long noteId, @RequestBody @Valid NoteUpdateRequestDTO noteUpdateRequestDTO) {
public ApiResponse<String> updateTastingNote(@AuthenticationPrincipal PrincipalDetail principalDetail, @PathVariable("noteId") Long noteId, @RequestBody @Valid NoteUpdateRequestDTO noteUpdateRequestDTO) {

tastingNoteService.updateTastingNote(noteId, noteUpdateRequestDTO);
// 현재 로그인한 사용자 정보 가져오기
String username = principalDetail.getUsername();
Member foundMember = memberService.findMemberByUsername(username);

tastingNoteService.updateTastingNote(noteId, noteUpdateRequestDTO, foundMember);
return ApiResponse.onSuccess("노트 수정 완료");
}

@DeleteMapping("/{noteId}")
public ApiResponse<String> deleteTastingNote(@PathVariable("noteId") Long noteId) {
public ApiResponse<String> deleteTastingNote(@AuthenticationPrincipal PrincipalDetail principalDetail, @PathVariable("noteId") Long noteId) {

// 현재 로그인한 사용자 정보 가져오기
String username = principalDetail.getUsername();
Member foundMember = memberService.findMemberByUsername(username);

tastingNoteService.deleteTastingNote(noteId);
tastingNoteService.deleteTastingNote(noteId, foundMember);
return ApiResponse.onSuccess("노트 삭제 완료");
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.drinkeg.drinkeg.converter;

import com.drinkeg.drinkeg.domain.Member;
import com.drinkeg.drinkeg.domain.TastingNote;
import com.drinkeg.drinkeg.domain.Wine;
import com.drinkeg.drinkeg.dto.TastingNoteDTO.request.NoteRequestDTO;
Expand All @@ -10,7 +11,8 @@
public class TastingNoteConverter {

// NoteRequestDTO를 TastingNote Entity로 변환
public static TastingNote toTastingNoteEntity(NoteRequestDTO noteRequestDTO, @NotNull Wine wine) {
// NotNull은 null이 아님을 보장하는 어노테이션
public static TastingNote toTastingNoteEntity(NoteRequestDTO noteRequestDTO, @NotNull Member member, @NotNull Wine wine) {
return TastingNote.builder()
.wine(wine)
.color(noteRequestDTO.getColor())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@
public interface MemberService {

public Member findMemberById(Long memberId);

public Member findMemberByUsername(String username);
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,9 @@ public Member findMemberById(Long memberId) {
});
}

@Override
public Member findMemberByUsername(String username) {
return memberRepository.findByUsername(username);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@

public interface TastingNoteService {

public void saveNote(NoteRequestDTO noteRequestDTO);
public void saveNote(NoteRequestDTO noteRequestDTO, Member member);

public NoteResponseDTO showNoteById(Long noteId);

public List<NotePriviewResponseDTO> findAllNoteByMember(Member member);

public void updateTastingNote(Long noteId, NoteUpdateRequestDTO noteUpdateRequestDTO);
public void updateTastingNote(Long noteId, NoteUpdateRequestDTO noteUpdateRequestDTO, Member member);

public void deleteTastingNote(Long noteId);
public void deleteTastingNote(Long noteId, Member member);

}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public class TastingNoteServiceImpl implements TastingNoteService {
private final MemberRepository memberRepository;

@Override
public void saveNote(NoteRequestDTO noteRequestDTO) {
public void saveNote(NoteRequestDTO noteRequestDTO, Member member) {

// 와인을 찾는다.
Long wineId = noteRequestDTO.getWineId();
Expand All @@ -39,7 +39,7 @@ public void saveNote(NoteRequestDTO noteRequestDTO) {
);

// TastingNote를 저장한다.
TastingNote tastingNoteEntity = TastingNoteConverter.toTastingNoteEntity(noteRequestDTO, wine);
TastingNote tastingNoteEntity = TastingNoteConverter.toTastingNoteEntity(noteRequestDTO, member, wine);
TastingNote savedNote = tastingNoteRepository.save(tastingNoteEntity);
}

Expand Down Expand Up @@ -73,14 +73,19 @@ public List<NotePriviewResponseDTO> findAllNoteByMember(Member member) {
}

@Override
public void updateTastingNote(Long noteId, NoteUpdateRequestDTO noteUpdateRequestDTO) {
public void updateTastingNote(Long noteId, NoteUpdateRequestDTO noteUpdateRequestDTO, Member member) {

// noteId로 TastingNote를 찾는다.
TastingNote foundNote = tastingNoteRepository.findById(noteId).orElseThrow(() -> {
throw new GeneralException(ErrorStatus.TASTING_NOTE_NOT_FOUND);
}
);

// TastingNote의 Member가 요청한 Member와 같은지 확인한다.
if(!foundNote.getMember().equals(member)) {
throw new GeneralException(ErrorStatus.NOT_YOUR_NOTE);
}

// TastingNote를 업데이트한다.
if(noteUpdateRequestDTO.getWineId() != null) {
Wine wine = wineRepository.findById(noteUpdateRequestDTO.getWineId()).orElseThrow(() -> {
Expand Down Expand Up @@ -130,14 +135,19 @@ public void updateTastingNote(Long noteId, NoteUpdateRequestDTO noteUpdateReques
}

@Override
public void deleteTastingNote(Long noteId) {
public void deleteTastingNote(Long noteId, Member member) {

// noteId로 TastingNote를 찾는다.
TastingNote foundNote = tastingNoteRepository.findById(noteId).orElseThrow(() -> {
throw new GeneralException(ErrorStatus.TASTING_NOTE_NOT_FOUND);
}
);

// TastingNote의 Member가 요청한 Member와 같은지 확인한다.
if(!foundNote.getMember().equals(member)) {
throw new GeneralException(ErrorStatus.NOT_YOUR_NOTE);
}

// TastingNote를 삭제한다.
tastingNoteRepository.delete(foundNote);
}
Expand Down

0 comments on commit ce8f7dd

Please sign in to comment.