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: TEAM_JOIN 이벤트 구현 #358

Merged
merged 2 commits into from
Aug 9, 2022
Merged

Conversation

HJ-Rich
Copy link
Contributor

@HJ-Rich HJ-Rich commented Aug 8, 2022

요약

  • 신규 멤버가 워크스페이스에 조인했을 때 회원 등록 처리 구현



작업 내용

  • Slack Event 유형에 MEMBER_JOIN 추가
  • Slack으로부터 전달되는 이벤트 컨텍스트까지는 team_join으로 표현
  • 줍줍 도메인으로 넘어온 이후에는 MEMBER_JOIN으로 표현
  • MemberJoinService 구현
  • MemberJoinServiceTest 구현
  • MemberAcceptanceTest 테스트코드 추가



참고 사항



관련 이슈



@HJ-Rich HJ-Rich added 🎉 BE 백엔드 관련 ✨ FEAT labels Aug 8, 2022
@HJ-Rich HJ-Rich added this to In progress in 4차 스프린트 via automation Aug 8, 2022
@HJ-Rich HJ-Rich self-assigned this Aug 8, 2022
@github-actions
Copy link

github-actions bot commented Aug 8, 2022

Unit Test Results

  29 files  +  1    29 suites  +1   7s ⏱️ ±0s
115 tests +11  115 ✔️ +11  0 💤 ±0  0 ±0 
116 runs  +11  116 ✔️ +11  0 💤 ±0  0 ±0 

Results for commit 3c69322. ± Comparison against base commit d770a0c.

This pull request removes 2 and adds 13 tests. Note that renamed tests count towards both.
com.pickpick.slackevent.SlackEventTest ‑ [2] request={event={subtype=message_changed, type=message}}, expected=MESSAGE_CHANGED
com.pickpick.slackevent.SlackEventTest ‑ [3] request={event={subtype=message_deleted, type=message}}, expected=MESSAGE_DELETED
com.pickpick.acceptance.member.MemberAcceptanceTest ‑ 슬랙 워크스페이스에 신규 멤버가 참여하면 저장되어야 한다
com.pickpick.slackevent.SlackEventTest ‑ [2] request={event={type=message, subtype=message_changed}}, expected=MESSAGE_CHANGED
com.pickpick.slackevent.SlackEventTest ‑ [3] request={event={type=message, subtype=message_deleted}}, expected=MESSAGE_DELETED
com.pickpick.slackevent.SlackEventTest ‑ [7] request={event={type=team_join}}, expected=MEMBER_JOIN
com.pickpick.slackevent.application.member.MemberJoinServiceTest ‑ RealName: 김진짜, DisplayName:  -> ExpectedName: 김진짜
com.pickpick.slackevent.application.member.MemberJoinServiceTest ‑ RealName: 김진짜, DisplayName: 표시 이름 -> ExpectedName: 표시 이름
com.pickpick.slackevent.application.member.MemberJoinServiceTest ‑ SlackEvent: CHANNEL_DELETED - Supports: false
com.pickpick.slackevent.application.member.MemberJoinServiceTest ‑ SlackEvent: CHANNEL_RENAME - Supports: false
com.pickpick.slackevent.application.member.MemberJoinServiceTest ‑ SlackEvent: MEMBER_CHANGED - Supports: false
com.pickpick.slackevent.application.member.MemberJoinServiceTest ‑ SlackEvent: MEMBER_JOIN - Supports: true
…

♻️ This comment has been updated with latest results.

Copy link
Collaborator

@yeon-06 yeon-06 left a comment

Choose a reason for hiding this comment

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

고생하셨습니다 깔끔하네요😊👍👍

String username = (String) profile.get(DISPLAY_NAME);

if (!StringUtils.hasText(username)) {
return (String) profile.get(REAL_NAME);
Copy link
Collaborator

Choose a reason for hiding this comment

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

크 잊지 않고 꼼꼼한 처리👍

import org.springframework.context.annotation.Import;

@DisplayName("MemberJoinService는")
@Import(MemberJoinService.class)
Copy link
Collaborator

Choose a reason for hiding this comment

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

요 import는 뭘까요 ?-?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

DataJpaTest에서 띄우는 Bean들에 추가로 MemberJoinService를 Bean으로 생성해달라는 의미입니다.
그러면 SpringBootTest를 사용하지 않고도 최소한의 Bean만 생성해서 테스트를 수행할 수 있습니다.

단, 이 경우 Import로 주입 받는 Bean의 종류가 달라지게 되면
같은 DataJpaTest 애너테이션을 사용했더라도 Context Caching이 동작하지 않습니다.

그로 인해 서비스 레이어에 대한 테스트에도
인수테스트와 마찬가지로 부모 자식 상속 구조를 가져가서
테스트 비용을 줄이는 과정이 필요하지 않나 생각해봅니다! 😃

assertThat(isSameSlackEvent).isEqualTo(expected);
}

@DisplayName("MEMBER_JOIN 이벤트가 전달되면, 신규 멤버를 저장한다")
Copy link
Collaborator

Choose a reason for hiding this comment

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

MEMBER_JOIN 이벤트가 전달되면은 인수 테스트에서 가정할 수 있는 부분인 것 같아요~!
신규 멤버를 저장한다 정도로도 충분할 것 같네요 😄

Copy link
Contributor Author

Choose a reason for hiding this comment

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

image

