Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feat/house service] 빈집 게시글 API 추가 개발 #188

Merged
merged 21 commits into from
Jun 23, 2023

Conversation

dldmsql
Copy link
Member

@dldmsql dldmsql commented Jun 23, 2023

주요 작업 내용

한 줄로 정리해주세요.

#187 빈집 게시글 신고/ 임시저장/ 스크랩 기능 구현 및 문서 발행

작업 내용

  • 빈집 테이블 컬럼 수정
  • 빈집 게시글 DTO 수정
  • 빈집 게시글 상세 조회 API 분리
  • 빈집 게시글 수정 API
  • 빈집 게시글 스크랩
  • 빈집 게시글 신고 API
  • 빈집 게시글 목록 조회 조건 수정
  • 추가 개발 API 테스트코드 작성
  • 게시글 내용 10,000자 이상인지 유효성 검증 리펙토링
  • 게시글 내용 유효성 검사 실패 케이스 테스트 코드 작성
  • 게시글 임시저장 API
  • 내가 작성한 게시글 중 임시저장 게시글 목록 조회 API

변경점

  • 스크랩 여부 판단을 위해 상세 조회 API 분리

이유 : 컨트롤러 단에서 유저 데이터를 받아오기 때문에, API 분리 결정

CheckList

  • CI를 통과했나요?
  • 리뷰어를 등록했나요?
  • 참고 레퍼런스가 있을 경우, PR 혹은 댓글로 남겼나요?

dldmsql added 14 commits June 22, 2023 23:27
게시글 내용에서 게시글 작성자 닉네임으로 변경
기능 명세서 상에 층수 데이터 표기가 바뀜에 따라 한 개의 컬럼으로 관리하기로 결정
빈집 게시글 신고 플래그 및 사유 컬럼 추가, 검색 조건 수정
일반 유저의 빈집 게시글인 경우, 관리자 승인 신청 상태로 변경 및 게시글 목록 조회 조건 수정
스크랩 여부 플래그 전달을 위해 로그인과 비로그인 유저에 대해 분리
로그인 유저의 빈집 게시글 상세 조회, 신고하기 API 문서화
관리자페이지에서 승인 혹은 반려 처리가 가능함에 따라 boolean에서 enum으로 데이터 관리 방식 변경
더미 데이터의 리뷰 상태 승인으로 변경
@dldmsql dldmsql added bug 버그 이슈 docs 문서 수정 feature 기능 개발 이슈 labels Jun 23, 2023
@dldmsql dldmsql self-assigned this Jun 23, 2023
@dldmsql
Copy link
Member Author

dldmsql commented Jun 23, 2023

image

게시글의 순수 내용 길이가 10,000자 이상인 경우 다음과 같이 에러 발생

@dldmsql
Copy link
Member Author

dldmsql commented Jun 23, 2023

망나니개발자-aop 기반 유효성 검증 참고하여 리펙토링 하였습니다.

YoonTaeMinnnn

This comment was marked as resolved.

@YoonTaeMinnnn
Copy link
Contributor

망나니개발자-aop 기반 유효성 검증 참고하여 리펙토링 하였습니다.

혹시 @Validation 어노테이션을 사용하지 않고, 직접 커스텀해서 검증을 한 이유가 있나요?

dldmsql added 3 commits June 23, 2023 21:38
기존 로직이 유효하지 않음을 확인하여, ConstraintValidator를 이용하는 로직으로 수정
더미 데이터에 10,000자의 내용이 담겨 있음
@dldmsql
Copy link
Member Author

dldmsql commented Jun 23, 2023

혹시 aop 코드는 어디에 있나요?

좀 전에 수정해서 올려두었습니다!!

@dldmsql
Copy link
Member Author

dldmsql commented Jun 23, 2023

망나니개발자-aop 기반 유효성 검증 참고하여 리펙토링 하였습니다.

혹시 @Validation 어노테이션을 사용하지 않고, 직접 커스텀해서 검증을 한 이유가 있나요?

게시글의 내용에 해당하는 DTO 변수인 code는 react-quill 라이브러리에 의해 html 태그와 img 주소가 포함된 채로 넘어옵니다. 기능 명세서 상에서 제시한 유효성 조건은 순수한 게시글 내용이 10,000자를 넘기지 않는 것이었기에 태그와 이미지 주소가 제외된 값이 필요했으며 이를 validation에서 제공하는 @SiZe 어노테이션으로 처리할 수 없다고 판단했습니다.

따라서 커스터마이징을 통해 순수 게시글의 내용 값을 추출하고 그 길이가 10,000자를 넘기는 지의 여부를 확인할 필요가 있었으며, 관심사의 분리를 위해 AOP 기반으로 구성하였습니다.

빈집 게시글 외에도 주말의집 서비스 내에서 게시글 내용에 대한 길이 유효성 검사가 필요한 경우, 글로벌하게 사용할 수 있도록 feild에 한해 유효성 검사를 하는 어노테이션으로 구성하였습니다.!

@dldmsql dldmsql requested a review from YoonTaeMinnnn June 23, 2023 12:43
MoonMinHyuk1
MoonMinHyuk1 previously approved these changes Jun 23, 2023
REJECT("반려"),
}

@Converter(autoApply = true)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

enum class를 이렇게 converting할 수 있네요! 이렇게 되면 DB에는 그대로 enum값으로 저장될 것 같은데 enum의 value값은 어디서 사용되나요??

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

추후 관리자 페이지나 프론트에서 해당 value를 요청할 수도 있고, 개발자가 유지보수하기에도 각각의 enum이 어떤 것을 의미하는 지 알 수 있도록 명시적으로 표현하고 싶었습니다!

.limit(pageable.pageSize.toLong())
.offset(pageable.offset)
.fetch()
val countQuery = jpaQueryFactory
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

count query 적용 멋지십니다 !! 👍

YoonTaeMinnnn
YoonTaeMinnnn previously approved these changes Jun 23, 2023
Copy link
Contributor

@YoonTaeMinnnn YoonTaeMinnnn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Validation 으로는 한계가 있었군요,,., 고생하셨습니다!!

더미 데이터 글자수 10502로 세팅
@dldmsql dldmsql dismissed stale reviews from YoonTaeMinnnn and MoonMinHyuk1 via 989e568 June 23, 2023 13:03
@dldmsql
Copy link
Member Author

dldmsql commented Jun 23, 2023

기존 코드에서 유효성 검증 로직을 반대로 구현해서 해당 부분 수정하였습니다~! MockEntity에서 글자수 10502자로 세팅해두었습니다.!!

@sonarqubecloud
Copy link

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 1 Code Smell

94.3% 94.3% Coverage
0.0% 0.0% Duplication

@dldmsql dldmsql merged commit 0bd3664 into dev Jun 23, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug 버그 이슈 docs 문서 수정 feature 기능 개발 이슈
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants