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

[BE] 방 수정 기능 & 스케줄러 부분 분리 및 리팩토링(#605) #606

Merged
merged 7 commits into from
Oct 16, 2024

Conversation

github-actions[bot]
Copy link
Contributor

@github-actions github-actions bot commented Oct 14, 2024

📌 관련 이슈

✨ PR 세부 내용

리팩토링 첫 번째 일환일 거 같습니다.

방 수정 기능이 비교적 간단해서 리팩토링 까지 같이 했습니다.
핵심은

  • Reader / Writer 를 통해 DB 로직 분리
  • RoomAutomaticService 통해 DB / Task 로직 분리
  • 방 수정 기능 구현 입니다.

커밋 단위로 봐도 괜찮을 거 같습니다.
( 뽀로로꺼 머지 후, 혹시 충돌나면 제가 할게요 🙂 )

얘기해야 할 점

RoomAutomaticService 를 분리해야 하는가

현재, RoomAutomaticServiceRoomService 내부 위치해있습니다.
Room 과 완벽하게 1:1 관계라고 생각해서 트랜잭션도 같이 물려있습니다.

이때, RoomService.update 는 발생해야 하는 예외가 6개나 되게 됩니다.
( partcipation / room / member / room-manager 불일치 / automatic_matching / automatic_update )
이에 대해서 얘기해봐야 할 거 같습니다.

AutomaticUpdateService 이름 변경

현재, 로직을 분리함에 따라 AutomaticUpdateService 은 단순히 태스크를 관리하는 클래스입니다.
클래스명을 바꾸고 싶은데 마땅히 떠오르지 않네요 🥲

Reader / Writer 의 패키지 위치

현재 수없이 발생하는 getXXX 또는 Service 계층 내 위치해있는 불필요한 로직들
전부 Reader / Writer 로 분리가 가능하다고 생각이 들었어요.

하지만, 이때 이 계층은 어디에 위치시키지(+ 이름) 대해서는 얘기 해봐야 할 거 같아요.

제안
이 클래스들은 데이터를 읽고 쓰는 작업을 주로 다루고 있고, 비즈니스 로직과는 별개로 데이터 상태를 처리합니다. 도메인 계층 또는 데이터 액세스 계층에 위치시키는 것이 좋습니다. 즉, service 패키지보다는 domain 패키지에 더 적합하다고 볼 수 있습니다.

결론:
AutomaticMatchingReader와 AutomaticMatchingWriter는 도메인 계층에서 데이터베이스 상호작용을 처리하는 객체로 보는 것이 적절합니다.
위치: domain 패키지에 위치시키는 것이 좋습니다.

( 지선생님의 관점 )

영향을 받은 사람은 토스 개발자 제미니 입니다.
구현 레이어의 역할
지속 성장 가능한 소프트웨어를 만들어가는 방법

( 영상 앞부분만 이라도 보는걸 추천해요. 왜 분리하게 되는가에 대한 이유입니다. )

이를 통해 좀 더 생각을 하며 좋은 코드를 작성할 수 있을거 같아요 감사함당
☺️

@github-actions github-actions bot added BE 백엔드 개발 관련 작업 기능 기능 구현 작업 labels Oct 14, 2024
Copy link
Contributor Author

github-actions bot commented Oct 14, 2024

Test Results

 52 files   52 suites   7s ⏱️
159 tests 153 ✅ 6 💤 0 ❌
167 runs  161 ✅ 6 💤 0 ❌

Results for commit 800c48b.

♻️ This comment has been updated with latest results.

Copy link
Contributor

@jcoding-play jcoding-play left a comment

Choose a reason for hiding this comment

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

수고하셨씁니다~! 👍

Comment on lines 33 to 34
return ResponseEntity.created(URI.create(String.format("/rooms/%d", response.id())))
.body(response);
Copy link
Contributor

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이네용??
깜빡한듯요~

Comment on lines 27 to 29
public List<AutomaticMatching> findByStatus(ScheduleStatus status) {
return automaticMatchingRepository.findAllByStatus(status);
}
Copy link
Contributor

Choose a reason for hiding this comment

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

하나의 값을 반환할것 같아요. 메서드명도 같이 수정해주면 좋을 듯 합니다~

Copy link
Contributor

Choose a reason for hiding this comment

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

제안: findMatchingsByStatus

Copy link
Contributor

@youngsu5582 youngsu5582 Oct 16, 2024

Choose a reason for hiding this comment

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

제안: findMatchingsByStatus

ReaderWriter 는 최대한 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;
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
private Map<Long, ScheduledFuture<?>> scheduledTasks;
private final Map<Long, ScheduledFuture<?>> scheduledTasks;

Comment on lines +31 to +33
this.taskScheduler = taskScheduler;
this.automaticMatchingExecutor = automaticMatchingExecutor;
this.scheduledTasks = new ConcurrentHashMap<>();
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
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());
Copy link
Contributor

Choose a reason for hiding this comment

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

안전하게 cancel(room.getId)로 호출해보는건 어떨까요~?

Comment on lines 29 to 30
.stream()
.toList();
Copy link
Contributor

Choose a reason for hiding this comment

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

이거 붙은 이유가 뭔가요?? 🧐

Comment on lines 30 to 34
public AutomaticUpdateService(TaskScheduler taskScheduler, AutomaticUpdateExecutor automaticUpdateExecutor) {
this.taskScheduler = taskScheduler;
this.automaticUpdateExecutor = automaticUpdateExecutor;
this.scheduledTasks = new ConcurrentHashMap<>();
}
Copy link
Contributor

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());
Copy link
Contributor

Choose a reason for hiding this comment

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

이 부분도 마찬가지입니다
cancel();

