Skip to content

Commit

Permalink
Merge pull request #85 from BOOK-TALK/#83-library-name
Browse files Browse the repository at this point in the history
  • Loading branch information
chanwoo7 authored Aug 21, 2024
2 parents ded6ca8 + d99957c commit bd94265
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,17 +42,17 @@ public void setLoanAvailable(DetailResponseDto detailDto) throws Exception {

User user = userService.loadLoggedinUser();
List<LoanAvailableDto> loanAvailableList = new LinkedList<>();
user.getLibraries().forEach(libCode -> {
user.getLibraries().forEach(library -> {
try {
BookExistRequestDto bookExistRequestDto = BookExistRequestDto.builder()
.libCode(libCode)
.libCode(library.getCode())
.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();
LoanAvailableDto dto = LoanAvailableDto.builder().libCode(library.getCode()).isLoanable(responseParser.loanAvailable(jsonResponse)).build();
loanAvailableList.add(dto);
} catch (Exception e) {
throw new RuntimeException("대출 가능 여부 조회 중 오류가 발생했습니다.");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
package com.book.backend.domain.user.controller;

import com.book.backend.domain.openapi.dto.request.LibSrchRequestDto;
import com.book.backend.domain.openapi.service.RequestValidate;
import com.book.backend.domain.user.dto.UserDto;
import com.book.backend.domain.user.dto.UserInfoDto;
import com.book.backend.domain.user.dto.UserLibrariesDto;
import com.book.backend.domain.user.dto.*;
import com.book.backend.domain.user.entity.User;
import com.book.backend.domain.user.mapper.UserMapper;
import com.book.backend.domain.user.service.UserService;
Expand Down Expand Up @@ -32,7 +29,7 @@ public class UserController {
private final UserMapper userMapper;
private final RequestValidate requestValidate;

@Operation(summary = "유저 정보 불러오기", description = "유저 정보를 불러옵니다.",
@Operation(summary = "유저 정보 조회", description = "유저 정보를 불러옵니다.",
responses = {@ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = UserDto.class)),
description = UserDto.description)})
@GetMapping("/info")
Expand Down Expand Up @@ -60,27 +57,35 @@ public ResponseEntity<?> editUserInfo(@Valid @RequestBody UserInfoDto requestDto
return responseTemplate.success(userInfoDto, HttpStatus.OK);
}

@Operation(summary = "저장된 도서관 조회", description = "유저가 저장한 도서관 목록을 불러옵니다.",
responses = {@ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = UserLibrariesResponseDto.class)),
description = UserLibrariesResponseDto.description)})
@GetMapping("/libraries")
public ResponseEntity<?> getUserLibraries() {
log.trace("UserController > getUserLibraries()");

User user = userService.loadLoggedinUser();

List<String> libraries = userService.getLibraries(user);
UserLibrariesResponseDto responseDto = new UserLibrariesResponseDto();
responseDto.setLibraries(userService.getLibraries(user));

return responseTemplate.success(libraries, HttpStatus.OK);
return responseTemplate.success(responseDto, HttpStatus.OK);
}

@Operation(summary = "저장된 도서관 수정", description = "저장된 도서관 목록을 수정합니다. 최대 3개의 도서관을 등록할 수 있습니다.",
responses = {@ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = UserLibrariesResponseDto.class)),
description = UserLibrariesResponseDto.description)})
@PutMapping("/libraries/edit")
public ResponseEntity<?> editUserLibraries(@RequestBody UserLibrariesDto requestDto) {
public ResponseEntity<?> editUserLibraries(@RequestBody UserLibrariesRequestDto requestDto) {
log.trace("UserController > editUserLibrary()");

User user = userService.loadLoggedinUser();
User updatedUser = userService.updateUserLibraries(user, requestDto);

List<String> libraries = updatedUser.getLibraries();
UserLibrariesResponseDto responseDto = new UserLibrariesResponseDto();
responseDto.setLibraries(userService.getLibraries(updatedUser));

return responseTemplate.success(libraries, HttpStatus.OK);
return responseTemplate.success(responseDto, HttpStatus.OK);
}

}
17 changes: 17 additions & 0 deletions src/main/java/com/book/backend/domain/user/dto/LibraryDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.book.backend.domain.user.dto;

import jakarta.persistence.Embeddable;
import jakarta.validation.constraints.Pattern;
import lombok.*;

