Releases: woowacourse-teams/2022-pickpick
Releases ยท woowacourse-teams/2022-pickpick
v1.2.2
Bug fix
- ๋ก๊ทธ์ธ ์๋๋ ๋ฌธ์ ํด๊ฒฐ
- ์ํฌ์คํ์ด์ค ๋ฑ๋ก ์๋๋ ๋ฌธ์ ํด๊ฒฐ
- ์ฑ๋ ๊ตฌ๋ ํ์ด์ง์์ ๋ฌดํ ๋ฆฌ๋ก๋ฉ ํด๊ฒฐ
Feature
- ๊ฒ์ ์์ง ์ต์ ํ
- ์ํฌ์คํ์ด์ค ๋ฑ๋ก ํ ๋ฐ๋ก ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํ
V1.2.1 ๋ฐฐํฌ
What's Changed
- slack workspace ๋ก์ง ๋ถ๋ฆฌ
- ์ค๋ณต๋ ์ํฌ์คํ์ด์ค ๋ฑ๋ก์ ์๋ฌ์ฒ๋ฆฌ
- ์คํ ๋ฆฌ๋ถ ๋ณด์
- ์ฑ๋์ด ์ญ์ ๋์ง ์๋ ํ์ ๊ฐ์
- ์ํฌ์คํ์ด์ค ๋ฑ๋ก์ oauth.v2.access๋ฅผ 1ํ๋ง ํธ์ถํ๋๋ก ์์
- SlackBot์ DB์ ์ ์ฅํ์ง ์๋๋ก ์์
- ๋ก๊ทธ์ธ/์ํฌ์คํ์ด์ค ๊ด๋ จ oauth ์์ฒญ์ ๋ค๋ฅธ redirect uri๋ฅผ ๋ณด๋ด์ฃผ๋๋ก ์์
Full Changelog: v1.2.0...v1.2.1
v1.2.0
v.1.1.1
hotfix
- ํ๋ก ํธ์๋ UI ์์
- production ํ์ด์ง์์ ๋ณ๊ฒฝ๋ ์ฌ๋ ํด๋ผ์ด์ธํธ id ์ ์ฉ ํ๋๋ก ์์ ํ์ฌ ๋ก๊ทธ์ธ ๋์ง ์๋ ๋ฌธ์ ํด๊ฒฐ
v1.1.0
What's Changed
- ์ฟผ๋ฆฌ ๋ฆฌํฉํฐ๋ง
- ๋ฉ์์ง๊ฐ ์ฌ๋ฐ๋ฅด์ง ์๊ฒ ์ ๋ ฌ๋์ง ์๋ ์ด์ ๋์
- ๋ฉ์์ง/๋ถ๋งํฌ/๋ฆฌ๋ง์ธ๋ ์กฐํ API ์คํ ๋ณ๊ฒฝ
- DB Cleaner ๋์
- ํ ์คํธ ์ฑ๋ฅ ๊ฐ์
- ๋ฆฌ๋ง์ธ๋ ์ปดํฌ๋ํธ ๋ฆฌํฉํฐ๋ง
- bundle.js ํ์ผ ํฌ๊ธฐ ์์ถ
- ํ๋ก ํธ์๋ ์๋ฒ ์บ์ฑ ์ ์ฑ ์๋ฆฝ ๋ฐ ์ธํ๋ผ ๊ตฌ์กฐ ์์
- ์ฌํ๋ฆฌ ๋ก๊ทธ์ธ ๋์ง ์๋ ์๋ฌ ํด๊ฒฐ
- ๊ทธ ์ธ ์์ํ UI ์๋ฌ ์์
- ์ด์์ฉ ์ฌ๋ app ์ถ๊ฐ
Full Changelog: v1.0.0...v1.1.0
v1.0.0
v1.0.0 ๋ฐฐํฌ (#480) * 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 <[email protected]> Co-authored-by: JangBomi <[email protected]> Co-authored-by: yeon-06 <[email protected]> * refactor: Test ํ์ ํจํค์ง ์ถ๊ฐ Co-authored-by: hyewoncc <[email protected]> Co-authored-by: JangBomi <[email protected]> Co-authored-by: yeon-06 <[email protected]> Co-authored-by: hyewoncc <[email protected]> Co-authored-by: yeon-06 <[email protected]> * 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 <[email protected]> * feat: Dropdown component ๊ฐ๋ฐ Co-authored-by: moonheekim0118 <[email protected]> * refactor: DateDropdown component์ Dropdown component ์ ์ฉ Co-authored-by: moonheekim0118 <[email protected]> * refactor: SearchForm component์ Dropdown component ์ ์ฉ Co-authored-by: moonheekim0118 <[email protected]> * refactor: SearchForm component์ Dropdown component ์ ์ฉ Co-authored-by: moonheekim0118 <[email protected]> * refactor: Dropdown component props ์์ Co-authored-by: moonheekim0118 <[email protected]> * 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 <[email protected]> * refactor: SearchForm component position fixed๋ก ๋ณ๊ฒฝ Co-authored-by: moonheekim0118 <[email protected]> Co-authored-by: moonheekim0118 <[email protected]> * feat: react-query-devtools ์ค์ (#378) Co-authored-by: moonheekim0118 <[email protected]> Co-authored-by: moonheekim0118 <[email protected]> * fix: ๋ก๊ทธ์ธ ๋๊ธฐ ์ , ๊ตฌ๋ ์ฑ๋ ์กฐํ API ์์ฒญํ๋ ๋ฒ๊ทธ ํด๊ฒฐ ๋ฐ SearchResult lazy loading ์ ์ฉ (#380) Co-authored-by: moonheekim0118 <[email protected]> Co-authored-by: moonheekim0118 <[email protected]> * feat: ๋ฉ์์ง ๋ฆฌ๋ง์ธ๋ ์กฐํ api ๊ตฌํ (#366) * feat: ๋ฉ์์ง ๋ฆฌ๋ง์ธ๋ ์กฐํ api ๊ตฌํ * refactor: ์ฝ๋๋ฆฌ๋ทฐ ๋ฐ์ * refactor: ์ ๊ทผ์ ์ด์ ๋ณ๊ฒฝ * test: @SpringBootTest -> @DataJpaTest ๋ก ๋ณ๊ฒฝ * test: ReminderServiceTest ์ถ๊ฐ * test: ์ค๋ ๋ ์ง๋ณด๋ค ์ค๋๋ ๋ ์ง ๋ฆฌ๋ง์ธ๋์ ๋ํ ํ ์คํธ ์ผ์ด์ค ์ถ๊ฐ * test: BeforeAll, AfterAll๋ก ๋ณ๊ฒฝ Co-authored-by: JangBomi <[email protected]> Co-authored-by: yeon-06 <[email protected]> * fix: z-index ์์ ๋ฐ ๊ฒ์ ์ฑ๋ ์ ํ ์ต์ ๋ฒ๊ทธ ์์ (#385) * fix: LogoutButtonContainer, Calendar, DateDropdownMenu z-index ์์ Co-authored-by: moonheekim0118 <[email protected]> * fix: defaultChannel ์ ํ์ด ์ ๋๋ก ๋์ง ์๋ ๋ฒ๊ทธ ์์ - useEffect ์ถ๊ฐ ๋ฐ dependency array ์ถ๊ฐ Co-authored-by: moonheekim0118 <[email protected]> * fix: Certification component early return ์ถ๊ฐ Co-authored-by: moonheekim0118 <[email protected]> Co-authored-by: moonheekim0118 <[email protected]> * feat: ๋ฉ์์ง ๋ฆฌ๋ง์ธ๋ ์ญ์ API ๊ตฌํ (#384) Co-authored-by: JangBomi <[email protected]> Co-authored-by: yeon-06 <[email protected]> * refactor: ๋ฉ์ธ์ง ์กฐํ ์ ๋ถ๋งํฌ join์ผ๋ก ํจ๊ป ์กฐํ (#379) * feat: ๋ฉ์์ง ๋ฆฌ๋ง์ธ๋ ๋ฑ๋ก ๋ฐ ์์ API ๊ตฌํ (#390) * feat: ๋ฉ์์ง ๋ฆฌ๋ง์ธ๋ ๋ฑ๋ก API ๊ตฌํ * feat: ๋ฉ์์ง ๋ฆฌ๋ง์ธ๋ ์์ API ๊ตฌํ Co-authored-by: JangBomi <[email protected]> Co-authored-by: yeon-06 <[email protected]> * feat: ๋ฆฌ๋ง์ธ๋ ๋ฉ์์ง ์ ์ก ๊ธฐ๋ฅ ๊ตฌํ (#395) Co-authored-by: JangBomi <[email protected]> Co-authored-by: yeon-06 <[email protected]> * 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 <[email protected]> Co-authored-by: yeon-06 <[email protected]> * refactor: TimeZoneConfig์ ClockConfig๋ฅผ TimeConfig๋ก ํต์ผ Co-authored-by: JangBomi <[email protected]> Co-authored-by: yeon-06 <[email protected]> Co-authored-by: yeon-06 <[email protected]> * refactor: getMessages API ์์ฒญ์ query params ๋ฆฌํฉํฐ๋ง (#404) Co-authored-by: moonheekim0118 <[email protected]> Co-authored-by: moonheekim0118 <[email protected]> * 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 <[email protected]> * 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 <[email protected]> * 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 66033771a24dabbce1cf3c6dd1272471ed2116de. * feat: DatabaseCleaner ๊ตฌํ (#444) * feat: DatabaseCleaner ๊ตฌํ Co-authored-by: Richard Jeon <[email protected]> Co-authored-by: JangBomi <[email protected]> * feat: AcceptanceTest, ControllerTest์์ truncate.sql ์ ๊ฑฐ Co-authored-by: Richard Jeon <[email protected]> Co-authored-by: JangBomi <[email protected]> * fix: ReminderServiceTest ์ Transactional ์ ๋ํ ์ด์ ์ถ๊ฐ Co-authored-by: Richard Jeon <[email protected]> Co-authored-by: JangBomi <[email protected]> * test: MemberInitializerTest Disable ์ฒ๋ฆฌ * test: AcceptanceTest AfterEach ๋ฉ์๋๋ช ๋ณ๊ฒฝ. clear -> tearDown Co-authored-by: JangBomi <[email protected]> * 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: ๋ด <[email protected]> Co-authored-by: Richard JEON <[email protected]> Co-authored-by: hyewoncc <[email protected]> Co-authored-by: hyewoncc <[email protected]> Co-authored-by: moonheekim0118 <[email protected]> Co-authored-by: Jaejeung Ko <[email protected]> Co-authored-by: JangBomi <[email protected]>
v0.3.0
- Slack OAuth๋ฅผ ํ์ฉํ ๋ก๊ทธ์ธ / ๋ก๊ทธ์์ ๊ธฐ๋ฅ
- ์ฑ๋ ์ ํ ๊ธฐ๋ฅ
- ์ฑ๋ ๊ตฌ๋ /๊ตฌ๋ ํด์ ๊ธฐ๋ฅ
- ๋ถ๋งํฌ ์ถ๊ฐ/์ญ์ ๊ธฐ๋ฅ
- ์ ํ๋ ์ฑ๋ ๋ฉ์์ง ๋ณด์ฌ์ฃผ๊ธฐ ๊ธฐ๋ฅ
- ํน์ ๋ ์ง ๋ฉ์์ง ๋ณด์ฌ์ฃผ๊ธฐ ๊ธฐ๋ฅ