간단히 CRUD 기능을 구현했다
아래 코드는 BookService 부분의 코드이다. (Controller는 getHub에서 확인 가능하다)
@RequiredArgsConstructor
@Service
@Slf4j
public class BookJpaService {
final BookRepository bookRepository;
final MemberRepository memberRepository;
//리스트 가져오기
public List<Book> getBookList() {
return bookRepository.findBookByIsDel("N");
}
//지정한 책만 가져오기
public Book getBookId(long bid) {
Optional<Book> bookData = bookRepository.findBookByBidAndIsDel(bid, "N");
return bookData.orElseThrow(() -> new RuntimeException("no data"));
}
//책 등록
public Book postBook(BookDTO bookDTO) {
long newBookBidValue = this.getNewBookBidValue(bookRepository);
long memberId = getMemberIdByEmail(memberRepository);
Book postData = Book.builder()
.bid(newBookBidValue)
.mid(memberId)
.author(bookDTO.getAuthor())
.subject(bookDTO.getSubject())
.page(bookDTO.getPage())
.price(bookDTO.getPrice())
.published_date(bookDTO.getPublished_date())
.detail_tag(bookDTO.getDetail_tag())
.tag(bookDTO.getTag())
.keyword(bookDTO.getKeyword())
.isDel("N")
.build();
return bookRepository.save(postData);
}
//책 id를 정하는 로직
private long getNewBookBidValue(BookRepository bookRepository) {
long result;
Book boardOfMaxId = bookRepository.findTopByOrderByBidDesc();
if (boardOfMaxId == null) {
result = 1;
log.debug("no board data, maxId is 1");
} else {
result = boardOfMaxId.getBid() + 1;
log.debug("maxIdFromBoard=" + boardOfMaxId.getBid());
}
log.debug("newBoardIdValue=" + result);
return result;
}
//SecurityContextHolder에 저장된 사용자Email을 통해 사용자 Mid를 가져오는 로직
private Long getMemberIdByEmail(MemberRepository memberRepository){
String memberEmail = SecurityContextHolder.getContext().getAuthentication().getName();
return memberRepository.getMemberIdByEmail(memberEmail);
}
}
1. 책 등록 : PostBook과 getMemberIdByEmail
이전과 다른점이 있다면 책을 등록할 때 프론트엔드에서 사용자 정보(Member Id)를 보내서 등록했는데
이번엔 토큰에서 가져온 정보를 저장한 ContextHolder에서 사용자 Email을 꺼내와서 Member Id를 찾았다.
따라서 책을 등록할 때 입력해야할 정보는
작가, 책 제목, 페이지, 가격, 출판일, 태그와 디테일 태그, 키워드 이다.
2. 책 삭제 : updateIsDelBookById (0207)
//책 삭제 ( isDel "N" -> "Y" )
public Book updateIsDelBookById(long bid) {
Optional<Book> bookData = bookRepository.findBookByBidAndIsDel(bid, "N");
Book data = bookData.orElseThrow(() -> new RuntimeException("no data"));
//북 오너 정보와 매치 필요
long midByLoginInfo = getMemberIdByEmail(memberRepository);
if (data.getMid() == midByLoginInfo) {
data.updateIsDel("Y");
return bookRepository.save(data);
} else {
return null;
}
}
1. 받은 bid 그리고 isDel = "N" 에 해당하는 내용이 있는지 Null인지 확인 후
2. bookData에 있는 member id와 로그인된 정보에 있는 member id가 같은지 비교한다.
(getMemberIdByEmail 코드는 위에 있다.)
3. 정보가 같으면 updateIsDel (setter이지만 의미가 있는 메소드 이름) 를 통해 isDel을 Y로 수정한다
패스워드가 일치하는지 아닌지 확인하는 부분은 Member 패키지에서 수행 할 예정이다.
패스워드가 일치한다 -> 책 삭제 bookController 실행
3. ApiResponse<T>를 사용하여 메시지와 데이터를 같이 출력한다.
'Vue > bookStore' 카테고리의 다른 글
6. postBook - 도서등록 2 (0) | 2022.02.25 |
---|---|
5. bookStore 도서 등록 (0) | 2022.02.19 |
3. BookStore jwtToken 인증 추가 (0) | 2022.02.06 |
book Entity - Setter ? Builder? (0) | 2022.02.02 |
2. bookStore (기본 세팅) (0) | 2022.01.31 |