@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Embeddable
public class LibraryDto {
@Pattern(regexp = "\\d{6}")
private String code;
private String name;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

import lombok.*;

import java.util.List;

@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserLibrariesDto {
private String libCode1;
private String libCode2;
private String libCode3;
public class UserLibrariesRequestDto {
private List<LibraryDto> libraries;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.book.backend.domain.user.dto;

import lombok.*;

import java.util.List;

@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserLibrariesResponseDto {
private List<LibraryDto> libraries;

public static final String description =
"libraries : 도서관 목록";
}
3 changes: 2 additions & 1 deletion src/main/java/com/book/backend/domain/user/entity/User.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.book.backend.domain.user.entity;

import com.book.backend.domain.auth.entity.RefreshToken;
import com.book.backend.domain.user.dto.LibraryDto;
import com.book.backend.domain.userOpentalk.entity.UserOpentalk;
import jakarta.persistence.*;
import java.util.List;
Expand Down Expand Up @@ -45,5 +46,5 @@ public class User {
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "user_libraries", joinColumns = @JoinColumn(name = "user_id"))
@Column(name = "library")
private List<String> libraries;
private List<LibraryDto> libraries;
}
38 changes: 25 additions & 13 deletions src/main/java/com/book/backend/domain/user/service/UserService.java
Original file line number Diff line number Diff line change
@@ -1,25 +1,27 @@
package com.book.backend.domain.user.service;

import com.book.backend.domain.openapi.service.RequestValidate;
import com.book.backend.domain.user.dto.LibraryDto;
import com.book.backend.domain.user.dto.UserInfoDto;
import com.book.backend.domain.user.dto.UserLibrariesDto;
import com.book.backend.domain.user.dto.UserLibrariesRequestDto;
import com.book.backend.domain.user.entity.User;
import com.book.backend.domain.user.mapper.UserMapper;
import com.book.backend.domain.user.repository.UserRepository;
import com.book.backend.exception.CustomException;
import com.book.backend.exception.ErrorCode;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

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

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
@Slf4j
public class UserService {
private final UserRepository userRepository;
private final UserMapper userMapper;
Expand Down Expand Up @@ -52,6 +54,8 @@ public User findByKakaoId(String kakaoId) {

@Transactional
public User updateUserInfo(User user, UserInfoDto requestDto) {
log.trace("UserService > updateUserInfo()");

if (user == null) {
throw new CustomException(ErrorCode.USER_NOT_FOUND);
}
Expand All @@ -65,28 +69,36 @@ public User updateUserInfo(User user, UserInfoDto requestDto) {
}

@Transactional
public User updateUserLibraries(User user, UserLibrariesDto dto) {
public User updateUserLibraries(User user, UserLibrariesRequestDto dto) {
log.trace("UserService > updateUserLibraries()");

if (user == null) {
throw new CustomException(ErrorCode.USER_NOT_FOUND);
}

// 리스트 사이즈가 3보다 크면 오류 반환
if (dto.getLibraries().size() > 3) {
throw new CustomException(ErrorCode.LIST_SIZE_EXCEEDED);
}

user.getLibraries().clear();
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);

for (LibraryDto library : dto.getLibraries()) {
if (library.getCode().isBlank() || library.getName().isBlank()) {
continue;
}

requestValidate.isValidLibCode(library.getCode());
user.getLibraries().add(library);
}
userRepository.save(user);

return user;
}

public List<String> getLibraries(User user) {
public List<LibraryDto> getLibraries(User user) {
log.trace("UserService > getLibraries()");

if (user == null) {
throw new CustomException(ErrorCode.USER_NOT_FOUND);
}
Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/book/backend/exception/ErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public enum ErrorCode {
INVALID_REGION_DETAIL_CODE(HttpStatus.BAD_REQUEST, "400", "올바르지 않은 세부지역 코드입니다."),
INVALID_LIB_CODE(HttpStatus.BAD_REQUEST, "400", "올바르지 않은 도서관 코드입니다. (6자리 숫자로 입력해주세요)"),
INVALID_PAGE_NUM(HttpStatus.BAD_REQUEST, "400", "페이지 번호는 1 이상의 숫자로 입력해주세요."),
LIST_SIZE_EXCEEDED(HttpStatus.BAD_REQUEST, "400", "요청 리스트의 크기가 초과되었습니다."),

// user
INVALID_CREDENTIALS(HttpStatus.UNAUTHORIZED, "401", "사용자 인증에 실패했습니다."),
Expand Down

0 comments on commit bd94265

Please sign in to comment.