위와 같은 구조로 DisplayName을 가져가려는 의도로 작성해봤는데요,
연로그 의견이 좋은 것 같아요~ 반영하겠습니다! 😃

4차 스프린트 automation moved this from In progress to Reviewer approved Aug 8, 2022
Copy link
Collaborator

@hyewoncc hyewoncc left a comment

Choose a reason for hiding this comment

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

간단한 코멘트 남겼어요, 현안을 유지해도 문제없다 생각해서 Approve 할게요~

Comment on lines +41 to +42
int 신규_참여_전_멤버_수 = members.findAll().size();
Map<String, Object> teamJoinEvent = createTeamJoinEvent("진짜이름", "표시이름", "https://somebody.png");
Copy link
Collaborator

Choose a reason for hiding this comment

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

오 변수명을 한글로 하셨는데 새로운 도전을 하신걸까요?
한글 선호하지 않으셨던 것 같아서 궁금해서 남겨봐요 😁

Copy link
Contributor Author

Choose a reason for hiding this comment

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

자동완성에 불편함이 있다는 단점이 있긴 하지만
인수테스트에서는 한글로 책 읽듯 읽혀질 수 있으면 좋다고 생각합니다

다만 @SuppressWarning 애너테이션을 필요로 하는
한글 메서드명에 대해서는 보다는 영문 메서드명을 더 선호하긴 합니다.
하지만 큰 차이는 없는 것 같아요 ㅎ

인수테스트 내 변수명에 대한 한글화는 가독성을 위해 저도 선호하는 편입니다

Comment on lines +31 to +35
@DisplayName("MEMBER_JOIN 타입에 대해서만 true를 반환한다")
@CsvSource(value = {"MEMBER_JOIN,true",
"MESSAGE_CREATED,false", "MESSAGE_CHANGED,false", "MESSAGE_DELETED,false",
"CHANNEL_RENAME,false", "CHANNEL_DELETED,false", "MEMBER_CHANGED,false"})
@ParameterizedTest(name = "SlackEvent: {0} - Supports: {1}")
Copy link
Collaborator

@hyewoncc hyewoncc Aug 9, 2022

Choose a reason for hiding this comment

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

저는 이 부분이 테스트가 꼭 필요한가? 의문이 들어요
우선 사실 상 ==를 테스트하는 게 아닌가 싶고요
다른 SlackEventService 구현체가 늘어나면 여기에 테스트 케이스가 추가될 것 같은데
관련없는 구현체 추가에 테스트가 영향받는 상황이 어색하다 느껴지네요

Copy link
Contributor Author

Choose a reason for hiding this comment

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

테스트 커버리지 관점에서 봤을 때
각 SlackEventService의 isSameSlackEvent 메서드도
외부로 개방된 메서드이기 때문에 테스트 대상이라고 생각합니다.
단순 getter와는 달리 분명 로직이 존재하는 메서드라고 생각해요.
(실제로 이 부분을 잘못 작성해서 PR에서 수정됐던 적도 있구요... ;ㅅ;...)

또한 SlackEventTest에서 테스트하는 내용은 SlackEvent.of를 테스트한 거고
각 SlackEventService 구현체의 isSameSlackEvent는 테스트되지 않았다고 생각해요.

써머의 의견처럼 테스트케이스 추가에 대해선 분명 보완해야할 점이 있다고 느낍니다.

따라서 이에 대해서는 추후 SlackEventTest에서
각 구현체를 모아서 한번에 Map으로 콜렉팅해서 갯수가 각 하나인지 확인하거나
하는 식으로 개선해볼 수 있을 것 같아요.

Copy link
Collaborator

@JangBomi JangBomi left a comment

Choose a reason for hiding this comment

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

연로그랑 써머가 리뷰 남겨줘서 크게 확인할 내용이 없네요 :)
머지하겠습니다~~

