Latte 개발일지 : 4. Post 작성, 수정, 삭제 개발

이동건·2021년 8월 19일
1

Latte

목록 보기
4/9

post list를 개발하기 전에 우선 post 작성 부분부터 개발해보도록 하자.

제목과 본문, 태그로 이루어져있는 걸 알 수 있다.
그리고 태그 또한 추가할 수 있는 구조이다.

본문의 다양한 폰트나 색은 프론트에서 태그를 통해 넣어줄 것이다.
코드 삽입을 통해 코드 역시 삽입 가능하고, 코드 부분은 따로 저장하도록 한다.
이미지, 파일의 경우 Amazon S3를 사용하여 처리할 것이기 때문에 따로 추가할 부분은 없다.

역시 기능사항 정리부터 시작하자

  • 사용자는 제목을 작성하여 전송한다.
    • 제목은 null, 혹은 "" 일 수 없다.
  • 사용자는 본문을 작성하여 전송한다.
    • 본문은 null, 혹은 "" 일 수 없다.
  • 사용자는 태그를 지정할 수 있다.
  • 포스트 내부 코드는 따로 저장된다.
  • 저장시에 작성자 아이디도 같이 전송된다.

그럼 이제 포스트 추가 부분에 대한 테스트와 코드를 구현해 보자.



제목, 본문에 아무것도 작성하지 않거나 띄어쓰기만 있는 경우를 배제하기 위해서 org.springframework.util.StringUtils의 hasText를 사용하였다. 이로 인해 타이틀, 컨텐츠에 아무것도 적지 않거나 띄어쓰기만 있는 경우 예외 처리를 할 수 있었다.
code 부분 구분에 대한 것은 아직 프론트의 답이 오지 않아 추후에 추가하겠다.

태그 추가부분에 대해 테스트를 작성한다.
태그의 경우 사용자가 직접 입력하는 방식이 아닌, 정해진 태그 내에서 선택하는 부분이므로 선택된 태그의 id 값만 받아오면 된다.
포스트를 먼저 저장한 후, 해당 포스트의 id값을 받아 tag를 추가하는 방식으로 진행하면 될 것 같다.


컨트롤러를 다음과 같이 작성했다.

CreatePostRequest에 쓰인 대로 유저id, 포스트 제목, 내용, 코드, 그리고 태그에 대한 id들을 받아주었다.
그 중 태그를 제외한 나머지 것들을 이용해 postService.post로 포스트를 생성해주었고, 태그에 대한 것들은 tagRepository에서 id로 값을 찾아 post.addPostTag를 이용해 tag들을 추가해 주었다.

이렇게 포스트 작성에 대한 api를 작성할 수 있었다.

다음에는 작성된 포스트에 대한 수정, 삭제를 해 보자.

우선 다음과 같이 테스트를 작성해준다.

그리고 PostService에서 다음과 같이 코드를 작성해 준다.

그런데 hasText valid하는 부분이 위의 post메서드와 겹친다.
그러므로 따로 메서드를 만들어 빼도록 리팩토링 해 주자.

그럼 이어서 Post에서 changePost와 deletePost를 만들어주자.

post는 isDeleted를 이용해 삭제 처리를 해 주었기 때문에 다음처럼 isDeleted만 1로 바꾸는 것으로 deletePost를 구현하였다.


포스트 수정 테스트를 돌려보니 초록 막대가 떠올랐다.
이어서 수정의 공백 / 띄어쓰기 역시 테스트해 준다.

역시 전부 초록 막대가 나타나는 걸 확인할 수 있었다.

이어서 포스트 삭제도 테스트 해 준다.

이 역시 테스트를 통과하며 모두 정상적으로 처리됨을 알 수 있었다.

이어서 api를 작성해 준다.

이렇게 간단하게 api를 작성하는 것으로 포스트 작성, 수정, 삭제를 완성하였다.
다음에는 이렇게 생성된 post를 읽는 것, post list 불러오기를 진행해 보도록 하겠다.

++추가
post tag 수정을 빼먹어서 추가한다.

다음처럼 테스트를 짜 주었다.


구현은 clearPostTag를 만들어 아예 새롭게 다시 저장하는 방식으로 진행했다.

api는 다음과 같이 updatePost에 추가로 작성해 주었다.

request에는 List< Long > tagIds를 추가하였다.

그러는 김에 TagService를 PostService로 통합하였다. 테스트 역시 마찬가지다.

profile
코드를 통한 세계의 창조

0개의 댓글