Chapter, Content

NJW·2023년 5월 4일
0

HCI project

목록 보기
9/14

이름 변경

처음에 설정했던 BigChapter과 SmallChapter를 각각 Chapter과 Content로 바꿨다.
일단 너무 이름이 추성적이기도 했고 너무 길었다... 이렇게 바꾸니까 훨씬 더 쉽게 알아보고 쓰기도 쉽다

Chapter

Chapter Repository

  1. 이번에도 EntityManager를 사용해서 영속성 관리를 해준다.
  2. create, 하나의 챕터를 만들어준다.
  3. delete, 하나의 챕터를 삭제하는 기능으로 만일 하위 항목인 Content가 있으면 삭제를 못하게 했다. 이 부분은 Service에서 구현했다.
  4. findOne, 하나의 챕터를 찾아준다.
  5. findAll, 모든 챕터를 찾아주는 부분이다.
  6. findContentAll, 하위 항목인 Content를 찾아주는 거다. 만일 여기서 Content가 존재한다면 이때 Chapter를 삭제하면 안 된다. 그 이유는 하나 이상의 Content는 하나의 Chapter와 연결되어 있는데, 여기서 Content가 존재하는 Chapter를 삭제하면 해당 Content들은 고아 객체가 되기 때문이다. 때문에 Content가 존재하는지 알아봐야 한다.
    처음에는 findAll에서 사용한 쿼리를 그대로 붙였다. 그러나 잠시 생각을 해보니 이렇게 하면 해당 Chapter에 있는 Content 외에도 모든 Content를 불러가지고 온다. 그렇기 때문에 id로 Chapter를 찾아서 해당 Chapter 내에 있는 Content의 목록을 get하는 방식을 이용했다.
    적절한 쿼리를 사용하면 될 거 같기는 한데, 일단 이렇게 해놓고 나중에 고치도록.

Chapter Service

  1. ChapterRepository를 불러온다. @RequiredArgsConstructor를 위에 붙여줬기 때문에 Autowired는 안 붙여도 된다.
  2. createChapter, Chapter를 생성하는 부분이다.
  3. deleteChapter, Chapter를 삭제하는 부분으로 먼저 하위 내용들이 있는지 확인한다. 그리고 삭제한다.
  4. findContent, Chapter를 삭제할 때 해당 Chapter 밑에 있는 Content를 찾는 기능으로 만일 리스트가 비어 있지 않으면 예외를 호출한다.
  5. findOne, 하나의 Chapter를 찾아오는 기능이다.
  6. findChapters, 여러 개의 Chapter를 찾아오는 기능이다.

Content

ContentRepository

  1. EntityManager로 영속성 관리를 하도록 했다.
  2. create, Content를 생성하는 부분이다.
  3. delete, Content를 지우는 부분이다. 여기서는 굳이 하위 항목을 찾을 필요가 없다. 애초에 하위 항목이 없으니...
  4. findOne, Content 하나를 찾아오는 부분이다.
  5. findAll, 모든 컨텐츠의 부분을 찾아오는데... 굳이 이걸 할 필요가 있나? 싶은 기능이다.

ContentService

  1. @RequiredArgsConstructor를 사용했기에 contentRepository에는 Autowired를 붙이지 않는다.
  2. createContent, Content를 등록하는 부분이다.
  3. deleteContent, Content를 삭제하는 부분이다.
  4. updateContent, Content를 업데이트하는 부분인데. 여기서 Chapter는 변경되지 않도록 했다. 기능을 따로 만들까 아니면 그냥 같이 넣을까 고민 중이다.
  5. findOne, Content를 하나 찾는 기능이다.
  6. findAllContents, 모든 content를 찾는 기능인데 이것도 레파지토리와 마찬가지로 굳이 싶다.

Test

아직 안 했다.

GitHub

https://github.com/Jiwonna52/novelPlatform

profile
https://jiwonna52.tistory.com/

0개의 댓글