-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #3 from f-lab-edu/feature/1
[#1] 도서 대출 코드 및 테스트 수정
- Loading branch information
Showing
45 changed files
with
1,096 additions
and
294 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
package com.study.bookcafe.common; | ||
|
||
import com.google.gson.Gson; | ||
import com.google.gson.GsonBuilder; | ||
import com.google.gson.ToNumberPolicy; | ||
|
||
import java.time.LocalDate; | ||
|
||
public class JsonHelper { | ||
private static Gson gson; | ||
|
||
public static Gson getGson() { | ||
if(gson == null) { | ||
gson = new GsonBuilder() | ||
.registerTypeAdapter(LocalDate.class, new LocalDateAdapter()) | ||
.setPrettyPrinting() | ||
.serializeNulls() | ||
.disableHtmlEscaping() | ||
.setObjectToNumberStrategy(ToNumberPolicy.LONG_OR_DOUBLE) | ||
.create(); | ||
} | ||
|
||
return gson; | ||
} | ||
} |
21 changes: 21 additions & 0 deletions
21
src/main/java/com/study/bookcafe/common/LocalDateAdapter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package com.study.bookcafe.common; | ||
|
||
import com.google.gson.*; | ||
|
||
import java.lang.reflect.Type; | ||
import java.time.LocalDate; | ||
import java.time.format.DateTimeFormatter; | ||
|
||
public class LocalDateAdapter implements JsonDeserializer<LocalDate>, JsonSerializer<LocalDate> { | ||
private static final DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE; | ||
|
||
@Override | ||
public JsonElement serialize(LocalDate date, Type typeOfSrc, JsonSerializationContext context) { | ||
return new JsonPrimitive(date.format(formatter)); // "yyyy-MM-dd" 형식으로 직렬화 | ||
} | ||
|
||
@Override | ||
public LocalDate deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { | ||
return LocalDate.parse(json.getAsString(), formatter); // JSON 문자열을 LocalDate로 역직렬화 | ||
} | ||
} |
43 changes: 43 additions & 0 deletions
43
src/main/java/com/study/bookcafe/controller/MemberController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package com.study.bookcafe.controller; | ||
|
||
import com.study.bookcafe.domain.Borrow; | ||
import com.study.bookcafe.domain.Member; | ||
import com.study.bookcafe.dto.BorrowDto; | ||
import com.study.bookcafe.dto.MemberDto; | ||
import com.study.bookcafe.dto.RequestBorrowDto; | ||
import com.study.bookcafe.mapper.BorrowMapper; | ||
import com.study.bookcafe.mapper.MemberMapper; | ||
import com.study.bookcafe.service.MemberService; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.web.bind.annotation.*; | ||
|
||
import java.util.List; | ||
|
||
@RestController | ||
public class MemberController { | ||
|
||
private final MemberService memberService; | ||
private final MemberMapper memberMapper; | ||
private final BorrowMapper borrowMapper; | ||
|
||
public MemberController(MemberService memberService, MemberMapper memberMapper, BorrowMapper borrowMapper) { | ||
this.memberService = memberService; | ||
this.memberMapper = memberMapper; | ||
this.borrowMapper = borrowMapper; | ||
} | ||
|
||
@GetMapping("/member/{id}") | ||
@ResponseBody | ||
public ResponseEntity<MemberDto> member(@PathVariable long id) { | ||
Member member = memberService.findById(id); | ||
return ResponseEntity.ok(memberMapper.toMemberDto(member)); | ||
} | ||
|
||
@PostMapping("/member/borrow") | ||
@ResponseBody | ||
public ResponseEntity<List<BorrowDto>> borrowBook(@RequestBody RequestBorrowDto requestBorrowDto) { | ||
List<Borrow> borrowList = memberService.borrowBook(requestBorrowDto.getMemberId(), requestBorrowDto.getBookdIdList()); | ||
return ResponseEntity.ok(borrowMapper.toBorrowDtoList(borrowList)); | ||
} | ||
|
||
} |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package com.study.bookcafe.dao; | ||
|
||
import com.study.bookcafe.entity.BookEntity; | ||
|
||
import java.util.List; | ||
|
||
public interface BookRepository { | ||
BookEntity findById(long bookId); | ||
List<BookEntity> findByIdList(List<Long> bookIdList); | ||
} |
This file was deleted.
Oops, something went wrong.
13 changes: 13 additions & 0 deletions
13
src/main/java/com/study/bookcafe/dao/BorrowRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package com.study.bookcafe.dao; | ||
|
||
import com.study.bookcafe.entity.BorrowEntity; | ||
|
||
import java.util.List; | ||
|
||
public interface BorrowRepository { | ||
|
||
BorrowEntity findById(long borrowId); | ||
BorrowEntity save(BorrowEntity borrowEntity); | ||
List<BorrowEntity> save(List<BorrowEntity> borrowEntityList); | ||
|
||
} |
23 changes: 0 additions & 23 deletions
23
src/main/java/com/study/bookcafe/dao/GeneralMemberDAO.java
This file was deleted.
Oops, something went wrong.
23 changes: 23 additions & 0 deletions
23
src/main/java/com/study/bookcafe/dao/GeneralMemberRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
package com.study.bookcafe.dao; | ||
|
||
import com.study.bookcafe.domain.Level; | ||
import com.study.bookcafe.entity.MemberEntity; | ||
import org.springframework.stereotype.Repository; | ||
|
||
import java.util.HashMap; | ||
import java.util.Map; | ||
|
||
@Repository | ||
public class GeneralMemberRepository implements MemberRepository { | ||
|
||
Map<Long, MemberEntity> members = new HashMap<>(){{ | ||
put(1L, MemberEntity.builder().id(1L).name("슈카").level(Level.BASIC).borrowCount(0).build()); | ||
put(2L, MemberEntity.builder().id(2L).name("머스크").level(Level.WORM).borrowCount(3).build()); | ||
put(3L, MemberEntity.builder().id(3L).name("트럼프").level(Level.LIBRARIAN).borrowCount(5).build()); | ||
}}; | ||
|
||
@Override | ||
public MemberEntity findById(long memberId) { | ||
return members.get(memberId); | ||
} | ||
} |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package com.study.bookcafe.dao; | ||
|
||
import com.study.bookcafe.entity.MemberEntity; | ||
|
||
public interface MemberRepository { | ||
MemberEntity findById(long memberId); | ||
} |
32 changes: 32 additions & 0 deletions
32
src/main/java/com/study/bookcafe/dao/TestBookRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
package com.study.bookcafe.dao; | ||
|
||
import com.study.bookcafe.domain.Inventory; | ||
import com.study.bookcafe.entity.BookEntity; | ||
import org.springframework.stereotype.Repository; | ||
|
||
import java.sql.Date; | ||
import java.time.LocalDate; | ||
import java.util.HashMap; | ||
import java.util.List; | ||
import java.util.Map; | ||
|
||
@Repository | ||
public class TestBookRepository implements BookRepository { | ||
public static Map<Long, BookEntity> books = new HashMap<>(){{ | ||
put(1L, BookEntity.builder().id(1L).ISBN(9788936433598L).title("채식주의자").author("한강").publisher("창비").publishDate(Date.valueOf(LocalDate.of(2007, 10, 30))) | ||
.price(35000).inventory(new Inventory(5)).build()); | ||
put(2L, BookEntity.builder().id(2L).ISBN(9788954651134L).title("흰").author("한강").publisher("문학동네").publishDate(Date.valueOf(LocalDate.of(2018, 4, 25))) | ||
.price(13000).inventory(new Inventory(0)).build()); | ||
}}; | ||
|
||
public BookEntity findById(long bookId) { | ||
return books.get(bookId); | ||
} | ||
|
||
@Override | ||
public List<BookEntity> findByIdList(List<Long> bookIdList) { | ||
return bookIdList | ||
.stream().filter(id -> books.containsKey(id)) | ||
.map(id -> books.get(id)).toList(); | ||
} | ||
} |
38 changes: 38 additions & 0 deletions
38
src/main/java/com/study/bookcafe/dao/TestBorrowRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
package com.study.bookcafe.dao; | ||
|
||
import com.study.bookcafe.entity.BookEntity; | ||
import com.study.bookcafe.entity.BorrowEntity; | ||
import com.study.bookcafe.entity.MemberEntity; | ||
import org.springframework.stereotype.Repository; | ||
|
||
import java.util.HashMap; | ||
import java.util.List; | ||
import java.util.Map; | ||
|
||
@Repository | ||
public class TestBorrowRepository implements BorrowRepository { | ||
Map<Long, BorrowEntity> borrows = new HashMap<>(){{ | ||
put(1L, BorrowEntity.builder() | ||
.member(MemberEntity.builder().id(1).build()) | ||
.book(BookEntity.builder().id(1).ISBN(9788936433598L).build()).build()); | ||
put(2L, BorrowEntity.builder() | ||
.member(MemberEntity.builder().id(1).build()) | ||
.book(BookEntity.builder().id(2).ISBN(9788936433598L).build()).build()); | ||
put(3L, null); | ||
}}; | ||
|
||
public BorrowEntity findById(long borrowId) { | ||
return borrows.get(borrowId); | ||
} | ||
|
||
public BorrowEntity save(BorrowEntity borrowEntity) { | ||
return borrowEntity; | ||
} | ||
|
||
@Override | ||
public List<BorrowEntity> save(List<BorrowEntity> borrowEntityList) { | ||
return borrowEntityList | ||
.stream().filter(borrow -> borrows.containsKey(borrow.getId())) | ||
.map(borrow -> borrows.get(borrow.getId())).toList(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package com.study.bookcafe.domain; | ||
|
||
import lombok.Builder; | ||
import lombok.Getter; | ||
|
||
import java.sql.Date; | ||
|
||
@Builder | ||
@Getter | ||
public class Book { | ||
private long id; // 도서 번호 | ||
private long ISBN; // 국제표준도서번호 | ||
private String title; // 도서 명 | ||
private String author; // 저자 명 | ||
private String publisher; // 출판사 | ||
private Date publishDate; // 출판일 | ||
private double price; // 도서 가격 | ||
private Inventory inventory; // 도서 상태 정보 (재고, 대출, 예약) | ||
|
||
/** | ||
* 도서가 대출 가능한 상태인지 확인한다. | ||
* | ||
* @return 현재 도서의 대출 가능한 재고가 있는지 여부 | ||
*/ | ||
public boolean canBorrow() { | ||
return this.getInventory() != null && this.getInventory().isOnStock(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
package com.study.bookcafe.domain; | ||
|
||
import lombok.AllArgsConstructor; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import java.sql.Timestamp; | ||
|
||
@Builder | ||
@Getter | ||
@NoArgsConstructor | ||
@AllArgsConstructor | ||
public class Borrow { | ||
private long id; // 대출 ID | ||
private Member member; // 회원 | ||
private Book book; // 도서 | ||
private Timestamp borrowDate; // 대출 날짜 | ||
private Timestamp returnDate; // 반납 날짜 | ||
|
||
public Borrow(Member member, Book book) { | ||
this.member = member; | ||
this.book = book; | ||
} | ||
|
||
/** | ||
* 대출이 성공했는지 확인한다. | ||
* | ||
* @param borrow 대출 | ||
* @return 대출이 성공했는지 여부 | ||
*/ | ||
public static boolean successBorrow(Borrow borrow) { | ||
return borrow != null; | ||
} | ||
} |
Oops, something went wrong.