Skip to content

Commit

Permalink
Merge pull request #80 from BOOK-TALK/#66-refactor
Browse files Browse the repository at this point in the history
8/21 수정사항 (책 상세)
  • Loading branch information
chanwoo7 authored Aug 21, 2024
2 parents f432048 + 859ac8f commit f7cc272
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,20 +33,18 @@ public class DetailController {

// 도서 상세 (8) API
@Operation(summary="책 상세", description="특정 책 코드를 입력으로 받아 해당 책 상세 정보, 대출 주 연령대, 키워드, 같이 대출한 도서, 추천 도서를 반환합니다.",
parameters = {@Parameter(name = "isbn", description = "책 코드"), @Parameter(name = "libCode", description = "도서관 코드(선택)")},
parameters = {@Parameter(name = "isbn", description = "책 코드")},
responses = {@ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = DetailResponseDto.class)),
description = DetailResponseDto.description)})
@GetMapping("/detail")
public ResponseEntity<?> search(@RequestParam String isbn, @RequestParam(required = false)String libCode) throws Exception {
RequestLogger.param(new String[]{"isbn, libCode"}, isbn, libCode);
public ResponseEntity<?> search(@RequestParam String isbn) throws Exception {
RequestLogger.param(new String[]{"isbn"}, isbn);
requestValidate.isValidIsbn(isbn);
if (libCode != null) requestValidate.isValidLibCode(libCode);

DetailRequestDto requestDto = DetailRequestDto.builder().isbn13(isbn).build();
DetailResponseDto response = detailService.detail(requestDto);

// TODO : libcode 입력으로 안 들어오면 아예 loanAvailable null 로 보내도 될지 여쭤보기
if(libCode != null) detailService.setLoanAvailable(response, libCode);
detailService.setLoanAvailable(response);

return responseTemplate.success(response, HttpStatus.OK);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.book.backend.domain.detail.dto;

import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class LoanAvailableDto {
private String libCode;
private boolean isLoanable;
}
Original file line number Diff line number Diff line change
@@ -1,27 +1,33 @@
package com.book.backend.domain.detail.service;

import com.book.backend.domain.detail.dto.LoanAvailableDto;
import com.book.backend.domain.openapi.dto.request.BookExistRequestDto;
import com.book.backend.domain.openapi.dto.request.DetailRequestDto;
import com.book.backend.domain.openapi.dto.response.BookExistResponseDto;
import com.book.backend.domain.openapi.dto.response.DetailResponseDto;
import com.book.backend.domain.openapi.dto.response.SearchResponseDto;
import com.book.backend.domain.openapi.service.OpenAPI;
import com.book.backend.domain.openapi.service.ResponseParser;

import java.util.List;
import java.util.LinkedList;
import java.util.Optional;

import com.book.backend.domain.user.service.UserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.minidev.json.JSONObject;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.book.backend.domain.user.entity.User;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
@Slf4j
public class DetailService {
private final OpenAPI openAPI;
private final UserService userService;

public DetailResponseDto detail(DetailRequestDto requestDto) throws Exception {
log.trace("detail()");
Expand All @@ -31,16 +37,27 @@ public DetailResponseDto detail(DetailRequestDto requestDto) throws Exception {
return responseParser.detail(jsonResponse);
}

public void setLoanAvailable(DetailResponseDto response, String libCode) throws Exception {
public void setLoanAvailable(DetailResponseDto detailDto) throws Exception {
log.trace("setLoanAvailable()");

BookExistRequestDto bookExistRequestDto = BookExistRequestDto.builder()
.libCode(libCode)
.isbn13(response.getBookInfoDto().getIsbn13()).build();
String subUrl = "bookExist";
JSONObject jsonResponse = openAPI.connect(subUrl, bookExistRequestDto, new BookExistResponseDto());
ResponseParser responseParser = new ResponseParser();

response.setLoanAvailable(Optional.of(responseParser.loanAvailable(jsonResponse)));
User user = userService.loadLoggedinUser();
List<LoanAvailableDto> loanAvailableList = new LinkedList<>();
user.getLibraries().forEach(libCode -> {
try {
BookExistRequestDto bookExistRequestDto = BookExistRequestDto.builder()
.libCode(libCode)
.isbn13(detailDto.getBookInfoDto().getIsbn13()).build();

String subUrl = "bookExist";
JSONObject jsonResponse = openAPI.connect(subUrl, bookExistRequestDto, new BookExistResponseDto());
ResponseParser responseParser = new ResponseParser();

LoanAvailableDto dto = LoanAvailableDto.builder().libCode(libCode).isLoanable(responseParser.loanAvailable(jsonResponse)).build();
loanAvailableList.add(dto);
} catch (Exception e) {
throw new RuntimeException("대출 가능 여부 조회 중 오류가 발생했습니다.");
}
detailDto.setLoanAvailableList(loanAvailableList);
});
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package com.book.backend.domain.openapi.dto.response;

import com.book.backend.domain.detail.dto.BookInfoDto;
import com.book.backend.domain.detail.dto.CoLoanBooksDto;
import com.book.backend.domain.detail.dto.Top3LoanUserDto;
import com.book.backend.domain.detail.dto.RecommendDto;
import com.book.backend.domain.detail.dto.*;

import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
Expand All @@ -21,7 +19,7 @@ public class DetailResponseDto implements OpenAPIResponseInterface {
private LinkedList<String> keywordDtoList;
private LinkedList<CoLoanBooksDto> coLoanBooksDtoList;
private LinkedList<RecommendDto> recommendResponseDtoList;
private Optional<Boolean> loanAvailable;
private List<LoanAvailableDto> loanAvailableList;

public static final String description = "bookInfoDto: 책 상세 정보 | top3LoanUserDtoList: 대출 주 연령대 | "
+ "keywordDtoList: 책 연관 키워드 | coLoanBooksDtoList: 같이 대출한 도서 | recommendResponseDtoList: 추천 도서";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.book.backend.domain.user.service;

import com.book.backend.domain.openapi.service.RequestValidate;
import com.book.backend.domain.user.dto.UserInfoDto;
import com.book.backend.domain.user.dto.UserLibrariesDto;
import com.book.backend.domain.user.entity.User;
Expand All @@ -13,6 +14,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.LinkedList;
import java.util.List;

@Service
Expand All @@ -21,6 +23,7 @@
public class UserService {
private final UserRepository userRepository;
private final UserMapper userMapper;
private final RequestValidate requestValidate;

public User loadLoggedinUser() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Expand Down Expand Up @@ -66,11 +69,18 @@ public User updateUserLibraries(User user, UserLibrariesDto dto) {
if (user == null) {
throw new CustomException(ErrorCode.USER_NOT_FOUND);
}

user.getLibraries().clear();
user.getLibraries().add(dto.getLibCode1());
user.getLibraries().add(dto.getLibCode2());
user.getLibraries().add(dto.getLibCode3());
List<String> libCodeList = new LinkedList<>();
libCodeList.add(dto.getLibCode1());
libCodeList.add(dto.getLibCode2());
libCodeList.add(dto.getLibCode3());

for(String libCode : libCodeList){
if(!libCode.equals("null")){
requestValidate.isValidLibCode(libCode);
user.getLibraries().add(libCode);
}
}
userRepository.save(user);

return user;
Expand Down

0 comments on commit f7cc272

Please sign in to comment.