-
Notifications
You must be signed in to change notification settings - Fork 2
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, refactor: ListEntity 관련 전체 리팩터링 및 관련도순 정렬 기능 추가 #126
Conversation
73799c4
to
7fceadf
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ListEntity 부분 리펙토링 부분이랑 관련도순 정렬기능 구현하신 부분 정말정말 수고 많으셨어요! 요번에 한 수 배워가는 거 같습니다 정말 깔끔하게 잘 하시네요 ㅠㅠ
리뷰에서 질문사항 부분들을 추가하였으니 코멘트 달아주시면 감사하겠습니다 😎
public class Collaborators { | ||
|
||
private final List<Collaborator> collaborators; | ||
|
||
public Collaborators(List<Collaborator> collaborators) { | ||
this.collaborators = new ArrayList<>(collaborators); | ||
} | ||
|
||
public static void validateDuplicateCollaboratorIds(List<Long> collaboratorIds) { | ||
Set<Long> uniqueIds = new HashSet<>(collaboratorIds); | ||
if (collaboratorIds.size() != uniqueIds.size()) { | ||
throw new CustomException(DUPLICATE_USER, "중복된 콜라보레이터를 선택할 수 없습니다."); | ||
} | ||
} | ||
|
||
public List<Collaborator> getCollaborators() { | ||
return new ArrayList<>(collaborators); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
해당 방식이 일급컬렉션 방식이군요 확실히 Collaborator의 관련된 부분을 해당 레벨에서 처리할 수 있어 응집력도 좋아보이고 컬렉션의 불변성도 보장되어 보여 좋아보이네요
동호님 덕분에 좋은 방식 알아갑니다 ㅎㅎ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
그리고 해당부분은 따로 양방향으로 되어 있는 부분이 없어서 별도의 일급컬렉션으로 관리하는거라 @embeddable이 지정이 안되있는게 맞죠!?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
넵 맞습니다! List<Collaborator>
을 의존하는 엔티티가 없어서 굳이 @Embeddable
을 달아줄 필요가 없네용
@Column(updatable = false) | ||
@Temporal(TIMESTAMP) | ||
protected LocalDateTime createdDate; | ||
|
||
@LastModifiedDate | ||
@Temporal(TIMESTAMP) | ||
protected LocalDateTime updatedDate; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
혹시 TIMESTAMP로 바꾼 이유가 있을까요!?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
기존 datetime
과 비교해 더 적은 공간을 사용한다는 점과 MySQL 서버가 자동으로 TimeZone에 따른 UTC 값으로 자동 변환해주는 기능을 제공하기 때문입니다.
🚨 Waring
Merge 하기 전에 수행할 DB 변경사항이 있습니다.
timestamp(6)
으로 변경해야 합니다.name
으로 변경해야 합니다.category_code
로 변경하고varchar(10) not null
로 속성을 변경해야 합니다.Description
ListEntity 관련 모든 Domain, Service, Controller를 리팩터링 했습니다..!
주로 도메인 객체 간의 협력이 활발하게 이루어지도록 개선했습니다. 따라서 Service 계층의 로직에도 다소 변경이 이루어졌습니다.
결과적으로 일대다 양방향 연관관계를 유지하게 되었습니다. 😂
리스트 검색 메서드 리팩터링하다보니 자연스레 관련도 순 기능도 구현하게 되었습니다.
리스트 관련 모든 기능들을 로컬에서 직접 돌려보며 테스트 완료했습니다.
테스트 한 기능들: 리스트 생성, 리스트 상세 조회, 리스트 전체 조회, 최신 리스트 10개 조회, 탐색페이지 트랜딩 리스트, 탐색 페이지 사용자 추천 리스트
Domain, Repository -> Service -> Controller 순으로 커밋했습니다.
따라서 커밋 순서대로 리뷰하시면 수월할 것 같습니다.
또한, QueryDsl을 사용하는 CustomRepository의 일부 코드도 수정했습니다.
이 부분 유심히 리뷰해주시면 감사하겠습니다!
일급 컬렉션 객체 생성 (Labels, Items) 에 따라
QLabel.label
,QLabels.labels
,QItem.item
,QItems.items
으로 생성되었습니다.이에 따라
QListEntity.listEntity.labels
,QListEntity.listEntity.items
로 사용해야 합니다.(근데 이게 맞는진 확신이 안서네요..!)
ddl-auto 옵션을 create로 바꾸고 싶습니다.
로컬에서 테스트할 때 create-drop으로 하게 되면 애플리케이션 종료될 때마다 테이블 모두 날라가서 테스트가 힘들어지네요 ㅜㅜ
추가적으로 BaseEntity의 접근 제어자를
private
로 변경했습니다.처음
protected
로 했을 때는 해당 필드를 get 해오고 싶어서 한건데, getter가 열려 있으니까 괜한 짓임을 이제야 알게 됐네요 ㅎㅎ..Relation Issues