Comment on lines 109 to 111
return ROOM_CREATE_REQUEST(LocalDateTime.now()
.plusHours(2), LocalDateTime.now()
.plusDays(2));
Copy link
Contributor

Choose a reason for hiding this comment

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

인텔리제이 포맷팅 기능을 사용하는것 같아요!
그래서 자꾸 날짜 형식을 오히려 이해하기 어렵게 만드는 것 같아요

포맷팅 기능에서 혹시 꺼볼 수 있나요??

Copy link
Contributor

Choose a reason for hiding this comment

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

끄면 다른 곳에서 체이닝 할때도 다 꺼야해서 제 입장에선 더 오버 작업일거 같은데
그냥 유틸을 만들도록 할게여

Copy link
Contributor

Choose a reason for hiding this comment

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

이거 유틸 만드려 했으나, 유틸 만들어도 큰 차이가 없을거 같아서 ( 어차피, 메소드 명 때문에 길어보임 )
-> �포맷팅을 RoomFixture 부분에 꺼두었습니다.

Copy link
Contributor

@hjk0761 hjk0761 left a 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) 패키지는 이상할까요..?

Comment on lines 27 to 29
public List<AutomaticMatching> findByStatus(ScheduleStatus status) {
return automaticMatchingRepository.findAllByStatus(status);
}
Copy link
Contributor

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) {
Copy link
Contributor

Choose a reason for hiding this comment

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

P5

네이밍 얘기가 나온 김에

아래 메서드가 findByXXX이니
위 메서드도 findByRoom이 되어도 좋겠네요~

Copy link
Contributor

Choose a reason for hiding this comment

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

위에 코멘트가 안달려서 밑에 남깁니당.

제안: findMatchingsByStatus

ReaderWriter 는 최대한 Reader 와 Writer 인걸 명확하게 사용하고 싶어요.
( AutomaticMatchingReader 라는 클래스만 봐도 AutomaticMatching 을 읽을거라 기대 )
그렇기에 findByStatus 만 해도 충분할 거 같다는 생각이 드는데 어떤가요?


private final AutomaticUpdateRepository automaticUpdateRepository;

public AutomaticUpdate findWithRoom(Room room) {
Copy link
Contributor

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) {
Copy link
Contributor

Choose a reason for hiding this comment

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

P5

RoomUpdateResponse를 분리하는 건 어떠신가요?

RoomUpdateRequest가 있기도 하고,
update 메서드에서 MemberRoleParticipationStatus까지 반환해야 하는 이유가 없는 것 같아서요. 👀

방을 업데이트하는 로직인데 참여 여부를 확인하고 있는 것도 살짝 어색하게 느껴지고요.
(이미 방장임이 확인됨)

Copy link
Contributor

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) {
Copy link
Contributor

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));
Copy link
Contributor

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("모집 마감 기한이 되면 매칭을 자동으로 진행한다.")
Copy link
Contributor

Choose a reason for hiding this comment

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

혹시 여기 주석 처리된 이유가 뭘까요?

Copy link
Contributor

Choose a reason for hiding this comment

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

이거는 MatchingServiceTest 가 수행해야 하는게 아닌, Executor 가 해야 하는 테스트라고 생각했습니다.
뽀로로꺼 머지된 후 다시 맡아서 분리하려고 주석 해놨습니다. ( 충돌 방지 )

@ashsty
Copy link
Contributor

ashsty commented Oct 16, 2024

RoomAutomaticService 를 분리해야 하는가

이 부분은 제가 이해를 잘 못한 것 같은데,
RoomAutomatic...Room...이 물려 있으면서 예외가 6개나 발생하는 게 문제라는 건가요?

사실 조금 어색하게 느껴지는 거 같긴 합니다. room이라는 도메인이 automatic 관련 로직을 알아야하냐? 라고 하면 아니지 않나 싶어서리
분리가 가능하다면 분리하는 쪽이 낫지 않을까나요

AutomaticUpdateService 이름 변경

AutomaticUpdateManager?

Reader / Writer 의 패키지 위치

Service 패키지에서 다른 패키지로 옮기자는 제안 자체는 너무 좋아요~!

그런데 ReaderWriter가 도메인 패키지에 속하느냐는 질문은 조금 어렵네용.
사실 확 와닿지는 않는 것 같아요. 차라리 새로운 패키지를 만들어서 관리하는 편이 나을 것 같기는 헌디...

적당한 이름이 생각나지는 않네요... ㅎㅎ

@youngsu5582
Copy link
Contributor

다만, controller 가 roomService 대신 roomAutomaticService 를 알아야 할 텐데, 이 점은 괜찮게 느껴지시나요?

해당 부분 때문에 고민을 하고 있는거 같습니다.
( �두개를 같이 알자니, 트랜잭션 을 묶기 애매함, 같이 있자니 두 서비스 간 하위 계층이 발생함 )

파사드 패턴을 사용하지 않는 한 이 고민은 계속 할 거 같아요.
-> 현재는 이렇게 가시죠...!

Reader / Writer 의 패키지 위치

이도, Domain 패키지 내 우선 위치시킬게요!
( 도메인 들을 통해 추가적인 세부 사항을 하는 일환이라 판단 )

@youngsu5582 youngsu5582 merged commit ab2235b into develop Oct 16, 2024
4 checks passed
@youngsu5582 youngsu5582 deleted the feat/#605 branch October 16, 2024 08:31
pp449 added a commit that referenced this pull request Oct 19, 2024
* [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]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BE 백엔드 개발 관련 작업 기능 기능 구현 작업 리팩터링 리팩터링 작업
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[BE] 방 수정 기능 & 스케줄러 부분 분리 및 리팩토링
4 participants