Skip to content

Commit

Permalink
Merge pull request #5 from f-lab-edu/feature/1
Browse files Browse the repository at this point in the history
[#1] repository에서 도메인 모델 분리
  • Loading branch information
shine-17 authored Dec 11, 2024
2 parents 5f5dea7 + a1de177 commit 95ba708
Show file tree
Hide file tree
Showing 15 changed files with 116 additions and 88 deletions.
6 changes: 3 additions & 3 deletions src/main/java/com/study/bookcafe/dao/BookRepository.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.study.bookcafe.dao;

import com.study.bookcafe.entity.BookEntity;
import com.study.bookcafe.domain.Book;

import java.util.List;

public interface BookRepository {
BookEntity findById(long bookId);
List<BookEntity> findByIdList(List<Long> bookIdList);
Book findById(long bookId);
List<Book> findByIdList(List<Long> bookIdList);
}
9 changes: 4 additions & 5 deletions src/main/java/com/study/bookcafe/dao/BorrowRepository.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package com.study.bookcafe.dao;

import com.study.bookcafe.entity.BorrowEntity;

import com.study.bookcafe.domain.Borrow;
import java.util.List;

public interface BorrowRepository {

BorrowEntity findById(long borrowId);
BorrowEntity save(BorrowEntity borrowEntity);
List<BorrowEntity> save(List<BorrowEntity> borrowEntityList);
Borrow findById(long borrowId);
Borrow save(Borrow borrow);
List<Borrow> save(List<Borrow> borrowList);

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.study.bookcafe.dao;

import com.study.bookcafe.domain.Level;
import com.study.bookcafe.entity.MemberEntity;
import com.study.bookcafe.domain.Member;
import org.springframework.stereotype.Repository;

import java.util.HashMap;
Expand All @@ -10,14 +10,14 @@
@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());
Map<Long, Member> members = new HashMap<>(){{
put(1L, Member.builder().id(1L).name("슈카").level(Level.BASIC).borrowCount(0).build());
put(2L, Member.builder().id(2L).name("머스크").level(Level.WORM).borrowCount(3).build());
put(3L, Member.builder().id(3L).name("트럼프").level(Level.LIBRARIAN).borrowCount(5).build());
}};

@Override
public MemberEntity findById(long memberId) {
public Member findById(long memberId) {
return members.get(memberId);
}
}
4 changes: 2 additions & 2 deletions src/main/java/com/study/bookcafe/dao/MemberRepository.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.study.bookcafe.dao;

import com.study.bookcafe.entity.MemberEntity;
import com.study.bookcafe.domain.Member;

public interface MemberRepository {
MemberEntity findById(long memberId);
Member findById(long memberId);
}
12 changes: 6 additions & 6 deletions src/main/java/com/study/bookcafe/dao/TestBookRepository.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.study.bookcafe.dao;

import com.study.bookcafe.domain.Book;
import com.study.bookcafe.domain.Inventory;
import com.study.bookcafe.entity.BookEntity;
import org.springframework.stereotype.Repository;

import java.sql.Date;
Expand All @@ -12,19 +12,19 @@

@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)))
public static Map<Long, Book> books = new HashMap<>(){{
put(1L, Book.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)))
put(2L, Book.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) {
public Book findById(long bookId) {
return books.get(bookId);
}

@Override
public List<BookEntity> findByIdList(List<Long> bookIdList) {
public List<Book> findByIdList(List<Long> bookIdList) {
return bookIdList
.stream().filter(id -> books.containsKey(id))
.map(id -> books.get(id)).toList();
Expand Down
30 changes: 15 additions & 15 deletions src/main/java/com/study/bookcafe/dao/TestBorrowRepository.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.study.bookcafe.dao;

import com.study.bookcafe.entity.BookEntity;
import com.study.bookcafe.entity.BorrowEntity;
import com.study.bookcafe.entity.MemberEntity;
import com.study.bookcafe.domain.Book;
import com.study.bookcafe.domain.Borrow;
import com.study.bookcafe.domain.Member;
import org.springframework.stereotype.Repository;

import java.util.HashMap;
Expand All @@ -11,27 +11,27 @@

@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());
Map<Long, Borrow> borrows = new HashMap<>(){{
put(1L, Borrow.builder()
.member(Member.builder().id(1).build())
.book(Book.builder().id(1).ISBN(9788936433598L).build()).build());
put(2L, Borrow.builder()
.member(Member.builder().id(1).build())
.book(Book.builder().id(2).ISBN(9788936433598L).build()).build());
put(3L, null);
}};

public BorrowEntity findById(long borrowId) {
public Borrow findById(long borrowId) {
return borrows.get(borrowId);
}

public BorrowEntity save(BorrowEntity borrowEntity) {
return borrowEntity;
public Borrow save(Borrow borrow) {
return borrow;
}

@Override
public List<BorrowEntity> save(List<BorrowEntity> borrowEntityList) {
return borrowEntityList
public List<Borrow> save(List<Borrow> borrowList) {
return borrowList
.stream().filter(borrow -> borrows.containsKey(borrow.getId()))
.map(borrow -> borrows.get(borrow.getId())).toList();
}
Expand Down
6 changes: 1 addition & 5 deletions src/main/java/com/study/bookcafe/domain/Borrow.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.study.bookcafe.vo.Period;
import lombok.*;

import java.time.LocalDateTime;

@Builder
Expand All @@ -13,12 +12,9 @@ public class Borrow {
private long id; // 대출 ID
private Member member; // 회원
private Book book; // 도서
// private Timestamp borrowDate; // 대출 날짜
// private Timestamp returnDate; // 반납 날짜

private Period period; // 대출 기간

public Borrow(Member member, Book book, LocalDateTime from) {
public Borrow(@NonNull Member member, @NonNull Book book, LocalDateTime from) {
this.member = member;
this.book = book;
this.period = new Period(from);
Expand Down
9 changes: 4 additions & 5 deletions src/main/java/com/study/bookcafe/domain/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

import lombok.Builder;
import lombok.Getter;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

Expand All @@ -16,8 +15,8 @@ public class Member {
private Level level; // 회원 등급
private int borrowCount; // 현재 대출 권수

private LocalDate createDate; // 회원 가입 일자
private LocalDate updateDate; // 회원 수정 일자
private LocalDateTime createDate; // 회원 가입 일자
private LocalDateTime updateDate; // 회원 수정 일자

/**
* 회원이 대출 가능한 상태인지 알려준다.
Expand All @@ -39,7 +38,7 @@ public List<Borrow> borrowBook(List<Book> bookList) {
// 대출 가능한 도서만 목록에 담기
return bookList.stream()
.filter(Book::canBorrow)
.map(book -> new Borrow(this, book))
.map(book -> new Borrow(this, book, LocalDateTime.now()))
.toList();
}
}
11 changes: 4 additions & 7 deletions src/main/java/com/study/bookcafe/dto/BorrowDto.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package com.study.bookcafe.dto;

import com.study.bookcafe.vo.Period;
import lombok.*;

import java.sql.Timestamp;
import java.time.LocalDateTime;

@Builder
Expand All @@ -14,13 +13,11 @@ public class BorrowDto {
private long id; // 대출 ID
private MemberDto member; // 회원
private BookDto book; // 도서
private Timestamp borrowDate; // 대출 날짜
private Timestamp returnDate; // 반납 날짜
private Period period; // 대출 기간

public BorrowDto(MemberDto member, BookDto book) {
public BorrowDto(MemberDto member, BookDto book, LocalDateTime from) {
this.member = member;
this.book = book;
this.borrowDate = Timestamp.valueOf(LocalDateTime.now());
this.returnDate = Timestamp.valueOf(LocalDateTime.now().plusWeeks(1));
this.period = new Period(from);
}
}
9 changes: 5 additions & 4 deletions src/main/java/com/study/bookcafe/entity/BorrowEntity.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
package com.study.bookcafe.entity;

import com.study.bookcafe.vo.Period;
import lombok.Builder;
import lombok.Getter;

import java.sql.Timestamp;
import lombok.NonNull;

@Builder
@Getter
public class BorrowEntity {
private long id; // 대출 ID
@NonNull
private MemberEntity member; // 회원
@NonNull
private BookEntity book; // 도서
private Timestamp borrowDate; // 대출 날짜
private Timestamp returnDate; // 반납 날짜
private Period period; // 대출 기간
}
20 changes: 12 additions & 8 deletions src/main/java/com/study/bookcafe/mapper/BorrowMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,35 +20,39 @@ public interface BorrowMapper {
@Mapping(target = "id", source = "id")
@Mapping(target = "member", source = "member", qualifiedByName = {"MemberMapper", "MemberToMemberDto"})
@Mapping(target = "book", source = "book", qualifiedByName = {"BookMapper", "BookToBookDto"})
@Mapping(target = "borrowDate", source = "borrowDate")
@Mapping(target = "returnDate", source = "returnDate")
// @Mapping(target = "borrowDate", source = "borrowDate")
// @Mapping(target = "returnDate", source = "returnDate")
@Mapping(target = "period", source = "period")
// Borrow -> BorrowDto
BorrowDto toBorrowDto(Borrow borrow);

@Name("BorrowDtoToBorrow")
@Mapping(target = "id", source = "id")
@Mapping(target = "member", source = "member", qualifiedByName = {"MemberMapper", "MemberDtoToMember"})
@Mapping(target = "book", source = "book", qualifiedByName = {"BookMapper", "BookDtoToBook"})
@Mapping(target = "borrowDate", source = "borrowDate")
@Mapping(target = "returnDate", source = "returnDate")
// @Mapping(target = "borrowDate", source = "borrowDate")
// @Mapping(target = "returnDate", source = "returnDate")
@Mapping(target = "period", source = "period")
// BorrowDto -> Borrow
Borrow toBorrow(BorrowDto borrowDto);

@Named("BorrowToBorrowEntity")
@Mapping(target = "id", source = "id")
@Mapping(target = "member", source = "member", qualifiedByName = {"MemberMapper", "MemberToMemberEntity"})
@Mapping(target = "book", source = "book", qualifiedByName = {"BookMapper", "BookToBookEntity"})
@Mapping(target = "borrowDate", source = "borrowDate")
@Mapping(target = "returnDate", source = "returnDate")
// @Mapping(target = "borrowDate", source = "borrowDate")
// @Mapping(target = "returnDate", source = "returnDate")
@Mapping(target = "period", source = "period")
// Borrow -> BorrowEntity
BorrowEntity toBorrowEntity(Borrow borrow);

@Named("BorrowEntityToBorrow")
@Mapping(target = "id", source = "id")
@Mapping(target = "member", source = "member", qualifiedByName = {"MemberMapper", "MemberEntityToMember"})
@Mapping(target = "book", source = "book", qualifiedByName = {"BookMapper", "BookEntityToBook"})
@Mapping(target = "borrowDate", source = "borrowDate")
@Mapping(target = "returnDate", source = "returnDate")
// @Mapping(target = "borrowDate", source = "borrowDate")
// @Mapping(target = "returnDate", source = "returnDate")
@Mapping(target = "period", source = "period")
// BorrowEntity -> Borrow
Borrow toBorrow(BorrowEntity borrowEntity);

Expand Down
7 changes: 2 additions & 5 deletions src/main/java/com/study/bookcafe/service/BookServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.study.bookcafe.dao.BookRepository;
import com.study.bookcafe.domain.Book;
import com.study.bookcafe.entity.BookEntity;
import com.study.bookcafe.mapper.BookMapper;
import org.springframework.stereotype.Service;

Expand All @@ -27,8 +26,7 @@ public BookServiceImpl(BookRepository bookRepository, BookMapper bookMapper) {
*/
@Override
public Book findById(long bookId) {
BookEntity bookEntity = bookRepository.findById(bookId);
return bookMapper.toBook(bookEntity);
return bookRepository.findById(bookId);
}

/**
Expand All @@ -39,7 +37,6 @@ public Book findById(long bookId) {
*/
@Override
public List<Book> findByIdList(List<Long> bookIdList) {
List<BookEntity> BookEntityList = bookRepository.findByIdList(bookIdList);
return bookMapper.toBookList(BookEntityList);
return bookRepository.findByIdList(bookIdList);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@ public BorrowServiceImpl(BorrowRepository borrowRepository, BorrowMapper borrowM
*/
@Override
public Borrow save(Borrow borrow) {
BorrowEntity borrowEntity = borrowRepository.save(borrowMapper.toBorrowEntity(borrow));
return borrowMapper.toBorrow(borrowEntity);
return borrowRepository.save(borrow);
}
/**
* 새로운 여러 대출들을 저장한다.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import com.study.bookcafe.domain.Book;
import com.study.bookcafe.domain.Borrow;
import com.study.bookcafe.domain.Member;
import com.study.bookcafe.entity.MemberEntity;
import com.study.bookcafe.mapper.MemberMapper;
import org.springframework.stereotype.Service;

Expand Down Expand Up @@ -33,8 +32,7 @@ public MemberServiceImpl(MemberRepository memberRepository, BorrowService borrow
*/
@Override
public Member findById(long memberId) {
MemberEntity memberEntity = memberRepository.findById(memberId);
return memberMapper.toMember(memberEntity);
return memberRepository.findById(memberId);
}

/**
Expand Down
Loading

0 comments on commit 95ba708

Please sign in to comment.