-
Notifications
You must be signed in to change notification settings - Fork 8
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
[BE] 방 수정 기능 & 스케줄러 부분 분리 및 리팩토링(#605) #606
Conversation
19f7829
to
adb297b
Compare
Test Results 52 files 52 suites 7s ⏱️ Results for commit 800c48b. ♻️ This comment has been updated with latest results. |
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.
수고하셨씁니다~! 👍
return ResponseEntity.created(URI.create(String.format("/rooms/%d", response.id()))) | ||
.body(response); |
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.
update 응답 http status code
가 201이네용??
깜빡한듯요~
public List<AutomaticMatching> findByStatus(ScheduleStatus status) { | ||
return automaticMatchingRepository.findAllByStatus(status); | ||
} |
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.
하나의 값을 반환할것 같아요. 메서드명도 같이 수정해주면 좋을 듯 합니다~
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.
제안: findMatchingsByStatus
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.
제안: findMatchingsByStatus
Reader
와 Writer
는 최대한 Reader 와 Writer 인걸 명확하게 사용하고 싶어요.
( AutomaticMatchingReader
라는 클래스만 봐도 AutomaticMatching
을 읽을거라 기대 )
그렇기에 findAllByStatus 만 해도 충분할 거 같다는 생각이 드는데 어떤가요?
@Transactional(readOnly = true) | ||
public class AutomaticMatchingService { | ||
|
||
private static final ZoneId ZONE_ID = ZoneId.of("Asia/Seoul"); | ||
|
||
private final TaskScheduler taskScheduler; | ||
private final AutomaticMatchingExecutor automaticMatchingExecutor; | ||
private final AutomaticMatchingRepository automaticMatchingRepository; | ||
private Map<Long, ScheduledFuture<?>> scheduledTasks; |
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.
private Map<Long, ScheduledFuture<?>> scheduledTasks; | |
private final Map<Long, ScheduledFuture<?>> scheduledTasks; |
this.taskScheduler = taskScheduler; | ||
this.automaticMatchingExecutor = automaticMatchingExecutor; | ||
this.scheduledTasks = new ConcurrentHashMap<>(); |
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.
this.taskScheduler = taskScheduler; | |
this.automaticMatchingExecutor = automaticMatchingExecutor; | |
this.scheduledTasks = new ConcurrentHashMap<>(); | |
this(taskScheduler, automaticMatchingExecutor, new ConcurrentHashMap<>()); |
|
||
matchings.forEach(matching -> scheduleMatching(matching.getRoomId(), matching.getMatchingStartTime())); | ||
public void modifyTask(Room room) { | ||
cancelScheduledMatching(room.getId()); |
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.
안전하게 cancel(room.getId)로 호출해보는건 어떨까요~?
.stream() | ||
.toList(); |
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.
이거 붙은 이유가 뭔가요?? 🧐
public AutomaticUpdateService(TaskScheduler taskScheduler, AutomaticUpdateExecutor automaticUpdateExecutor) { | ||
this.taskScheduler = taskScheduler; | ||
this.automaticUpdateExecutor = automaticUpdateExecutor; | ||
this.scheduledTasks = new ConcurrentHashMap<>(); | ||
} |
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.
위 커멘트와 동일하게 생성자 체이닝을 이용해봐도 좋을듯합니다~
public void updateAtReviewDeadline(RoomResponse response) { | ||
scheduleUpdate(response.id(), response.reviewDeadline()); | ||
public void modifyTask(Room room) { | ||
cancelScheduledUpdate(room.getId()); |
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.
이 부분도 마찬가지입니다
cancel()
;
return ROOM_CREATE_REQUEST(LocalDateTime.now() | ||
.plusHours(2), LocalDateTime.now() | ||
.plusDays(2)); |
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.
인텔리제이 포맷팅 기능을 사용하는것 같아요!
그래서 자꾸 날짜 형식을 오히려 이해하기 어렵게 만드는 것 같아요
포맷팅 기능에서 혹시 꺼볼 수 있나요??
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.
끄면 다른 곳에서 체이닝 할때도 다 꺼야해서 제 입장에선 더 오버 작업일거 같은데
그냥 유틸을 만들도록 할게여
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.
이거 유틸 만드려 했으나, 유틸 만들어도 큰 차이가 없을거 같아서 ( 어차피, 메소드 명 때문에 길어보임 )
-> �포맷팅을 RoomFixture 부분에 꺼두었습니다.
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.
구현하느라 고생 많았어요!
첨부해주신 것들도 잘 봤습니다.
구현 계층과 비즈니스 계층의 분리가 정말 심오하네요.
코드적으로 논의할 부분은 이미 뽀로로가 잘 짚어준 것 같아 approve 드립니다.
이보단 이야기할 점으로 적어준 부분이 앞으로의 리팩터링과 연관된 부분이라고 생각이 들어 이에 대해 생각한 부분 적어봅니다.
RoomAutomaticService 분리에 대해
두 서비스는 완전히 1:1 관계가 맞는 것 같아요.
결국 코드 레벨에서 room 도메인과 automatic 도메인을 분리한게 목적이라고 생각할 때에,
roomService -> roomAutomaticService 와 같은 관계보다 roomAutomaticService -> roomService 와 같은 관점도 좋을 것 같아요.
roomService.update 는 정말 room 과 관련된 로직 및 예외만을 발생시키게 되겠네요.
다만, controller 가 roomService 대신 roomAutomaticService 를 알아야 할 텐데, 이 점은 괜찮게 느껴지시나요?
AutomaticUpdateService 이름에 대해
AutomaticUpdateTaskManageService... 너무 기네요...
AutomaticUpdateManagementServcie... 이것도 기네요...
UpdateManagementService 과 같은 느낌은 어떤가요...? Scheduler 패키지에 속해 있어 automatic 이라는 단어가 안들어가도 의미상 혼동이 없을 것 같기도 해요.
추가적으로 AutomaticUpdateService 와 AutomaticMatchingService 둘 다 reader, writer 로 분리되면서 태크스 관리만 맞게 된 부분이 같아 네이밍을 같이 고려하면 좋을 것 같습니다.
AutomaticTask(Management)Service 로 추상화 시키는 것도 생각해봤는데, 그러려면 Executor 까지도 추상화 시키는게 맞는 것 같은데 그건 좀 힘들 것 같다는 생각이 드네요...
Reader / Writer 의 패키지 위치
Service 보단 domain 에 위치해야 한다는 의견에 동의합니다.
다만 가능하면 추가적인 패키지로 분리되는게 좋을 것 같긴해요.
제미니 님의 구현 계층에서 분리 필요성을 느끼게 되었지만, 이들만을 구현 계층으로 이름짓는건 조금 생각해봐야 할 것 같아요.
구현 계층(Implement) 도 좋은 것 같지만, Reader 와 Writer 는 Repository 계층과만 소통하면서 Service 가 다양한 Repository 를 의존하는 걸 끊어내는 역할도 수행한다는 생각이 들어요.
그런 의미에서 Repository에 Service 대신 소통(접속)한다는 의미에서 access(혹은 dataAccess) 패키지는 이상할까요..?
public List<AutomaticMatching> findByStatus(ScheduleStatus status) { | ||
return automaticMatchingRepository.findAllByStatus(status); | ||
} |
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.
제안: findMatchingsByStatus
|
||
private final AutomaticMatchingRepository automaticMatchingRepository; | ||
|
||
public AutomaticMatching findWithRoom(Room room) { |
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.
P5
네이밍 얘기가 나온 김에
아래 메서드가 findByXXX
이니
위 메서드도 findByRoom
이 되어도 좋겠네요~
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.
위에 코멘트가 안달려서 밑에 남깁니당.
제안: findMatchingsByStatus
Reader
와 Writer
는 최대한 Reader 와 Writer 인걸 명확하게 사용하고 싶어요.
( AutomaticMatchingReader
라는 클래스만 봐도 AutomaticMatching
을 읽을거라 기대 )
그렇기에 findByStatus 만 해도 충분할 거 같다는 생각이 드는데 어떤가요?
|
||
private final AutomaticUpdateRepository automaticUpdateRepository; | ||
|
||
public AutomaticUpdate findWithRoom(Room room) { |
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.
네이밍 관련 코멘트 동일합니다.
findByRoom
@@ -57,6 +57,23 @@ public RoomResponse create(long memberId, RoomCreateRequest request) { | |||
return RoomResponse.of(room, participation.getMemberRole(), ParticipationStatus.MANAGER); | |||
} | |||
|
|||
@Transactional | |||
public RoomResponse update(long memberId, RoomUpdateRequest request) { |
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.
P5
RoomUpdateResponse
를 분리하는 건 어떠신가요?
RoomUpdateRequest
가 있기도 하고,
update
메서드에서 MemberRole
과 ParticipationStatus
까지 반환해야 하는 이유가 없는 것 같아서요. 👀
방을 업데이트하는 로직인데 참여 여부를 확인하고 있는 것도 살짝 어색하게 느껴지고요.
(이미 방장임이 확인됨)
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.
방을 업데이트하는 로직인데 참여 여부를 확인하고 있는 것도 살짝 어색하게 느껴지고요.
(이미 방장임이 확인됨)
�우선, 저는 방장이 무조건 리뷰어로 참여만 하는거 자체를 경계하고 있습니다.
방장이 MANAGER
인건 명확하나, REVEIWER 인건 명확한지 궁금합니다.
( 지금 코드적 으로 명확히 분리가 안되서 더 그런거 같기도 해용 )
RoomUpdateResponse를 분리하는 건 어떠신 가요?
위의 관점도 그렇고, 명확하게 RoomResponse
도 프론트와 얘기해서 좀 더 분리가 잘 되는게 아니라면
당장은 불필요한 느낌입니당.
} | ||
|
||
@PutMapping | ||
public ResponseEntity<RoomResponse> update(@LoginMember AuthInfo authInfo, @RequestBody RoomUpdateRequest request) { |
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.
명세서 있는 건가요?
Member member = memberRepository.findById(memberId) | ||
.orElseThrow(() -> new CoreaException(ExceptionType.MEMBER_NOT_FOUND)); | ||
|
||
Room updateRoom = roomRepository.save(request.toEntity(member)); |
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.
P5
사소하긴 한데 updatedRoom
은 어떠신가요?
updateRoom
이라고 하니까 메서드명처럼 느껴지긴 합니다. 0ㅁ0
} | ||
|
||
|
||
// @Test | ||
// @DisplayName("모집 마감 기한이 되면 매칭을 자동으로 진행한다.") |
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.
혹시 여기 주석 처리된 이유가 뭘까요?
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.
이거는 MatchingServiceTest
가 수행해야 하는게 아닌, Executor
가 해야 하는 테스트라고 생각했습니다.
뽀로로꺼 머지된 후 다시 맡아서 분리하려고 주석 해놨습니다. ( 충돌 방지 )
RoomAutomaticService 를 분리해야 하는가이 부분은 제가 이해를 잘 못한 것 같은데, 사실 조금 어색하게 느껴지는 거 같긴 합니다. AutomaticUpdateService 이름 변경
Reader / Writer 의 패키지 위치
그런데 적당한 이름이 생각나지는 않네요... ㅎㅎ |
해당 부분 때문에 고민을 하고 있는거 같습니다. 파사드 패턴을 사용하지 않는 한 이 고민은 계속 할 거 같아요. Reader / Writer 의 패키지 위치이도, Domain 패키지 내 우선 위치시킬게요! |
* [BE] 방 매칭 실패 시 매칭 실패 원인을 전달하는 기능 구현(#562) (#575) * feat: 반환된 예외를 통해 실패 원인을 찾는 기능 구현 * feat: 실패한 매칭 정보를 저장하는 엔티티 구현 * feat: 매칭을 실패했을 경우 실패한 매칭 정보를 저장하는 기능 구현 * refactor: 클래스명 변경 * feat: 반환된 예외를 통해 매칭 실패 원인에 대한 메세지를 얻는 기능 구현 * refactor: FailedMatching 생성자 변경 * feat: 매칭 실패한 방을 조회시, 실패 원인을 같이 전달하는 기능 구현 * refactor: 맵 구현체 변경 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 종료 시, 코드 리뷰 완료 버튼 동작 안하도록 하는 기능 구현(#579) (#580) * feat: 방 종료 후 코드 리뷰 완료 버튼 검증 로직 구현 * fix: 잘못된 요청값 수정 (#566) Co-authored-by: youngsu5582 <[email protected]> * refactor: 리뷰 완료 요청 검증 로직 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> * [BE] 참여했던 방이 종료되면 참여 중 탭에서 제거(#581) (#584) * feat: 참여했던 방이 종료되면 참여 중 탭에서 제거하는 기능 구현 * [BE] 중복으로 매칭되던 상황 해결(#587) (#588) * refactor: 도메인 수정 * feat: 리뷰어, 리뷰이 조회 API 기능 구현 * refactor: 중복된 기능 코드 제거 * docs: 메서드 시그니쳐 통일 * feat: 시연용 데이터 추가 * refactor: 패키지 이동으로 인한 오류 수정 * feat: 시연용 데이터 추가 * fix: REMOTE_ORIGIN 그냥 변수로 변경 * feat: 데이터 추가 * feat: 서브모듈 반영 * feat: response 생성 때 reviewer, reviewee 분리 * feat: application 설정 변경 * feat: 데모 데이터 함수로 분리 * fix: 누락된 saveAll 추가 * fix: 데이터 정합성 수정 * fix: roomId 상수 변경 * feat: 피드백 키워드 뒤 .제거 * refactor: 3차 데모데이 데이터 변경 * feat: room 4에 대한 케이스도 추가 * feat: room 4 매칭 추가 * fix: 응답 내 프로필 링크로 변경 * 최신 브랜치 병합 * feat: submodule 업데이트 * refactor: 서브모듈 변경 * fix: 매칭 중복 예외 처리 안되던 오류 해결 * fix: 리뷰어 매칭 안되던 오류 수정 * test: participationFilter 로직 수정에 따른 테스트 수정 --------- Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> * feat: pr 제출 안 했을 때 문구 추가 (#590) Co-authored-by: jinsil <[email protected]> * [BE] 방 생성 검증 로직 주석 처리(#593) (#594) * refactor: 방 생성 검증 로직 주석 처리 * refactor: 운영 환경 설정 변경 * refactor: 방 생성 검증 로직 테스트 disabled 처리 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 매칭 실패 시 매칭 실패 원인을 전달하는 기능 구현(#562) (#575) * feat: 반환된 예외를 통해 실패 원인을 찾는 기능 구현 * feat: 실패한 매칭 정보를 저장하는 엔티티 구현 * feat: 매칭을 실패했을 경우 실패한 매칭 정보를 저장하는 기능 구현 * refactor: 클래스명 변경 * feat: 반환된 예외를 통해 매칭 실패 원인에 대한 메세지를 얻는 기능 구현 * refactor: FailedMatching 생성자 변경 * feat: 매칭 실패한 방을 조회시, 실패 원인을 같이 전달하는 기능 구현 * refactor: 맵 구현체 변경 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 종료 시, 코드 리뷰 완료 버튼 동작 안하도록 하는 기능 구현(#579) (#580) * feat: 방 종료 후 코드 리뷰 완료 버튼 검증 로직 구현 * fix: 잘못된 요청값 수정 (#566) Co-authored-by: youngsu5582 <[email protected]> * refactor: 리뷰 완료 요청 검증 로직 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: ashsty <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: jinsil <[email protected]> * refactor: 로컬 서버용 깃허브 토큰 변경 (#600) Co-authored-by: gyungchan Jo <[email protected]> * [BE] Room Controller 역할 분리(#595) (#596) * refactor: Room Controller 역할 분리 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * [BE] 자동 예약 및 자동 업데이트 동시성 제어(#586) (#604) * feat: Lock을 통한 자동 매칭 동시성 제어 기능 구현 * feat: Lock을 통한 자동 업데이트 동시성 제어 기능 구현 * feat: 자동 매칭 Lock 범위 최소화를 위한 클래스 구현 * feat: 자동 예약 Lock 범위 최소화를 위한 클래스 구현 * test: 자동 매칭 테스트 중복 코드 추상 클래스로 이동 * test: 자동 예약 테스트 중복 코드 추상 클래스로 이동 * refactor: Transactional 어노테이션 제거 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 수정 기능 & 스케줄러 부분 분리 및 리팩토링(#605) (#606) * feat: repository 의존성 제거, 테스트 명확하게 변경 * feat: Reader/Writer 통해 조회 로직 분리 * feat: 룸 수정 기능 구현 * refactor: 피드백 반영 * fix: 충돌 해결 --------- Co-authored-by: youngsu5582 <[email protected]> * [FE] 콜리네 서비스 제공후 QA(#597) (#602) * fix: 모집 마감 -> 종료된 방으로 변경 * fix: 매칭 후 pr 제출 안 해서 실패했을 때 바로 문구 띄우기 * design: 모달 이름에 width 변경 * design: 프로필 드롭다운에서 이름 다 보여지게 하기 * design: 배너 medium일 때 높이 수정 * feat: timeDropdown에서 선택된 시간이 제일 위에 떠있게 하기 * feat: 피드백 모아보기에서 세부 피드백에 scroll 추가 * design: 세부 피드백 높이 지정 * fix: content 길이 길어졌을 때 ... 로 보이게 하기 * design: 피드백 모달 엔터처리, line-height 추가 * feat: 분류 드롭다운으로 선택하게 변경 * feat: 키워드 없을 때 ui 처리 * feat: 방 매칭 실패 시 서버가 준 message 띄우기 * [BE] Room Controller 역할 분리(#595) (#596) * refactor: Room Controller 역할 분리 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * refactor: ALL 타입 추가 * feat: 수정된 api에 맞게 message 타입 추가 * fix: 방 생성 시 키워드 입력을 안했을 때 렌더링 조건 수정 * feat: 바뀐 RoomInfo 데이터 형식에 맞게 storybook 수정 --------- Co-authored-by: jinsil <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: 00kang <[email protected]> * [BE] 참여했던 방이 종료 된 후, 종료 탭 및 마이페이지에서 안보이는 문제 해결(#607) (#611) * refactor: 참여한 방을 조회하는 기능 수정 * refactor: 방을 조회하는 기능 메서드 분리 * refactor: 방을 조회 메서드 클래스 분리 * test: Nested 어노테이션을 통한 RoomServiceTest 관심사 분리 * feat: 참여했던 방이 종료되면 종료 탭에서 보이도록 하는 기능 구현 * feat: 종료 탭에서 자신이 참여했던 방도 나타내는 기능 구현 * test: 테스트 수정 * refactor: 조회 쿼리 수정 * refactor: 피드백 반영 * refactor: 변수명 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 로그 중복 작성 제거, 비즈니스 로직 내 로그 추가(#608) (#610) * feat: additivity false 로 변경 * refactor: 참가,취소 로직 분리 * chore: 로그 레벨 변경 * feat: 로그 추가 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * [FE] 24시간 이하로 남으면 디데이 말고 시간 보여주기(#598) (#609) * fix: 디데이가 1일 남은경우에도 24시간 미만 남은경우 남은 dday로 반환하도록 변경 * refactor: areDatesEqual 함수를 dateFormatter 유틸 함수로 이동 * fix: 중복된 함수 제거 * test: 데이터 포메팅 유틸 함수 테스트코드 추가 * test: 테스트 시 이미지 모듈은 mock string 값이 반환되도록 모킹 * test: 룸 카드의 남은 기간 정보 UI 렌더링 테스트 추가 * fix: 진행중인 방의 D-Day 가 잘못 표기되는 문제 해결 * test: 테스트 명세 오타 수정 * test: 방 상세정보의 모집/리뷰 마감까지 남은 시간 렌더링 테스트 추가 * test: jest 환경에서 시간대를 한국 시간대를 사용하도록 변경 * feat: SEO 최적화를 위해 html에 메타태그 추가 --------- Co-authored-by: Lee sang Yeop <[email protected]> * [FE] 생성페이지 달력, 시간 입력 리팩토링(#603) (#614) * design: 방 생성 페이지 모바일, 태블릿 대응 * refactor: error props 제거 * feat: DateTimePicker 생성하여 날짜, 시간 한번에 관리 * refactor: formatCombinedDateTime 인자 하나로 받기 * refactor: handleInputChange 함수로 통합하기 * refactor: 분류 type 맞추기 * feat: 방 생성 유효성 처리 --------- Co-authored-by: jinsil <[email protected]> * refactor: 초기 데이터 주석 처리 * refactor: 초기 참여자 사이즈 변경 * feat: 매칭 실패 원인을 전달하는 기능 구현 * [BE] 방 응답 시, CLASSIFICATION 반환 추가(#621) (#623) * feat: 방 정보 응답 시, classification 정보 추가 * feat: 개발 서버 액세스 토큰 변경 * test: 테스트 통과하도록 주석 처리 --------- Co-authored-by: gyungchan Jo <[email protected]> * refactor: 요청 dto 제약 조건 변경 * [FE] 방 수정 기능 추가(#616) (#620) * feat: hostType node_env로 판별 * feat: 검색 title 변경 * fix: test에 message 추가하여 오류 해결 * feat: 방 수정 api 추가 * refactor: classification 속성 추가하기 * refactor: 방 상세 정보 가져오는 함수 훅으로 분리 * feat: 방 생성, 수정 페이지 분리 * fix: put 요청으로 변경 * refactor: getInitialFormState 함수로 분리 * design: 드롭다운 선택된 것 다르게 보여주기 * refactor: 불필요한 코드 제거 * fix: roomId로 변경 * feat: roomId로 변경 --------- Co-authored-by: jinsil <[email protected]> * [FE] 참여 중인 방에 대해 바뀐 명세서 반영하기(#612) (#622) * refactor: 수정된 API명세서에 맞게 includeClosed 쿼리 추가 * feat: 참여중 라벨 추가 * feat: 참여중, 모집중 라벨 같이 보여주기 * feat: 종료, 매칭실패 라벨 같이 보여주기 * feat: 참여중 라벨을 범용적으로 사용하기 위해 참여로 수정 * refactor: 참여 라벨, 매칭실패 라벨 고려하여 추가하기 * test: roomStatus, participationStatus, message 상태에 따라 다르게 보여지는 라벨의 테스트 구현 * feat: 서비스 어느 곳에서든지 참여 라벨이 있을 경우 상세페이지로 리다이렉팅 --------- Co-authored-by: 00kang <[email protected]> Co-authored-by: Lee sang Yeop <[email protected]> * [BE] 쓴 피드백은 피드백 모아보기에서 바로 볼 수 있도록 변경 + 리팩터링(#613) (#617) * refactor: 작성한 피드백은 바로 피드백 모아보기에서 보도록 수정 * refactor: 피드백 가져오는 역할 클래스 분리 * refactor: 개발 피드백 작성 기능 수정 * refactor: 개발 피드백 수정 기능 변경 * refactor: 개발 피드백 조회 기능 수정 * refactor: 생성, 수정 dto 분리 * refactor: 피드백을 조회하는 기능 수정 * refactor: 피드백 반영 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 매칭 로직 원복 및 수정(#624) (#627) * refactor: 도메인 수정 * feat: 리뷰어, 리뷰이 조회 API 기능 구현 * refactor: 중복된 기능 코드 제거 * docs: 메서드 시그니쳐 통일 * feat: 시연용 데이터 추가 * refactor: 패키지 이동으로 인한 오류 수정 * feat: 시연용 데이터 추가 * fix: REMOTE_ORIGIN 그냥 변수로 변경 * feat: 데이터 추가 * feat: 서브모듈 반영 * feat: response 생성 때 reviewer, reviewee 분리 * feat: application 설정 변경 * feat: 데모 데이터 함수로 분리 * fix: 누락된 saveAll 추가 * fix: 데이터 정합성 수정 * fix: roomId 상수 변경 * feat: 피드백 키워드 뒤 .제거 * refactor: 3차 데모데이 데이터 변경 * feat: room 4에 대한 케이스도 추가 * feat: room 4 매칭 추가 * fix: 응답 내 프로필 링크로 변경 * 최신 브랜치 병합 * feat: submodule 업데이트 * refactor: 서브모듈 변경 * feat: submodule 업데이트 * refactor: 매칭 로직 원복 * fix: 매칭 로직 오류 수정 * refactor: 변수명 직관적으로 수정 * refactor: 리뷰어를 제외하고 matchingSize 만큼 추가 매칭하도록 수정 * refactor: 리뷰어가 matchingSize 만큼 리뷰이와 매칭되도록 수정 * feat: submodule 업데이트 * refactor: 피드백 반영 * refactor: 변수명 수정 --------- Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: HyunJoong Kim <[email protected]> * [BE] 참여한 전체 방들 조회할 때, 실패 원인 같이 보내는 기능 구현(#625) (#629) * refactor: ParticipationWriter 패키지 변경 및 코드 포맷팅 적용 * refactor: 작은 단위로 클래스 분리 * refactor: 예외 타입명 변경 * refactor: 참여했지만 매칭에 실패했던 모든 방들을 조회할 때 실패 메시지를 같이 보내는 기능 구현 * refactor: 방 조회 기능 수정 * test: 방 관련 테스트 추가 --------- Co-authored-by: gyungchan Jo <[email protected]> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: ashsty <[email protected]> Co-authored-by: hjk0761 <[email protected]> Co-authored-by: jinsil <[email protected]> Co-authored-by: 00kang <[email protected]> Co-authored-by: HyunJoong Kim <[email protected]>
* [BE] 방 매칭 실패 시 매칭 실패 원인을 전달하는 기능 구현(#562) (#575) * feat: 반환된 예외를 통해 실패 원인을 찾는 기능 구현 * feat: 실패한 매칭 정보를 저장하는 엔티티 구현 * feat: 매칭을 실패했을 경우 실패한 매칭 정보를 저장하는 기능 구현 * refactor: 클래스명 변경 * feat: 반환된 예외를 통해 매칭 실패 원인에 대한 메세지를 얻는 기능 구현 * refactor: FailedMatching 생성자 변경 * feat: 매칭 실패한 방을 조회시, 실패 원인을 같이 전달하는 기능 구현 * refactor: 맵 구현체 변경 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 종료 시, 코드 리뷰 완료 버튼 동작 안하도록 하는 기능 구현(#579) (#580) * feat: 방 종료 후 코드 리뷰 완료 버튼 검증 로직 구현 * fix: 잘못된 요청값 수정 (#566) Co-authored-by: youngsu5582 <[email protected]> * refactor: 리뷰 완료 요청 검증 로직 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> * [BE] 참여했던 방이 종료되면 참여 중 탭에서 제거(#581) (#584) * feat: 참여했던 방이 종료되면 참여 중 탭에서 제거하는 기능 구현 * [BE] 중복으로 매칭되던 상황 해결(#587) (#588) * refactor: 도메인 수정 * feat: 리뷰어, 리뷰이 조회 API 기능 구현 * refactor: 중복된 기능 코드 제거 * docs: 메서드 시그니쳐 통일 * feat: 시연용 데이터 추가 * refactor: 패키지 이동으로 인한 오류 수정 * feat: 시연용 데이터 추가 * fix: REMOTE_ORIGIN 그냥 변수로 변경 * feat: 데이터 추가 * feat: 서브모듈 반영 * feat: response 생성 때 reviewer, reviewee 분리 * feat: application 설정 변경 * feat: 데모 데이터 함수로 분리 * fix: 누락된 saveAll 추가 * fix: 데이터 정합성 수정 * fix: roomId 상수 변경 * feat: 피드백 키워드 뒤 .제거 * refactor: 3차 데모데이 데이터 변경 * feat: room 4에 대한 케이스도 추가 * feat: room 4 매칭 추가 * fix: 응답 내 프로필 링크로 변경 * 최신 브랜치 병합 * feat: submodule 업데이트 * refactor: 서브모듈 변경 * fix: 매칭 중복 예외 처리 안되던 오류 해결 * fix: 리뷰어 매칭 안되던 오류 수정 * test: participationFilter 로직 수정에 따른 테스트 수정 --------- Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> * feat: pr 제출 안 했을 때 문구 추가 (#590) Co-authored-by: jinsil <[email protected]> * [BE] 방 생성 검증 로직 주석 처리(#593) (#594) * refactor: 방 생성 검증 로직 주석 처리 * refactor: 운영 환경 설정 변경 * refactor: 방 생성 검증 로직 테스트 disabled 처리 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 매칭 실패 시 매칭 실패 원인을 전달하는 기능 구현(#562) (#575) * feat: 반환된 예외를 통해 실패 원인을 찾는 기능 구현 * feat: 실패한 매칭 정보를 저장하는 엔티티 구현 * feat: 매칭을 실패했을 경우 실패한 매칭 정보를 저장하는 기능 구현 * refactor: 클래스명 변경 * feat: 반환된 예외를 통해 매칭 실패 원인에 대한 메세지를 얻는 기능 구현 * refactor: FailedMatching 생성자 변경 * feat: 매칭 실패한 방을 조회시, 실패 원인을 같이 전달하는 기능 구현 * refactor: 맵 구현체 변경 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 종료 시, 코드 리뷰 완료 버튼 동작 안하도록 하는 기능 구현(#579) (#580) * feat: 방 종료 후 코드 리뷰 완료 버튼 검증 로직 구현 * fix: 잘못된 요청값 수정 (#566) Co-authored-by: youngsu5582 <[email protected]> * refactor: 리뷰 완료 요청 검증 로직 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: ashsty <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: jinsil <[email protected]> * refactor: 로컬 서버용 깃허브 토큰 변경 (#600) Co-authored-by: gyungchan Jo <[email protected]> * [BE] Room Controller 역할 분리(#595) (#596) * refactor: Room Controller 역할 분리 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * [BE] 자동 예약 및 자동 업데이트 동시성 제어(#586) (#604) * feat: Lock을 통한 자동 매칭 동시성 제어 기능 구현 * feat: Lock을 통한 자동 업데이트 동시성 제어 기능 구현 * feat: 자동 매칭 Lock 범위 최소화를 위한 클래스 구현 * feat: 자동 예약 Lock 범위 최소화를 위한 클래스 구현 * test: 자동 매칭 테스트 중복 코드 추상 클래스로 이동 * test: 자동 예약 테스트 중복 코드 추상 클래스로 이동 * refactor: Transactional 어노테이션 제거 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 수정 기능 & 스케줄러 부분 분리 및 리팩토링(#605) (#606) * feat: repository 의존성 제거, 테스트 명확하게 변경 * feat: Reader/Writer 통해 조회 로직 분리 * feat: 룸 수정 기능 구현 * refactor: 피드백 반영 * fix: 충돌 해결 --------- Co-authored-by: youngsu5582 <[email protected]> * [FE] 콜리네 서비스 제공후 QA(#597) (#602) * fix: 모집 마감 -> 종료된 방으로 변경 * fix: 매칭 후 pr 제출 안 해서 실패했을 때 바로 문구 띄우기 * design: 모달 이름에 width 변경 * design: 프로필 드롭다운에서 이름 다 보여지게 하기 * design: 배너 medium일 때 높이 수정 * feat: timeDropdown에서 선택된 시간이 제일 위에 떠있게 하기 * feat: 피드백 모아보기에서 세부 피드백에 scroll 추가 * design: 세부 피드백 높이 지정 * fix: content 길이 길어졌을 때 ... 로 보이게 하기 * design: 피드백 모달 엔터처리, line-height 추가 * feat: 분류 드롭다운으로 선택하게 변경 * feat: 키워드 없을 때 ui 처리 * feat: 방 매칭 실패 시 서버가 준 message 띄우기 * [BE] Room Controller 역할 분리(#595) (#596) * refactor: Room Controller 역할 분리 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * refactor: ALL 타입 추가 * feat: 수정된 api에 맞게 message 타입 추가 * fix: 방 생성 시 키워드 입력을 안했을 때 렌더링 조건 수정 * feat: 바뀐 RoomInfo 데이터 형식에 맞게 storybook 수정 --------- Co-authored-by: jinsil <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: 00kang <[email protected]> * [BE] 참여했던 방이 종료 된 후, 종료 탭 및 마이페이지에서 안보이는 문제 해결(#607) (#611) * refactor: 참여한 방을 조회하는 기능 수정 * refactor: 방을 조회하는 기능 메서드 분리 * refactor: 방을 조회 메서드 클래스 분리 * test: Nested 어노테이션을 통한 RoomServiceTest 관심사 분리 * feat: 참여했던 방이 종료되면 종료 탭에서 보이도록 하는 기능 구현 * feat: 종료 탭에서 자신이 참여했던 방도 나타내는 기능 구현 * test: 테스트 수정 * refactor: 조회 쿼리 수정 * refactor: 피드백 반영 * refactor: 변수명 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 로그 중복 작성 제거, 비즈니스 로직 내 로그 추가(#608) (#610) * feat: additivity false 로 변경 * refactor: 참가,취소 로직 분리 * chore: 로그 레벨 변경 * feat: 로그 추가 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * [FE] 24시간 이하로 남으면 디데이 말고 시간 보여주기(#598) (#609) * fix: 디데이가 1일 남은경우에도 24시간 미만 남은경우 남은 dday로 반환하도록 변경 * refactor: areDatesEqual 함수를 dateFormatter 유틸 함수로 이동 * fix: 중복된 함수 제거 * test: 데이터 포메팅 유틸 함수 테스트코드 추가 * test: 테스트 시 이미지 모듈은 mock string 값이 반환되도록 모킹 * test: 룸 카드의 남은 기간 정보 UI 렌더링 테스트 추가 * fix: 진행중인 방의 D-Day 가 잘못 표기되는 문제 해결 * test: 테스트 명세 오타 수정 * test: 방 상세정보의 모집/리뷰 마감까지 남은 시간 렌더링 테스트 추가 * test: jest 환경에서 시간대를 한국 시간대를 사용하도록 변경 * feat: SEO 최적화를 위해 html에 메타태그 추가 --------- Co-authored-by: Lee sang Yeop <[email protected]> * [FE] 생성페이지 달력, 시간 입력 리팩토링(#603) (#614) * design: 방 생성 페이지 모바일, 태블릿 대응 * refactor: error props 제거 * feat: DateTimePicker 생성하여 날짜, 시간 한번에 관리 * refactor: formatCombinedDateTime 인자 하나로 받기 * refactor: handleInputChange 함수로 통합하기 * refactor: 분류 type 맞추기 * feat: 방 생성 유효성 처리 --------- Co-authored-by: jinsil <[email protected]> * refactor: 초기 데이터 주석 처리 * refactor: 초기 참여자 사이즈 변경 * feat: 매칭 실패 원인을 전달하는 기능 구현 * [BE] 방 응답 시, CLASSIFICATION 반환 추가(#621) (#623) * feat: 방 정보 응답 시, classification 정보 추가 * feat: 개발 서버 액세스 토큰 변경 * test: 테스트 통과하도록 주석 처리 --------- Co-authored-by: gyungchan Jo <[email protected]> * refactor: 요청 dto 제약 조건 변경 * [FE] 방 수정 기능 추가(#616) (#620) * feat: hostType node_env로 판별 * feat: 검색 title 변경 * fix: test에 message 추가하여 오류 해결 * feat: 방 수정 api 추가 * refactor: classification 속성 추가하기 * refactor: 방 상세 정보 가져오는 함수 훅으로 분리 * feat: 방 생성, 수정 페이지 분리 * fix: put 요청으로 변경 * refactor: getInitialFormState 함수로 분리 * design: 드롭다운 선택된 것 다르게 보여주기 * refactor: 불필요한 코드 제거 * fix: roomId로 변경 * feat: roomId로 변경 --------- Co-authored-by: jinsil <[email protected]> * [FE] 참여 중인 방에 대해 바뀐 명세서 반영하기(#612) (#622) * refactor: 수정된 API명세서에 맞게 includeClosed 쿼리 추가 * feat: 참여중 라벨 추가 * feat: 참여중, 모집중 라벨 같이 보여주기 * feat: 종료, 매칭실패 라벨 같이 보여주기 * feat: 참여중 라벨을 범용적으로 사용하기 위해 참여로 수정 * refactor: 참여 라벨, 매칭실패 라벨 고려하여 추가하기 * test: roomStatus, participationStatus, message 상태에 따라 다르게 보여지는 라벨의 테스트 구현 * feat: 서비스 어느 곳에서든지 참여 라벨이 있을 경우 상세페이지로 리다이렉팅 --------- Co-authored-by: 00kang <[email protected]> Co-authored-by: Lee sang Yeop <[email protected]> * [BE] 쓴 피드백은 피드백 모아보기에서 바로 볼 수 있도록 변경 + 리팩터링(#613) (#617) * refactor: 작성한 피드백은 바로 피드백 모아보기에서 보도록 수정 * refactor: 피드백 가져오는 역할 클래스 분리 * refactor: 개발 피드백 작성 기능 수정 * refactor: 개발 피드백 수정 기능 변경 * refactor: 개발 피드백 조회 기능 수정 * refactor: 생성, 수정 dto 분리 * refactor: 피드백을 조회하는 기능 수정 * refactor: 피드백 반영 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 매칭 로직 원복 및 수정(#624) (#627) * refactor: 도메인 수정 * feat: 리뷰어, 리뷰이 조회 API 기능 구현 * refactor: 중복된 기능 코드 제거 * docs: 메서드 시그니쳐 통일 * feat: 시연용 데이터 추가 * refactor: 패키지 이동으로 인한 오류 수정 * feat: 시연용 데이터 추가 * fix: REMOTE_ORIGIN 그냥 변수로 변경 * feat: 데이터 추가 * feat: 서브모듈 반영 * feat: response 생성 때 reviewer, reviewee 분리 * feat: application 설정 변경 * feat: 데모 데이터 함수로 분리 * fix: 누락된 saveAll 추가 * fix: 데이터 정합성 수정 * fix: roomId 상수 변경 * feat: 피드백 키워드 뒤 .제거 * refactor: 3차 데모데이 데이터 변경 * feat: room 4에 대한 케이스도 추가 * feat: room 4 매칭 추가 * fix: 응답 내 프로필 링크로 변경 * 최신 브랜치 병합 * feat: submodule 업데이트 * refactor: 서브모듈 변경 * feat: submodule 업데이트 * refactor: 매칭 로직 원복 * fix: 매칭 로직 오류 수정 * refactor: 변수명 직관적으로 수정 * refactor: 리뷰어를 제외하고 matchingSize 만큼 추가 매칭하도록 수정 * refactor: 리뷰어가 matchingSize 만큼 리뷰이와 매칭되도록 수정 * feat: submodule 업데이트 * refactor: 피드백 반영 * refactor: 변수명 수정 --------- Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: HyunJoong Kim <[email protected]> * [BE] 참여한 전체 방들 조회할 때, 실패 원인 같이 보내는 기능 구현(#625) (#629) * refactor: ParticipationWriter 패키지 변경 및 코드 포맷팅 적용 * refactor: 작은 단위로 클래스 분리 * refactor: 예외 타입명 변경 * refactor: 참여했지만 매칭에 실패했던 모든 방들을 조회할 때 실패 메시지를 같이 보내는 기능 구현 * refactor: 방 조회 기능 수정 * test: 방 관련 테스트 추가 --------- Co-authored-by: gyungchan Jo <[email protected]> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: ashsty <[email protected]> Co-authored-by: hjk0761 <[email protected]> Co-authored-by: jinsil <[email protected]> Co-authored-by: 00kang <[email protected]> Co-authored-by: HyunJoong Kim <[email protected]>
* [BE] 방 매칭 실패 시 매칭 실패 원인을 전달하는 기능 구현(#562) (#575) * feat: 반환된 예외를 통해 실패 원인을 찾는 기능 구현 * feat: 실패한 매칭 정보를 저장하는 엔티티 구현 * feat: 매칭을 실패했을 경우 실패한 매칭 정보를 저장하는 기능 구현 * refactor: 클래스명 변경 * feat: 반환된 예외를 통해 매칭 실패 원인에 대한 메세지를 얻는 기능 구현 * refactor: FailedMatching 생성자 변경 * feat: 매칭 실패한 방을 조회시, 실패 원인을 같이 전달하는 기능 구현 * refactor: 맵 구현체 변경 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 종료 시, 코드 리뷰 완료 버튼 동작 안하도록 하는 기능 구현(#579) (#580) * feat: 방 종료 후 코드 리뷰 완료 버튼 검증 로직 구현 * fix: 잘못된 요청값 수정 (#566) Co-authored-by: youngsu5582 <[email protected]> * refactor: 리뷰 완료 요청 검증 로직 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> * [BE] 참여했던 방이 종료되면 참여 중 탭에서 제거(#581) (#584) * feat: 참여했던 방이 종료되면 참여 중 탭에서 제거하는 기능 구현 * [BE] 중복으로 매칭되던 상황 해결(#587) (#588) * refactor: 도메인 수정 * feat: 리뷰어, 리뷰이 조회 API 기능 구현 * refactor: 중복된 기능 코드 제거 * docs: 메서드 시그니쳐 통일 * feat: 시연용 데이터 추가 * refactor: 패키지 이동으로 인한 오류 수정 * feat: 시연용 데이터 추가 * fix: REMOTE_ORIGIN 그냥 변수로 변경 * feat: 데이터 추가 * feat: 서브모듈 반영 * feat: response 생성 때 reviewer, reviewee 분리 * feat: application 설정 변경 * feat: 데모 데이터 함수로 분리 * fix: 누락된 saveAll 추가 * fix: 데이터 정합성 수정 * fix: roomId 상수 변경 * feat: 피드백 키워드 뒤 .제거 * refactor: 3차 데모데이 데이터 변경 * feat: room 4에 대한 케이스도 추가 * feat: room 4 매칭 추가 * fix: 응답 내 프로필 링크로 변경 * 최신 브랜치 병합 * feat: submodule 업데이트 * refactor: 서브모듈 변경 * fix: 매칭 중복 예외 처리 안되던 오류 해결 * fix: 리뷰어 매칭 안되던 오류 수정 * test: participationFilter 로직 수정에 따른 테스트 수정 --------- Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> * feat: pr 제출 안 했을 때 문구 추가 (#590) Co-authored-by: jinsil <[email protected]> * [BE] 방 생성 검증 로직 주석 처리(#593) (#594) * refactor: 방 생성 검증 로직 주석 처리 * refactor: 운영 환경 설정 변경 * refactor: 방 생성 검증 로직 테스트 disabled 처리 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 매칭 실패 시 매칭 실패 원인을 전달하는 기능 구현(#562) (#575) * feat: 반환된 예외를 통해 실패 원인을 찾는 기능 구현 * feat: 실패한 매칭 정보를 저장하는 엔티티 구현 * feat: 매칭을 실패했을 경우 실패한 매칭 정보를 저장하는 기능 구현 * refactor: 클래스명 변경 * feat: 반환된 예외를 통해 매칭 실패 원인에 대한 메세지를 얻는 기능 구현 * refactor: FailedMatching 생성자 변경 * feat: 매칭 실패한 방을 조회시, 실패 원인을 같이 전달하는 기능 구현 * refactor: 맵 구현체 변경 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 종료 시, 코드 리뷰 완료 버튼 동작 안하도록 하는 기능 구현(#579) (#580) * feat: 방 종료 후 코드 리뷰 완료 버튼 검증 로직 구현 * fix: 잘못된 요청값 수정 (#566) Co-authored-by: youngsu5582 <[email protected]> * refactor: 리뷰 완료 요청 검증 로직 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> --------- Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: ashsty <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: jinsil <[email protected]> * refactor: 로컬 서버용 깃허브 토큰 변경 (#600) Co-authored-by: gyungchan Jo <[email protected]> * [BE] Room Controller 역할 분리(#595) (#596) * refactor: Room Controller 역할 분리 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * [BE] 자동 예약 및 자동 업데이트 동시성 제어(#586) (#604) * feat: Lock을 통한 자동 매칭 동시성 제어 기능 구현 * feat: Lock을 통한 자동 업데이트 동시성 제어 기능 구현 * feat: 자동 매칭 Lock 범위 최소화를 위한 클래스 구현 * feat: 자동 예약 Lock 범위 최소화를 위한 클래스 구현 * test: 자동 매칭 테스트 중복 코드 추상 클래스로 이동 * test: 자동 예약 테스트 중복 코드 추상 클래스로 이동 * refactor: Transactional 어노테이션 제거 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 방 수정 기능 & 스케줄러 부분 분리 및 리팩토링(#605) (#606) * feat: repository 의존성 제거, 테스트 명확하게 변경 * feat: Reader/Writer 통해 조회 로직 분리 * feat: 룸 수정 기능 구현 * refactor: 피드백 반영 * fix: 충돌 해결 --------- Co-authored-by: youngsu5582 <[email protected]> * [FE] 콜리네 서비스 제공후 QA(#597) (#602) * fix: 모집 마감 -> 종료된 방으로 변경 * fix: 매칭 후 pr 제출 안 해서 실패했을 때 바로 문구 띄우기 * design: 모달 이름에 width 변경 * design: 프로필 드롭다운에서 이름 다 보여지게 하기 * design: 배너 medium일 때 높이 수정 * feat: timeDropdown에서 선택된 시간이 제일 위에 떠있게 하기 * feat: 피드백 모아보기에서 세부 피드백에 scroll 추가 * design: 세부 피드백 높이 지정 * fix: content 길이 길어졌을 때 ... 로 보이게 하기 * design: 피드백 모달 엔터처리, line-height 추가 * feat: 분류 드롭다운으로 선택하게 변경 * feat: 키워드 없을 때 ui 처리 * feat: 방 매칭 실패 시 서버가 준 message 띄우기 * [BE] Room Controller 역할 분리(#595) (#596) * refactor: Room Controller 역할 분리 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * refactor: ALL 타입 추가 * feat: 수정된 api에 맞게 message 타입 추가 * fix: 방 생성 시 키워드 입력을 안했을 때 렌더링 조건 수정 * feat: 바뀐 RoomInfo 데이터 형식에 맞게 storybook 수정 --------- Co-authored-by: jinsil <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: 00kang <[email protected]> * [BE] 참여했던 방이 종료 된 후, 종료 탭 및 마이페이지에서 안보이는 문제 해결(#607) (#611) * refactor: 참여한 방을 조회하는 기능 수정 * refactor: 방을 조회하는 기능 메서드 분리 * refactor: 방을 조회 메서드 클래스 분리 * test: Nested 어노테이션을 통한 RoomServiceTest 관심사 분리 * feat: 참여했던 방이 종료되면 종료 탭에서 보이도록 하는 기능 구현 * feat: 종료 탭에서 자신이 참여했던 방도 나타내는 기능 구현 * test: 테스트 수정 * refactor: 조회 쿼리 수정 * refactor: 피드백 반영 * refactor: 변수명 변경 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 로그 중복 작성 제거, 비즈니스 로직 내 로그 추가(#608) (#610) * feat: additivity false 로 변경 * refactor: 참가,취소 로직 분리 * chore: 로그 레벨 변경 * feat: 로그 추가 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * [FE] 24시간 이하로 남으면 디데이 말고 시간 보여주기(#598) (#609) * fix: 디데이가 1일 남은경우에도 24시간 미만 남은경우 남은 dday로 반환하도록 변경 * refactor: areDatesEqual 함수를 dateFormatter 유틸 함수로 이동 * fix: 중복된 함수 제거 * test: 데이터 포메팅 유틸 함수 테스트코드 추가 * test: 테스트 시 이미지 모듈은 mock string 값이 반환되도록 모킹 * test: 룸 카드의 남은 기간 정보 UI 렌더링 테스트 추가 * fix: 진행중인 방의 D-Day 가 잘못 표기되는 문제 해결 * test: 테스트 명세 오타 수정 * test: 방 상세정보의 모집/리뷰 마감까지 남은 시간 렌더링 테스트 추가 * test: jest 환경에서 시간대를 한국 시간대를 사용하도록 변경 * feat: SEO 최적화를 위해 html에 메타태그 추가 --------- Co-authored-by: Lee sang Yeop <[email protected]> * [FE] 생성페이지 달력, 시간 입력 리팩토링(#603) (#614) * design: 방 생성 페이지 모바일, 태블릿 대응 * refactor: error props 제거 * feat: DateTimePicker 생성하여 날짜, 시간 한번에 관리 * refactor: formatCombinedDateTime 인자 하나로 받기 * refactor: handleInputChange 함수로 통합하기 * refactor: 분류 type 맞추기 * feat: 방 생성 유효성 처리 --------- Co-authored-by: jinsil <[email protected]> * refactor: 초기 데이터 주석 처리 * refactor: 초기 참여자 사이즈 변경 * feat: 매칭 실패 원인을 전달하는 기능 구현 * [BE] 방 응답 시, CLASSIFICATION 반환 추가(#621) (#623) * feat: 방 정보 응답 시, classification 정보 추가 * feat: 개발 서버 액세스 토큰 변경 * test: 테스트 통과하도록 주석 처리 --------- Co-authored-by: gyungchan Jo <[email protected]> * refactor: 요청 dto 제약 조건 변경 * [FE] 방 수정 기능 추가(#616) (#620) * feat: hostType node_env로 판별 * feat: 검색 title 변경 * fix: test에 message 추가하여 오류 해결 * feat: 방 수정 api 추가 * refactor: classification 속성 추가하기 * refactor: 방 상세 정보 가져오는 함수 훅으로 분리 * feat: 방 생성, 수정 페이지 분리 * fix: put 요청으로 변경 * refactor: getInitialFormState 함수로 분리 * design: 드롭다운 선택된 것 다르게 보여주기 * refactor: 불필요한 코드 제거 * fix: roomId로 변경 * feat: roomId로 변경 --------- Co-authored-by: jinsil <[email protected]> * [FE] 참여 중인 방에 대해 바뀐 명세서 반영하기(#612) (#622) * refactor: 수정된 API명세서에 맞게 includeClosed 쿼리 추가 * feat: 참여중 라벨 추가 * feat: 참여중, 모집중 라벨 같이 보여주기 * feat: 종료, 매칭실패 라벨 같이 보여주기 * feat: 참여중 라벨을 범용적으로 사용하기 위해 참여로 수정 * refactor: 참여 라벨, 매칭실패 라벨 고려하여 추가하기 * test: roomStatus, participationStatus, message 상태에 따라 다르게 보여지는 라벨의 테스트 구현 * feat: 서비스 어느 곳에서든지 참여 라벨이 있을 경우 상세페이지로 리다이렉팅 --------- Co-authored-by: 00kang <[email protected]> Co-authored-by: Lee sang Yeop <[email protected]> * [BE] 쓴 피드백은 피드백 모아보기에서 바로 볼 수 있도록 변경 + 리팩터링(#613) (#617) * refactor: 작성한 피드백은 바로 피드백 모아보기에서 보도록 수정 * refactor: 피드백 가져오는 역할 클래스 분리 * refactor: 개발 피드백 작성 기능 수정 * refactor: 개발 피드백 수정 기능 변경 * refactor: 개발 피드백 조회 기능 수정 * refactor: 생성, 수정 dto 분리 * refactor: 피드백을 조회하는 기능 수정 * refactor: 피드백 반영 * refactor: 피드백 반영 --------- Co-authored-by: gyungchan Jo <[email protected]> * [BE] 매칭 로직 원복 및 수정(#624) (#627) * refactor: 도메인 수정 * feat: 리뷰어, 리뷰이 조회 API 기능 구현 * refactor: 중복된 기능 코드 제거 * docs: 메서드 시그니쳐 통일 * feat: 시연용 데이터 추가 * refactor: 패키지 이동으로 인한 오류 수정 * feat: 시연용 데이터 추가 * fix: REMOTE_ORIGIN 그냥 변수로 변경 * feat: 데이터 추가 * feat: 서브모듈 반영 * feat: response 생성 때 reviewer, reviewee 분리 * feat: application 설정 변경 * feat: 데모 데이터 함수로 분리 * fix: 누락된 saveAll 추가 * fix: 데이터 정합성 수정 * fix: roomId 상수 변경 * feat: 피드백 키워드 뒤 .제거 * refactor: 3차 데모데이 데이터 변경 * feat: room 4에 대한 케이스도 추가 * feat: room 4 매칭 추가 * fix: 응답 내 프로필 링크로 변경 * 최신 브랜치 병합 * feat: submodule 업데이트 * refactor: 서브모듈 변경 * feat: submodule 업데이트 * refactor: 매칭 로직 원복 * fix: 매칭 로직 오류 수정 * refactor: 변수명 직관적으로 수정 * refactor: 리뷰어를 제외하고 matchingSize 만큼 추가 매칭하도록 수정 * refactor: 리뷰어가 matchingSize 만큼 리뷰이와 매칭되도록 수정 * feat: submodule 업데이트 * refactor: 피드백 반영 * refactor: 변수명 수정 --------- Co-authored-by: hjk0761 <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: HyunJoong Kim <[email protected]> * [BE] 참여한 전체 방들 조회할 때, 실패 원인 같이 보내는 기능 구현(#625) (#629) * refactor: ParticipationWriter 패키지 변경 및 코드 포맷팅 적용 * refactor: 작은 단위로 클래스 분리 * refactor: 예외 타입명 변경 * refactor: 참여했지만 매칭에 실패했던 모든 방들을 조회할 때 실패 메시지를 같이 보내는 기능 구현 * refactor: 방 조회 기능 수정 * test: 방 관련 테스트 추가 --------- Co-authored-by: gyungchan Jo <[email protected]> * [FE] FallbackImage 잘 안 뜨는 문제 해결하기(#631) (#633) * fix: 로딩 전에 src 먼저 빈 문자열인지 판별 * fix: useState 초깃값으로 src 넣어주기 --------- Co-authored-by: jinsil <[email protected]> * [FE] 콜리네 서비스 제공 후 받은 피드백 반영하기 (#628) (#630) * feat: 평가 옵션의 텍스트를 아쉬움과 만족만 표시하도록 수정 * design: 피드백 모아보기 페이지의 피드백카드 디테일 수정 * feat: 피드백 모아보기 페이지의 피드백카드에 textarea 추가 * feat: 피드백 모아보기 페이지에서 키워드가 없을 때 처리 * design: 피드백 폼의 갭 수정 * design: 피드백 카드 컴포넌트에 textarea를 사용하면서 불필요한 디자인 속성 삭제 * fix: 보안 관련 경고를 해결하기 위해 target="_blank"를 사용하는 곳에 rel="noreferrer" 추가 * fix: 모달 문구 방 생성과 수정 다르게 렌더링 * refactor: EllipsisText라는 공통 컴포넌트 만들어서 텍스트가 온전히 보이지 않는 문제 해결 * design: Icons 사이즈 조정 및 단위 통일 * feat: 방카드모달에서 키워드 없을 때 처리 * design: 리뷰어, 리뷰이 테이블 아이디 가운데 정렬 * feat: 리뷰어/리뷰이 피드백 작성 모달 확인시 textarea로 보여주기 * feat: 리뷰어/리뷰이 피드백 모달 내에 키워드 없을 때 처리 * design: 키워드 정렬 수정 * design: 코드리뷰완료 버튼 색 수정 * design: 리뷰어/리뷰이 피드백 모달에 gap 조정 * feat: 코드 추천 항목은 비공개임을 명시 * refactor: HoverStyledLink를 이용해서 가이드페이지 제외 모든 컨텐츠 링크 스타일링 통일 * refactor: HoverStyledLinkForGuide를 이용해서 가이드페이지 내부 링크 스타일링 통일 * fix: MemoryRouter를 이용해 테스트 환경에 라우터 컨텍스트 제공 * feat: 놓친 EllipsisText 추가 * fix: Textarea의 글자수표시영역이 div에 같이 안 잡히는 에러 해결 * refactor: 피드백모달의 view모드일 때 분기를 Textarea 내부에서 하기 --------- Co-authored-by: 00kang <[email protected]> * [FE] 모달페이지 웹 접근성 추가(#618) (#641) * feat: 선언적으로 지정된 요소에만 Tab키 선택이 가능하도록 하는 FocusTrap 컴포넌트 추가 * fix: 버튼이 disabled 인 경우 tab으로 선택이 안되도록 수정 * feat: dropdown의 경우 open되면 해당 옵션만 tab으로 선택 가능하도록 추가 * feat: Modal 에 FocusTrap 추가 * style: OptionSelect 컴포넌트가 focus 시 outline이 보이지 않는 문제 수정 * fix: 룸카드 컴포넌트를 버튼으로 만들어 tab으로 접근 및 보이스오버에서 한 번에 읽을 수 있도록 변경 * fix: 헤더의 요소를 클릭 가능하도록 변경 및 시멘틱 태그 추가 * chore: 피드백 프로세스 버튼을 tab으로 선택이 가능하도록 태그를 변경 및 애니메이션 추가 * feat: 피드백 모아보기 페이지에 tab키로 사용 가능하도록 추가 * fix: 타입명과 컴포넌트명이 일치한 문제 해결 * fix: a 링크에 noreferrer 추가 * style: RoomCard의 요소를 button -> div 로 롤백 * feat: 프로필 드롭다운시 해당 요소만 포커싱이 되도록 추가 * feat: 피드백 모달에서 탭키로 사용이 가능하도록 추가 * refactor: 이전요소 포커싱 함수 리팩토링 * chore: 헤더에 불필요한 주석 제거 --------- Co-authored-by: Lee sang Yeop <[email protected]> Co-authored-by: 최진실 <[email protected]> * [BE] 리뷰 서비스 리팩토링(#615) (#636) * refactor: 리뷰 클라이언트 패키지 이동 및 리팩토링 * refactor: 리뷰 서비스 리팩토링 * fix: 충돌 해결 * refactor: 피드백 반영 --------- Co-authored-by: youngsu5582 <[email protected]> * [BE] 수정 시, 현재 인원 초기화 + 방 삭제 / 수정 시 오픈 상태일때만 수정하게 변경(#637) (#639) * refactor: 리뷰 클라이언트 패키지 이동 및 리팩토링 * refactor: 리뷰 서비스 리팩토링 * fix: 충돌 해결 * chore: ExceptionType 명확하게 변경 * fix: 잘못된 매개변수 변경 * refactor: reader,writer 통해 기능 분리 * refactor:피드백 반영 * test: 테스트 예제 추가 * fix: 방 상태를 그대로 가지게 변경 --------- Co-authored-by: youngsu5582 <[email protected]> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: gyungchan Jo <[email protected]> Co-authored-by: youngsu5582 <[email protected]> Co-authored-by: ashsty <[email protected]> Co-authored-by: hjk0761 <[email protected]> Co-authored-by: jinsil <[email protected]> Co-authored-by: 00kang <[email protected]> Co-authored-by: HyunJoong Kim <[email protected]>
📌 관련 이슈
✨ PR 세부 내용
리팩토링 첫 번째 일환일 거 같습니다.
방 수정 기능이 비교적 간단해서 리팩토링 까지 같이 했습니다.
핵심은
Reader
/Writer
를 통해 DB 로직 분리커밋 단위로 봐도 괜찮을 거 같습니다.
( 뽀로로꺼 머지 후, 혹시 충돌나면 제가 할게요 🙂 )
얘기해야 할 점
RoomAutomaticService 를 분리해야 하는가
현재,
RoomAutomaticService
는RoomService
내부 위치해있습니다.Room 과 완벽하게 1:1 관계라고 생각해서 트랜잭션도 같이 물려있습니다.
이때, RoomService.update 는 발생해야 하는 예외가 6개나 되게 됩니다.
( partcipation / room / member / room-manager 불일치 / automatic_matching / automatic_update )
이에 대해서 얘기해봐야 할 거 같습니다.
AutomaticUpdateService 이름 변경
현재, 로직을 분리함에 따라
AutomaticUpdateService
은 단순히 태스크를 관리하는 클래스입니다.클래스명을 바꾸고 싶은데 마땅히 떠오르지 않네요 🥲
Reader / Writer 의 패키지 위치
현재 수없이 발생하는
getXXX
또는 Service 계층 내 위치해있는 불필요한 로직들전부 Reader / Writer 로 분리가 가능하다고 생각이 들었어요.
하지만, 이때 이 계층은 어디에 위치시키지(
+
이름) 대해서는 얘기 해봐야 할 거 같아요.( 지선생님의 관점 )
영향을 받은 사람은 토스 개발자 제미니 입니다.
구현 레이어의 역할
지속 성장 가능한 소프트웨어를 만들어가는 방법
( 영상 앞부분만 이라도 보는걸 추천해요. 왜 분리하게 되는가에 대한 이유입니다. )
이를 통해 좀 더 생각을 하며 좋은 코드를 작성할 수 있을거 같아요 감사함당
☺️