@@ -14,6 +14,7 @@ public enum SlackEvent {
CHANNEL_RENAME("channel_rename", ""),
CHANNEL_DELETED("channel_deleted", ""),
MEMBER_CHANGED("user_profile_changed", ""),
MEMBER_JOIN("team_join", ""),
Copy link
Collaborator

Choose a reason for hiding this comment

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

ENUM에 , ; 로 마지막을 끝내니 좋네용

@JangBomi JangBomi merged commit 41d50cf into develop Aug 9, 2022
4차 스프린트 automation moved this from Reviewer approved to Done Aug 9, 2022
@JangBomi JangBomi deleted the feature/team-join-event branch August 9, 2022 07:46
yeon-06 added a commit that referenced this pull request Aug 19, 2022
* refactor: 채널 구독 예외 케이스 리뷰 반영 (#278)

* style: 코드 스타일 관련 리뷰 반영

* refactor: Exception 및 Method 이름 수정

* style: 테스트 코드 컨벤션 통일 (#344)

* style: 인수테스트 컨벤션 통일

- given, when, then 주석 추가
- API URL 변수명 통일
- 파라미터에 final 키워드 추가
- 메서드 순서 변경
- 도메인 용어 통일 (유저 -> 멤버)
- 상태코드 검증 메서드 통일

* style: 테스트 컨벤션 통일

- 파라미터에 final 키워드 추가
- 메서드 순서 변경
- 줄바꿈 추가
- 주입 방식 변경 (생성자->필드)
- 사용하지 않는 메서드 제거

* style: 서비스 테스트 클래스 위치 main과 일치하도록 이동

* feat: local, dev 환경에서만 CORS 허용 (#319)

* refactor: Exception 및 테스트 패키지 구조 변경 (#354)

* refactor: Exception 하위 패키지 추가

Co-authored-by: hyewoncc <hyewoncc@gmail.com>
Co-authored-by: JangBomi <bonita9931@gmail.com>
Co-authored-by: yeon-06 <yeonlog06@gmail.com>

* refactor: Test 하위 패키지 추가

Co-authored-by: hyewoncc <hyewoncc@gmail.com>
Co-authored-by: JangBomi <bonita9931@gmail.com>
Co-authored-by: yeon-06 <yeonlog06@gmail.com>

Co-authored-by: hyewoncc <hyewoncc@gmail.com>
Co-authored-by: yeon-06 <yeonlog06@gmail.com>

* refactor: 피드백 반영 (#297)

* feat: Slack 설정 정보 객체로 관리하도록 변경 (#321)

* refactor: 북마크 조회, 삭제 api 변경 (#355)

* refactor: 북마크된 메시지 목록 조회 시 id 필드값을 messageId로 변경

* refactor: 북마크 삭제 시 메세지 PK로 조회 후 삭제

* feat: 북마크 생성,조회,삭제 API RESTdocs에 추가 (#356)

* feat: 프로필 이미지가 없을 경우 대체 이미지 적용  (#361)

* feat: ProfileImage 없을 경우 디폴트 이미지 보여주도록 구현

* refactor: 프로필 이미지 컴포넌트 레이지로딩 적용

* fix: eslint ignore 제거하고, prop interface 정의

* refactor: ProfileImage 컴포넌트 props 적용 순서 변경

* fix: 변경된 북마크 삭제 api 반영 (#360)

* feat: 데이터 없다는 것을 전달할 수 있는 컴포넌트 개발 (#357)

* feat: 라우터 뒤로가기 hook 작성

* feat: EmptyStatus 컴포넌트 작성

* feat: EmptyStatus 컴포넌트 페이지에 적용

* refactor: 불필요한 콜백함수 제거

* fix: isFirstLogin 이 항상 true로 반환되던 오류 수정 (#339)

* feat: TEAM_JOIN 이벤트 구현 (#358)

* feat: TEAM_JOIN 이벤트 구현

* refactor: 연로그 피드백 반영

* feat: 검색 필터 UI 구현 (#368)

* refactor: SearchInput component children 받을 수 있도록 변경 및 스타일 변경

* feat: useChannelIds custom hook 개발

* feat: SearchOptions component 개발

* style: SearchInput style 수정

* refactor: Button component style, props 수정

* refactor: SubscribedChannel type 수정

- id: string -> number로 변경

* feat: Feed, SpecificDateFeed component에 SearchOptions component 적용

* refactor: Button component small type 추가

* refactor: Bookmark page component SearchInput Component 제거

* refactor: SearchInput Component에 button tag 추가 및 스타일링

* refactor: Feed, SpecificDateFeed Component SearchInputComponent에 내려주는 props 제거

- isSearchInputFocused 제거

* style: SearchOptions Component style 추가

* refactor: Button component 불필요한 props 제거

* refactor: 중복되는 객체 접근 구조분해 할당으로 변

* refactor: useChannelIds Props 객체로 변경 및 적용

* refactor: useChannelIds에 있던 useModal Feed, SpecificDateFeed component로 분리

* feat: 예외 클래스별 클라이언트 메시지 및 해당 메시지 조회 메서드 추가 (#367)

* refactor: 예외 클래스별 클라이언트 메시지 및 해당 메시지 조회 메서드 추가

* refactor: 예외 클래스 생성 파라미터 명이 외래키일 경우 연관관계 도메인명을 붙여 구체적 표기

* feat: 검색 기능 API 연동 및 SearchResult Page 개발 (#371)

* refactor: useChannelIds hook 네이밍 변경 -> useSelectChannels

* feat: SearchForm component 개발

* refactor: SearchInput, SearchOptions button type 설정 및 스타일 변경

* refactor: SearchForm component Feed, SpecificDateFeed page component에 적용

* style: Drawer component z-index 속성 추가

* feat: SearchResult component Routes 연결 및 PATH_NAME 상수화

* feat: SearchForm component form, input tag eventHandler 작성

* refactor: getMessages API 명세에 맞게 keyword 추가

* feat: convertSeparatorToKey util 함수 작성

* feat: SearchResult page component 개발

* refactor: useModal hook useEffect clean up callback 함수 작성

- scroll hidden -> auto 로 변경하는 clean up callback 함수 작성

* refactor: SearchForm component 비즈니스 로직 분리

- useSearchKeywordForm custom hook 으로 form 관련 로직 분리

* refactor: useSelecChannels custom hook Return type 설정

* refactor: SearchResult component PrivateRouter로 감싸주기

* refactor: SearchResult page component Error 처리 코드 제거

* refactor: API 에러 처리 리팩터링 (#372)

* feat: 에러 코드 관련 상태 상수 및 타입 정의
- ERROR_CODE 객체 상수 정의
- ERROR_MESSAGE_BY_CODE 객체 상수 정의
- 에러 객체 타입 정의

* feat: useApiError 훅 작성
- error handler 함수 작성
- 들어오는 error 객체의 code 에 따라서 스낵바 보여주도록 작성

* refactor: 전역 onError 정의를 위해 queryClient 분리
- 전역 onError 정의를 위해서 queryClient Provider 를 App.tsx 내부로 정의
- queryClient에 에러 핸들러 심어줄 수 있도록, queryClient 객체를 생성하도록 정의

* refactor: 기존의 페이지 단위로 처리하던 에러 핸들링 제거

* fix: RecoilRoot 뎁스 원상복구

* refactor: QueryClient 객체 매번 새로 생성하지 않도록 수정
- 클라이언트 객체 생성 후, useEffect 로 초기 렌더링시에만 디폴트 옵션 수정하는 방법으로 변경

* refactor: 에러메시지 내 이모지 제거

* refactor: 불필요한 에러 코드 상수 객체 제거 및 타입 수정

* refactor: 토큰 예외 처리에서 토큰 시간 만료 케이스 분리 (#370)

* refactor: Dropdown 공용 컴포넌트 작성 및 리팩터링 (#376)

* feat: useDropdown hook 개발

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

* feat: Dropdown component 개발

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

* refactor: DateDropdown component에  Dropdown component 적용

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

* refactor: SearchForm component에  Dropdown component 적용

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

* refactor: SearchForm component에  Dropdown component 적용

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

* refactor: Dropdown component props 수정

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

* refactor: Navigation, Dimmer, Drawer z-index 수정

- DateDropdown - position relative
- Dimmer - position fixed  z-index: 1;
- Navigation - position fixed & z-index 999
- Drawer - position fixed z-index: 2
- SearchForm - position: fixed z-index:1

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

* refactor: SearchForm component position fixed로 변경

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

* feat: react-query-devtools 설정 (#378)

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

* fix: 로그인 되기 전, 구독 채널 조회 API 요청하는 버그 해결 및 SearchResult lazy loading 적용 (#380)

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

* feat: 메시지 리마인더 조회 api 구현 (#366)

* feat: 메시지 리마인더 조회 api 구현

* refactor: 코드리뷰 반영

* refactor: 접근제어자 변경

* test: @SpringBootTest -> @DataJpaTest 로 변경

* test: ReminderServiceTest 추가

* test: 오늘 날짜보다 오래된 날짜 리마인더에 대한 테스트 케이스 추가

* test: BeforeAll, AfterAll로 변경

Co-authored-by: JangBomi <bonita9931@gmail.com>
Co-authored-by: yeon-06 <yeonlog06@gmail.com>

* fix: z-index 수정 및 검색 채널 선택 옵션 버그 수정 (#385)

* fix: LogoutButtonContainer, Calendar, DateDropdownMenu z-index 수정

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

* fix: defaultChannel 선택이 제대로 되지 않는 버그 수정

- useEffect 추가 및 dependency array 추가

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

* fix: Certification component early return 추가

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

* feat: 메시지 리마인더 삭제 API 구현 (#384)

Co-authored-by: JangBomi <bonita9931@gmail.com>
Co-authored-by: yeon-06 <yeonlog06@gmail.com>

* refactor: 메세지 조회 시 북마크 join으로 함께 조회 (#379)

* feat: 메시지 리마인더 등록 및 수정 API 구현 (#390)

* feat: 메시지 리마인더 등록 API 구현

* feat: 메시지 리마인더 수정 API 구현

Co-authored-by: JangBomi <bonita9931@gmail.com>
Co-authored-by: yeon-06 <yeonlog06@gmail.com>

* feat: 리마인드 메시지 전송 기능 구현 (#395)

Co-authored-by: JangBomi <bonita9931@gmail.com>
Co-authored-by: yeon-06 <yeonlog06@gmail.com>

* feat: 프론트엔드 lighthouse-ci 적용 (#400)

* docs: lighthouse-ci 설정 파일 작성
- github action 을 위한 yml 파일 작성
- lighthouse ci 기본 세팅 파일 작성

* docs: github action name 수정

* fix: PR 코멘트 권한을 위해 Github token 대체

* fix: 오타 수정

* fix: github token 으로 수정

* feat: 메시지 댓글 이벤트 전달 시 저장 제외 (#401)

* refactor: LocalDateTime.now()에서 Clock을 파라미터로 받도록 수정 (#398)

* refactor: LocalDateTime.now()에서 Clock을 파라미터로 받도록 수정

Co-authored-by: JangBomi <bonita9931@gmail.com>
Co-authored-by: yeon-06 <yeonlog06@gmail.com>

* refactor: TimeZoneConfig와 ClockConfig를 TimeConfig로 통일

Co-authored-by: JangBomi <bonita9931@gmail.com>
Co-authored-by: yeon-06 <yeonlog06@gmail.com>

Co-authored-by: yeon-06 <yeonlog06@gmail.com>

* refactor: getMessages API 요청시 query params 리팩터링 (#404)

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

* refactor: Channel, Member 도메인 하위 레포지토리 save() 반환형 수정   (#406)

* refactor: Channel 도메인 하위 Repository의 save() 반환형을 해당 엔티티 클래스로 변경

* refactor: Member 도메인 하위 Repository의 save() 반환형을 엔티티 클래스로 변경

* refactor: 서비스에서 Channel 리턴 시 save 리턴값을 바로 리턴

* feat: 메시지 조회 시 isSetReminded 필드 추가 (#407)

* feat: 메시지 조회 시 isSetReminded 추가

* test: 메시지 조회 시 isSetReminded 테스트 케이스 추가

* test: OS별로 LocalDateTime의 nano 단위가 달라 테스트가 깨지는 현상 수정

* test: 기존의 테스트 데이터가 남아있어 테스트 케이스가 깨지는 현상 수정

* style: 메서드명 변경

* refactor: !ObjectsNull() 대신 Objects.nonNull() 사용

* feat: 리마인더 요청 모달창 UI 구현 (#409)

* refactor: getTimeStandard util 함수명 변경 및 리턴 벨류 변경

- test 코드 수정 후 적용

* chore: Calendar svg 이미지 assets에 추가

* feat: ReminderModal component 개발

* feat: useReminderModal custom hook 개발

* chore: SearchResult component 불필요한 query return 값 제거

* feat: Feed, SpecificDateFeed component에 ReminderModal Component 적용

* refactor: ReminderModalOptions, ReminderModalToggleDropdown component 분리

* refactor: useReminderModal checkedValue suffix 생성 및 적용

* refactor: 다중 조건 문 isInvalidateDateTime 함수로 분리

* refactor: 이중 분기문 삼항 연산자로 변경

* refactor: isDropdownOpened 로직 useDropdown custom hook으로 대체

* refactor: ReminderModalToggleDropdown component border color theme 적용

* refactor: ReminderModalOptions component Radio display: none; 설정

* refactor: ReminderModalToggleDropdown component IconComponent children props로 변경 및 적용

* refactor: lastDate 구하는 로직 getDateInformation util 함수로 변경

* refactor: 불필요한 .toString() 메서드 제거

* refactor: props type 변경 ChangeEvent -> ChangeEventHandler

* refactor: isPadStart -> needZeroPaddingStart 로 Props 명 변경

* refactor: ReminderModalOptions, ReminderModalDropdownToggle component 명 변경

- ReminderModalOptions -> DateTimePickerOptions
- ReminderModalDropdownToggle -> DateTimePickerToggle

* refactor: useReminderModal custom hook 명 변경

- useSetReminder로 변경

* refactor: parsedOptionText utils 함수로 분리

* feat: 리마인더 시간이 현재시간보다 과거일 경우 에러 메시지 스넥바로 띄워주는 기능 추가

* hotfix: MessageCard component Props 설정 (#416)

* feat: 다크모드 구현  (#411)

* feat: ThemeToggler 컴포넌트 작성

* refactor: ThemeToggler 컴포넌트 Props type 추가

* feat: 웹스토리지 사용을 위한 훅 작성
- 제네릭으로 return type 받아오도록 구현
- 로컬스토리지/세션스토리지 공용으로 사용하도록 구현

* feat: useTheme 훅 작성
- Theme 토글 관련 로직을 담은 useTheme 훅 작성
- MacOS 의 경우 OS setting 받아오도록 설정

* refactor: useTheme, useWebStorage에서 자주 사용되는 변수 상수호 ㅏ및 타입 정의

* refactor: msw 실행 구문 분리

* feat: 테마 변경 로직 적용

* feat: 다크모드 임시 색상 추가 및 적용

* style: theme toggler 배경 색상 변경되지 않는 문제 해결

* refactor: 일반함수 화살표 함수로 변경 및 훅 리턴타입 배열에서 객체로 수정

* refactor: 테마 아이콘 svg 파일 추가 및 css 수정

* fix: 아이콘 색상 테마에 따라 변경되도록 수정

* refactor: useTheme -> useModeTheme 으로 네이밍 수정
- 기존의 styled-component 에 useTheme 훅이 있는것을 감안하여 useModeTheme 으로 수정

* fix: 로그인 되지 않은 사용자에게 랜딩페이지에서 에러메시지를 띄우는 버그  (#419)

* fix: PublicRouter에서 전역 onError Overrides 하도록 수정

* fix: OS 환경 상관 없이 사용자가 light 모드로 지정 했을 시, light 모드 적용되도록 수정

* fix: 다크모드/라이트모드 토글러 버튼 UI 및 위치 수정 (#420)

* chore: storybook RecoilRoot 추가
- 스토리북에서 Recoil 을 사용하는 컴포넌트를 테스팅 할 수 있도록, 스토리북 preview.js 에 RecoilRoot 를 추가해줬음

* feat: Theme 관련 Recoil 로직 작성
- App.tsx 에서가 아닌 다른 컴포넌트에서 Theme 을 바꾸기 위해서 Theme 관련 value 를 Recoil 로 이관

* feat: useModeTheme이 Recoil 로직을 사용하도록 수정
- Toggle 시 리코일 상태 수정
- 리턴되는 Theme 은 리코일에 저장된 value

* fix: ThemeToggler UI 수정

* refactor: ThemeToggler 내부에서 Theme 상태 및 핸들러를 갖도록 수정
- 기존의 Props 로 넘겨주는 방법 대신, ThemeToggler 컴포넌트 내부에서 해당 상태 및 핸들러에 접근 할 수 있도록 수정
- 재사용성을 포기하는 대신, ThemeToggler 를 원하는데서 쉽게 사용 할 수 있도록 구현

* feat: Drawer 최하단에 ThemeToggler 추가

* chore: 불필요한 icon 제거

* refactor: 중복되는 타입 및 상수 제거

* fix: 빌드 에러 수정- 누락된 import 삽입

* refactor: 작업한 파일 내 누락된 절대경로 수정

* refactor: 작업한 파일 내 누락된 절대경로 수정

* feat: message 도메인 하위 repository에서 save시 해당 도메인 반환하도록 변경 (#414)

* refactor: BookmarkRepository의 save 반환형을 Bookmark로 변경

* refactor: MessageRepository의 save 반환형 Message로 변경

* refactor: ReminderRepository의 save 반환형을 reminder로 변경

* fix: 메시지 조회 시 해당 회원의 북마크만 join (#413)

* feat: 리마인더를 단건 조회하는 기능 구현 (#430)

* fix: 리마인더 조회 시 메시지 작성자의 정보 전달 (#432)

* fix: 리마인더 삭제 api 명세가 북마크 삭제 api 명세로 보였던 에러 수정 (#436)

* feat: file_share 이벤트를 저장하는 기능 구현 (#427)

* feat: 파일 공유 이벤트를 저장하는 기능 구현

* refactor: 코드 리뷰 반영

* test: 리마인더 단건 조회 관련 service 및 acceptance test 추가 (#435)

* test: 리마인더 단건 조회 관련 service 및 acceptance test 추가

* refactor: 코드 리뷰 반영

* feat: 메시지 조회 시 remindDate 필드 추가 (#440)

* feat: 메시지 조회 시 remindDate 함께 전달

* test: 존재하는 remindDate 검증 방식 변경

* feat: Reminder와 Bookmark 조회 시 count 추가 (#423)

* feat: 북마크 조회 API 요청값에 count 추가

* feat: 리마인더 조회 API 요청값에 count 추가

* hotfix: 커밋 누락된 BookmarkSelectRequest 추가

* test: 리마인더 조회 시 count 테스트 케이스 추가

* style: DTO 이름 변경 (select -> find)

* test: 테스트 메소드명 변경

* style: ReminderRequest -> ReminderSaveRequest DTO명 변경

* feat: 리마인더 요청 API 연결 (#439)

* feat: reminders post API 생성 및 API_ENDPOINT 추가

* refactor: ISOConverter util 함수 return 값 수정

* feat: MessageCard isSetReminded option 추가

- type 추가
- testResponseData isSetReminded 추가
- Bookmark, SearchResult, MessageCard component Props 추가

* feat: ReminderModal component targetMessageId, refetchFeed Props 추가

- Feed, SpecificDateFeed component에 props 추가 및 targetMessageId 상태관리 추가

* feat: useSetReminder custom hook 에 post reminder 로직 추가

- mutate 로직 추가
- isInvalidateDateTime 오류 수정

* feat: Reminder page component 생성 및 Alarm page component 제거

* feat: reminder type 설정

* feat: extractResponseReminders util 함수 작성

* refactor: Navigation component Alarm -> Reminder로 변경

* feat: reminder QUERY_KEY 추가 및 ResponseReminder type 설정

* feat: reminders API fetcher 추가

- getReminder, getReminders, putReminder, deleteReminder API fetcher 추가

* feat: Reminder Page component infiniteQuery nextReminderCallback 함수 추가

* refactor: ReminderModal component Props 수정 및 디자인 수정

* refactor: Feed, SpecificDateFeed component targetMessage 로직 추가

- targetMessageId 초기화 함수 작성
- isTargetMessageSetReminder 초기화 함수 작성

* refactor: MessageCard component Props 수정

- toggleBookmark 옵셔널로 변경

* feat: useSetReminder custom hook 수정, 삭제 로직 추가

- handleRemoveSubmit, handleModifySubmit handler 추가
- targetMessage가 isSetReminder인 경우 remindDate 가져와서 적용하는 로직 추가
- 수정 버튼 클릭시 데이터 업데이트 해주는 useMutation 로직 추가

* refactor: Bookmark, Reminder page component 에 각자 맞는 버튼 보여지게 UI 변경

- 각 페이지에서 pathname을 MessageCard component Props로 내려줘 분기 처리

* refactor: Reminder type ResponseReminder로 변경 후 적용

* feat: Reminder page component 에 ReminderModal Portal 적용

* refactor: 중복되는 로직 useSetTargetMessage custom hook 으로 분리후 적용

* refactor: useSetReminder custom hook 중복 제거

- handleModifySubmit, handleCreateSubmit -> handleReminderSubmit으로 통합

* refactor: handleRemoveSubmit 버튼 confirm 로직 추가

- 삭제 여부 확인 후 삭제할 수 있도록 변경

* refactor: ReminderModal component에서 ReminderModalButtons component 분리

* refactor: TEXT COLOR LIGHT_BLUE 추가

* feat: Reminder page 에서 remindDate 표시하는 로직 추가 및 스타일링

* refactor: MessageCard component IconButton component 합성하는 로직으로 수정

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

* refactor: reminder 단건 조회 로직 제거 후 변경 된 데이터 스키마 적용

* refactor: useSetReminder 중복되는 상태값 관리 useInput custom hook으로 분리

* refactor: useSetReminder에  mutation 로직 분리 및 ReminderModalButtons component 제거 후 ReminderModal component로 합성

* refactor: reminder date, time 상태값 변경

- 기존 "1시" -> 변경  "1"

* refactor: test 코드 수정

- 변경된 데이터 타입 적용

* refactor: date, time options 생성하는 로직 useSetReminder hook 에서 분리

Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>

* feat: favicon 추가 및 오픈그래프 메타태그 추가 (#433)

* chore: favicon.ico 파일 추가 및 html 적용

* chore: 오픈그래프에 보여줄 로고 이미지 png 파일 추가

* chore: 오픈그래프 메타태그 추가
- type: 웹 사이트 타입
- url : 웹 사이트 url (production 서버 연동)
- title: 웹 사이트 타이틀
- image: 웹 사이트 대표 이미지
- description: 웹 사이트 설명
- site_name: 웹 사이트 이름
- locale: 웹 사이트 언어

* chore: EOL 제거

* chore: Jacoco, SonarQube 연동 (#442)

* feat: SonarQube 연동

* refactor: 캐싱 옵션 제거 및 문구 수정

* chore: SonarQube projectKey 수정

* feat: thread_broadcast 이벤트에 대한 기능 추가 (#424)

* feat: subtype이 thread_broadcast 인 슬랙 이벤트 추가

* feat: thread_broadcast 이벤트가 message_changed 이벤트로 발생하는 경우에 대한 처리 추가

* test: 테스트 격리 문제 해결

* refactor: 코드 리뷰 반영

* refactor: 코드 리뷰 반영 및 테스트코드 추가

* feat: 에러 코드와 에러 코드, 메세지를 전달한 dto 추가 (#451)

* chore: favicon 웹팩 설정 추가 (#453)

- htmlWebpackPlugin 사용하여, HTML에 로컬 이미지가 함께 빌드되도록 추가

* refactor: 검색 결과 페이지 UI 및 관련 로직 리팩터링 (#443)

* feat: 검색 결과 페이지에서 검색 결과 없음에 대한 UI 수정
- 키워드 에 대한 검색 결과가 없습니다 라는 문구로 대체

* refactor: 검색 결과 페이지에서 searchParam 가져오는 부분 같은 로직 hook 으로 대체
- useGetSearchParam 사용

* refactor: 검색 채널 선택 훅 리팩터링 및 현재 방문중인 채널 id 배열로 받도록 수정
- 검색 시, 이전에 선택된 채널이 여러개일 상황을 대비하기 위하여 방문중 채널 id 를 배열로 처리하도록 수정
- 전반적인 훅 리팩터링

* refactor: useSearchKeywordForm 에서 불필요한 props 제거
- props 대신 handler 함수의 매개변수로 넣어주도록 수정

* refactor: useSearchKeywordForm 네이밍 수정
- useSubmitSearchForm 으로 수정

* feat: 검색 결과 페이지에서, 이전 검색 키워드 SearchInput 에 남아있도록 수정

* refactor: 제출한 키워드 공백 제거 로직 추가

* fix: 선택된 채널이 데이터 매 리렌더링마다 비워지는 문제 해결

* refactor: 구독된 채널 요청 중복 쿼리 커스텀 훅으로 분리하여 재사용

* refactor: 피드백 반영
- prevChannelIds 사용하여 채널 id filter

* refactor: 피드백 반영
- 개행 추가

* refactor: 피드백 반영

* refactor: 피드백 반영
- trim util 함수 제거

* refactor: 불필요한 함수 제거

* fix: 검색 채널 옵션 선택 버그 해결 (#458)

- 현재 방문중인 채널이 체크되지 않는 에러 해결
- 전체 선택이 되지 않는 에러 해결

* fix: 서버 에러 대응 방법 수정 및 구독중인 채널 없을 경우 대응 (#459)

* fix: 서버에서 전달받는 에러 타입 수정

* fix: react-query retry 옵션 0으로 설정

* feat: 구독중인 채널 없을 경우 채널 추가 페이지로 이동하도록 구현

* refactor: 유효하지 않은 스토리 제거 및 필요한 스토리 추가 (#461)

- BookmarkButton 스토리 추가
- ReminderButton 스토리 추가

* refactor: 사용하지 않는 assets 제거 (#462)

* refactor: 누락된 타입 보강 및 타입 리팩터링 (#463)

* refactor: 커스텀훅 누락된 Return Type 작성

* chore: hook 폴더 내부 상대경로 제거

* refactor: 리액트에서 제공해주는 EventHandler 타입 적용

* refator: 반복되는 키-프로퍼티 타입 Record 로 리팩터링

* refactor: useSetReminder 오전,오후 상수화 및 type 설정

* refactor: ReminderModal 내 버튼 텍스트 상수화 및 타입 정의

* refactor: PropsWithChildren 적용 및 전반적인 컴포넌트 Props 리팩터링

* refactor: api 요청 함수 전반적인 리팩터링
- query params 객체로 넘겨주도록 수정
- 누락된 절대경로 적용

* refactor: useQuery Error 타입 명시

* refactor: axios 요청 시 쿼리파람 객체로 넘겨주도록 개선

* refactor: 누락된 절대경로 추가

* refactor: type 네이밍 수정
- ResponseReminder -> Reminder 로 수정

* refactor: 사용하지 않는 api 함수 제거

* refactor: hooks 누락된 ReturnType 정의

* refactor: 누락된 절대경로 추가

* refactor: 메시지 데이터, 북마크 데이터 id 타입 수정
- string -> number

* refactor: 리마인더 삭제 useMutation 적용

* fix: MemberInitializerTest Disable 처리

* Revert "fix: MemberInitializerTest Disable 처리"

This reverts commit 6603377.

* feat: DatabaseCleaner 구현 (#444)

* feat: DatabaseCleaner 구현

Co-authored-by: Richard Jeon <ztzy1907@gmail.com>
Co-authored-by: JangBomi <bonita9931@gmail.com>

* feat: AcceptanceTest, ControllerTest에서 truncate.sql 제거

Co-authored-by: Richard Jeon <ztzy1907@gmail.com>
Co-authored-by: JangBomi <bonita9931@gmail.com>

* fix: ReminderServiceTest 에 Transactional 애너테이션 추가

Co-authored-by: Richard Jeon <ztzy1907@gmail.com>
Co-authored-by: JangBomi <bonita9931@gmail.com>

* test: MemberInitializerTest Disable 처리

* test: AcceptanceTest AfterEach 메서드명 변경. clear -> tearDown

Co-authored-by: JangBomi <bonita9931@gmail.com>

* refactor: 채널 생성 역할을 channelService에게 위임 (#457)

* refactor: z-index 마지막 수정 및 Dropdown Dimmer제거 (#466)

* refactor: 불필요한 console.log 제거

* chore: 개행 추가

* refactor: z-index 수정

* refactor: Calendar component z-index 추가 수정

* feat: useOuterClick custom hook 생성 및 Dropdown component에 적용

* chore: DB 설정 정보 변경 (#467)

* feat: 예외 메시지에 데이터도 함께 기록 (#468)

* refactor: QA 1차 반영  (#469)

* fix: 검색 결과 페이지에서 재검색 결과 렌더링되지 않는 이슈 해결

* fix: main 채널의 특정 날짜 피드 페이지의 경우 검색 채널 옵션에서 채널 선택이 안되어있는 문제 해결

* refactor: '로그인이 필요한 서비스입니다' 라는 스낵바 메시지 제거

* fix: placeholer text 띄어쓰기 추가

* refactor: home 버튼 눌렀을 때 가장 최근 방문한 피드 방문하도록 로직 수정
- sessionStorage 에 저장
- 로그아웃 시 sessionStorage 데이터 초기화

* refactor: QA 2차 반영 (#470)

* fix: github icon 클릭시 github page로 이동 및 footer component 필요없는 태그 제거

* fix: Snackbar 메시지 dimmer 밑에 깔리는 문제 수정 z-index: 3;으로 수정

* refactor: useOuterClick custom hook ref type 재설정 (any type 제거)

* fix: Feed, Reminder, Bookmark, SpecificDateFeed 접근시 스크롤 상단으로 이동하도록 변경

* hotfix: 홈버튼 누르면 최근 방문 페이지로 돌아가는 로직 버그 수정 (#471)

- 모든 페이지의 정보를 sessionStorage에 저장하는 문제 해결

* refactor: QA 3차 반영 (#472)

* refactor: 선택된 채널 이름에 하이라이트 주는 기능 추가

* refactor:  Drawer Modal, Logout modal 중복으로 띄우지는 문제 해결

* refactor: 불필요한 svg 제거 및 svg 네이밍 변경 후 변경된 svg 적용

* refactor: 리마인더 등록시 동일한 날짜 동일한 시간 동일한 분에 요청되는 버그 수정 및 중복되는 로직 제거

* refactor: 오전 오후 시간 재 설정

- 오전 0시 ~ 11시
- 오후 12시 ~ 11시

* refactor: AMHour, PMHour 에 맞게 scroll 이동 할 수 있도록 변경

* fix: BookmarkResponse에서 bookmark id 도 함께 반환받도록 수정 (#473)

* refactor: QA 4차 반영  (#476)

* refactor: 불필요한 주석 제거

* fix: 다크모드 토글러 icon assets 에 추가 및 사용

* fix: OS 환경에 따라서 초기 다크모드/라이트모드 설정되도록 수정

* refactor: 서버에서 변경된 북마크 스키마 반영

* fix: 개발모드 환경변수 파일 수정

* fix: 기본채널 (feed) 일 경우에도 drawer 에 하이라이트 표시되도록 수정

* refactor: 채널선택 페이지에서 네비게이션 바 제거 및 디자인 수정 (#477)

* fix: thread_broadcast 메시지 수정 시 수정이 반영되지 않는 버그 수정 (#465)

* fix: thread_broadcast 메시지 수정 시 수정이 반영되지 않는 버그 수정

* refactor: 사용하지 않는 메서드 제거

* test: assert에서 검증할 부분 이외의 코드 제거

* fix: 같은 날 리마인더 개수가 count보다 많은 경우에 isLast 에러 수정 (#478)

* fix: 같은 날 리마인더 개수가 count보다 많은 경우에 isLast 애러 수정

* test: 리마인더 날짜 + 시간 순 정렬 확인 테스트 추가

Co-authored-by: 봄 <55357130+JangBomi@users.noreply.github.com>
Co-authored-by: Richard JEON <ztzy1907@gmail.com>
Co-authored-by: hyewoncc <hyewoncc@gmail.com>
Co-authored-by: hyewoncc <80666066+hyewoncc@users.noreply.github.com>
Co-authored-by: moonheekim0118 <hellomooneekim@gmail.com>
Co-authored-by: Jaejeung Ko <jaejeung3210@gmail.com>
Co-authored-by: JangBomi <bonita9931@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🎉 BE 백엔드 관련 ✨ FEAT
Projects
No open projects
Development

Successfully merging this pull request may close these issues.

워크스페이스 신규 멤버 참여 이벤트 대응
4 participants