-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FE] CD test 2 #237
[FE] CD test 2 #237
Conversation
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.
CD ์ฑ๊ณต์ธ๊ฐ์~~
* [FE] ํ๋ก ํธ์๋ ์ด๊ธฐ ์ธํ (#5) * ci: webpack, react, typescript ์ค์ * ci: eslint, prettier, stylelint ์ค์ * [BE] feat: ์ด๊ธฐ ํ๊ฒฝ ์ค์ (#8) * feat: ์ด๊ธฐ ํ๊ฒฝ ์ค์ * refactor: ํด๋์ค ์ข ๋ฃ ์ ๊ฐํ ์ ๊ฑฐ * build: application.yml ์ค์ * [BE] feat: ์ด๊ธฐ ์ํฐํฐ ์์ฑ (#10) * feat: ์ด๊ธฐ ์ํฐํฐ ์์ฑ * refactor: ๋ฆฌ๋ทฐ ๋ด์ฉ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋ค๋์ผ ์ฐ๊ฒฐ * refactor: ํจํค์ง ๊ตฌ์กฐ ๊ณ ๋ คํ์ฌ ProjectGroup์ผ๋ก ์์ * refactor: Project -> Reviewer๋ก ๋ณ๊ฒฝ * refactor: ํ ์ด๋ธ๋ช ์ผ์น (reviewer_group) * [BE] feat: ๋ฆฌ๋ทฐ ์์ฑ (#15) * feat: ์ด๊ธฐ ์ํฐํฐ ์์ฑ * refactor: ๋ฆฌ๋ทฐ ๋ด์ฉ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋ค๋์ผ ์ฐ๊ฒฐ * refactor: ํจํค์ง ๊ตฌ์กฐ ๊ณ ๋ คํ์ฌ ProjectGroup์ผ๋ก ์์ * refactor: Project -> Reviewer๋ก ๋ณ๊ฒฝ * refactor: ํ ์ด๋ธ๋ช ์ผ์น (reviewer_group) * feat: ๋ฉค๋ฒ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ์ด๊ทธ๋ฃน ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ ๋ฌธํญ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ํค์๋ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ ํค์๋ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ ์์ฑ ๊ธฐ๋ฅ ๊ตฌํ * test: ๋ฆฌ๋ทฐ ์์ฑ ๊ธฐ๋ฅ ํ ์คํธ ์ถ๊ฐ --------- Co-authored-by: donghoony <[email protected]> Co-authored-by: nayonsoso <[email protected]> * [BE] feat: ํ ์คํธ ๋ฉ์๋๋ณ ๊ฒฉ๋ฆฌ (#19) * feat: ํ ์คํธ ๊ฒฉ๋ฆฌ๋ฅผ ์ํ DB Cleaner ๋ฐ Extension ๊ตฌํ * feat: Service์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์ด๋ ธํ ์ด์ ์ ๊ณต * test: ์๋น์ค ํ ์คํธ ์ด๋ ธํ ์ด์ ์ฌ์ฉํ๋๋ก ์์ * fix: ๋๋ฝ๋ ๋ฆฌ๋ทฐ ์์ฑ ๋งคํ URL ์ถ๊ฐ (#17) * [BE] feat: ๋ฆฌ๋ทฐ ์กฐํ (#22) * feat: ๋ฆฌ๋ทฐ ์กฐํ ๊ธฐ๋ฅ ์ถ๊ฐ * style: ๊ฐํ ๋ณ๊ฒฝ * test: ๋ฆฌ๋ทฐ ์กฐํ ๊ธฐ๋ฅ ํ ์คํธ ์ถ๊ฐ * refactor: ๋ฆฌ๋ทฐ ์กฐํ ๋ฉ์๋๋ช ๋ณ๊ฒฝ * refactor: id ํ์ ๋ณ๊ฒฝ * style: ๊ฐํ ์์ * fix: PostMapping ์์ --------- Co-authored-by: KIMGYUTAE <[email protected]> Co-authored-by: donghoony <[email protected]> * [BE] feat: ์ปค์คํ ์์ธ ์ฒ๋ฆฌ (#20) * feat: ์ปค์คํ ์์ธ ์์ฑ * feat: ์ปค์คํ ์์ธ ์ ์ฉ * feat: ๊ธ๋ก๋ฒ ์์ธ ์ฒ๋ฆฌ * [BE] feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ ๋ณด ๋ฐ ํค์๋ ์กฐํ API (#24) * feat: ํค์๋ ์กฐํ API * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์กฐํ API * refactor: PathVariable ๋ณ์๋ช ๋ณ๊ฒฝ * [FE] ๋ฆฌ๋ทฐ ์์ฑํ๋ฉด๊ณผ ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ๋ฉด ๊ฒฐํฉ (#26) * fix : webpack dev sever ์ด ๋ ์ค๋ฅ ์์ - package.json ์์ type :"module" ์ญ์ , stylelint ๊ด๋ จ ์ค์ ์ญ์ Co-Authored-By: ImxYJL <[email protected]> * ci : svgํ์ผ ๊ด๋ จ ํ๊ฒฝ ์ ํ Co-Authored-By: ImxYJL <[email protected]> * design : reset ์คํ์ผ, global style์์ ํฐํธ ์ ์ฉ Co-Authored-By: ImxYJL <[email protected]> * feat: ๋ฆฌ๋ทฐ ์ ๊ธ ๋ฒํผ ์ถ๊ฐ Co-Authored-By: ImxYJL <[email protected]> * feat: ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ๋ฉด์ ์ง๋ฌธ,๋ต ์ปดํฌ๋ํธ ์ถ๊ฐ Co-Authored-By: ImxYJL <[email protected]> * feat: ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ๋ฉด์ ํ๋ก์ ํธ ์ค๋ช ์ปดํฌ๋ํธ ์ถ๊ฐ Co-Authored-By: ImxYJL <[email protected]> * feat : ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ๋ฉด ํ์ด์ง ์ถ๊ฐ ๋ฐ ์์ธ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ ํ์ ์ถ๊ฐ Co-Authored-By: ImxYJL <[email protected]> * fix: webpack dev server ์ด ๋ ์ค๋ฅ ์์ Co-authored-by: soosoo22 <[email protected]> * design: reset css ์ ์ฉ Co-authored-by: soosoo22 <[email protected]> * feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ๊ตฌํ Co-authored-by: soosoo22 <[email protected]> * ci: svg ํ์ผ ๊ด๋ จ ์ค์ * fix : ๋จธ์ง์ถฉ๋ ํด๊ฒฐ ๋ฐ ์คํ ์์ * feat: react-router-dom, react-router ์ค์น ๋ฐ ์ค์ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ์ด์ง ๊ฒฐํฉ ๋ฐ ๋ฆฌํฉํ ๋ง * refactor: ๋ฆฌ๋ทฐ ํ์ ํ์ผ ๋ฆฌํฉํ ๋ง ๋ฐ ํ์ ์ถ๊ฐ * feat: api ์ค์ ์ถ๊ฐ ๋ฐ ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ์ด์ง์ api ํธ๋ค๋ฌ ์ถ๊ฐ --------- Co-authored-by: ImxYJL <[email protected]> Co-authored-by: chysis <[email protected]> Co-authored-by: soosoo22 <[email protected]> * [BE] refactor: ํจํค์ง ๊ตฌ์กฐ ๋ฆฌํฉํฐ๋ง (#30) * refactor: ํจํค์ง ๊ตฌ์กฐ ๊ตฌ์ฒดํ * refactor: ํจํค์ง ๊ตฌ์กฐ ๊ตฌ์ฒดํ(์๋น์ค, ์ปจํธ๋กค๋ฌ, ๋ ํฌ์งํ ๋ฆฌ) * [BE] feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ค๋ช ์์ฑ, ๋ง๊ฐ ๊ธฐํ ๋ฐ ๊ฒ์ฆ ๋ก์ง ์ถ๊ฐ (#34) * feat: BadRequestException ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ด๋ฆ, ์ค๋ช ๊ธธ์ด ๊ฒ์ฆ * [FE] design: theme ,์ ์ญ ์คํ์ผ์ ์ค์ (#41) * chore: ๋ถํ์ํ ํ์ผ ์ญ์ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> * design: theme ์์ฑ - ์์, ํฐํธ ์ฌ์ด์ฆ, ํฐํธ wieght ์ค์ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> * design: emotion ThemeProvider ์ ์ฉ ๋ฐ Theme ํ์ ํ์ฅ - emotion์์ ์ ๊ณตํ๋ Theme ํ์ ์ด ๋น ๊ฐ์ฒด์ฌ์ ์ฝ๋์์ ์ฌ์ฉํ๋ theme์ ๋ง๊ฒ ํ์ ์ ํ์ฅํจ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> * design : rem ์ ํ ๋ฐ reset.css๋ฅผ globalStyle์ ์ ์ฉ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: App์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: ImxYJL <[email protected]> Co-authored-by: soosoo22 <[email protected]> Co-authored-by: Fe <[email protected]> * [FE] ci: ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ๋ฐ msw ์ค์น, eslint import rule ์ถ๊ฐ ๋ฐ ์ ์ฉ (#44) * ci: eslint ์ค๋ฅ ์์ ๋ฐ import rule ์ถ๊ฐ ๋ฐ ๊ด๋ จ ํ๋ฌ๊ทธ์ธ ์ค์น - eslint-config-prettier - eslint-plugin-import Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * style: eslint ์ ์ฉ์ผ๋ก ์ธํ ์ฝ๋ ํฌ๋งทํ ๋ณ๊ฒฝ import ์์ ์ ์ฉ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * ci: msw ์ค์น Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: badahertz52 <[email protected]> Co-authored-by: ImxYJL <[email protected]> Co-authored-by: Fe <[email protected]> * [BE] docs: Swagger๋ฅผ ํ์ฉํ API ๋ฌธ์ ์๋ํ (#31) * chore: swagger-ui ์ค์ ์ถ๊ฐ * feat: swaggerConfig ์ถ๊ฐ * docs: ์ปจํธ๋กค๋ฌ์ swagger ์ด๋ ธํ ์ด์ ์ถ๊ฐ * docs: dto์ swagger ์ด๋ ธํ ์ด์ ์ถ๊ฐ * chore: api ๋ฌธ์ ์ค์ ํ์ผ ์ถ๊ฐ * refactor: SwaggerConfig info ์ค์ ํ์ผ ๋ณ์ ์ฐธ์กฐํ๋๋ก ๋ณ๊ฒฝ * docs: api ๋ฌธ์์ ์ํ์ฝ๋ ์ฌ๋ฐ๋ฅด๊ฒ ๋ ธ์ถ๋๋๋ก ๋ณ๊ฒฝ * chore: api ๋ฌธ์ ํ์ผ๋ช ๋ณ๊ฒฝ * chore: api-docs ํ๋กํผํฐ๋ช ๋ณ๊ฒฝ * refactor: ํ๋กํผํฐ ์ ๋ณด์ ์ค์ ํด๋์ค ๋ถ๋ฆฌ * refactor: ์ปจํธ๋กค๋ฌ ๋ด swagger ์ด๋ ธํ ์ด์ ๋ถ๋ฆฌ --------- Co-authored-by: KIMGYUTAE <[email protected]> * [BE] feat: ๋ฆฌ๋ทฐ ๋๋ฉ์ธ ๊ตฌ์ฒดํ, ์ ์ฑ ๊ตฌํ (#43) * feat: dto ๊ฒ์ฆ์ ์ํ ์์กด์ฑ ์ถ๊ฐ * feat: dto์ jakarta validation ์ด๋ ธํ ์ด์ ์ถ๊ฐ * feat: ์ปจํธ๋กค๋ฌ์์ ์์ฒญ์ ๊ฒ์ฆํ ์ ์๋๋ก ์ค์ * feat: FieldError ๋ด์ฉ์ ๋ณด์ฌ์ค ์๋ต ๊ฐ์ฒด ์์ฑ * feat: FieldError ํธ๋ค๋ฌ ์ถ๊ฐ * refactor: ๋ฌธ์์ด ๊ณต๋ฐฑ ๊ฒ์ฆ์ ์ํด NotBlank ์ฌ์ฉ * style: todo ์ฃผ์ ์ถ๊ฐ * feat: ๋ฐ๋๋ผ์ธ์ด ์ง๋๋ฉด ๋ฆฌ๋ทฐ๋ฅผ ์์ฑํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: ์ฌ์ด์ฆ ๊ฒ์ฆ๋ฌธ ์ ๊ฑฐ * style: ๊ฐํ ๋ณ๊ฒฝ * refactor: ์์ธ ์ด๋ฆ์ ๊ณผ๊ฑฐํ์ผ๋ก ๋ณ๊ฒฝ * refactor: RFC 9457 ํ์์ ์งํค๋ฉด์ ํ๋ ์๋ฌ ์ ๋ณด๋ฅผ ๋ฐํํ๋๋ก ์์ * chore: ์คํ ์์ * fix: conflict ํด๊ฒฐ * feat: dto์ jakarta validation ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: ๋ฌธ์์ด ๊ณต๋ฐฑ ๊ฒ์ฆ์ ์ํด NotBlank ์ฌ์ฉ * refactor: ์ฌ์ด์ฆ ๊ฒ์ฆ๋ฌธ ์ ๊ฑฐ * [BE] feat: ํค์๋ ๋๋ฉ์ธ ๊ตฌ์ฒดํ, ์ ์ฑ ๊ตฌํ (#40) * feat: ํค์๋ ์ผ๊ธ ์ปฌ๋ ์ ๋ฐ ์ ์ฝ์ฌํญ ๊ตฌํ * build: ํ ์คํธ ํ๊ฒฝ์์ Lombok ์์กด์ฑ ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ์ ์ถ๊ฐ๋ ํค์๋ ์ญ์ * feat: ๋ฆฌ๋ทฐ์ ํค์๋ ์ถ๊ฐ * feat: ์ผ๊ธ ์ปฌ๋ ์ ์ ์ด๋ฆ์ SelectedKeywords๋ก ๋ณ๊ฒฝ * refactor: ํค์๋ ๊ฐ์ ์ ์ฑ 5๊ฐ ๋ฐ์ * refactor: ์ค๋ณต ํค์๋ ๋ฉํธ ์์ * refactor: `deleteAll`๋ก ๋ฉ์๋๋ช ์์ * refactor: `duplicated` -> `duplicate`๋ก ์์ * refactor: ํค์๋ ๋๋ฑ์ฑ ๋น๊ต * test: ํค์๋ ๋ฑ๋ก ์ ๊ธฐ์กด ํค์๋ ์ญ์ ํ ์คํธ ์์ฑ * refactor: ์ฌ์ฉํ์ง ์๋ ํ๋ ์ญ์ * style: add newlines between comments * refactor: ํค์๋ ID ๊ธฐ๋ฐ ๋น๊ต * refactor: id๊ฐ ์๋ ๊ฒฝ์ฐ detail ๋น๊ต * refactor: ํค์๋ ํ ์คํธ ๋๋ฉ์ธ ๊ธฐ๋ฐ์ผ๋ก ์์ * [BE] feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ๋๋ฉ์ธ ๊ตฌ์ฒดํ, ์ ์ฑ ๊ตฌํ (#45) * feat: Member ์ํฐํฐ์ GitHub ID ์์ฑ ์ถ๊ฐ * feat: ์์ฑํ ๋ฆฌ๋ทฐ์ด๊ฐ ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน์ ์ํ๋์ง ๊ฒ์ฆ * feat: ๋ฆฌ๋ทฐ ์์ฑ ์, ์ด๋ฏธ ์์ฑํ ๋ฆฌ๋ทฐ๊ฐ ์์ง ์์์ง ๊ฒ์ฆ * refactor: Review ์ํฐํฐ์ reviewer์์ ์ฐ๊ด๊ด๊ณ ManyToOne์ผ๋ก ๋ณ๊ฒฝ * refactor: ์ปฌ๋ผ๋ช ์ค๋ฅ ์์ * refactor: gitHub ํ๊ธฐ -> github์ผ๋ก ๋ณ๊ฒฝ * refactor: GithubReviewGroup -> GithubReviewGroup ํด๋์ค๋ช ๋ณ๊ฒฝ * refactor: ๋๋ฝ๋ @Column ์ถ๊ฐ * test: ๋ฆฌ๋ทฐ ์์ฑ ํ ์คํธ ์, ๊นํ ์ฌ์ฉ์ ๊ทธ๋ฃน ๋ฐ์ดํฐ ์ ์ฅ ๋ถ๋ถ ์ถ๊ฐ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์, ์ค๋ณต ๋ฆฌ๋ทฐ ๊ฒ์ฆ ๋ก์ง ์์ * refactor: GithubReviewerGroupNotFoundException์ UnAuthorizedException ๊ตฌํํ๋๋ก ์์ * refactor: ReviewContentExistException -> ReviewAlreadySubmittedException ํด๋์ค๋ช ๋ณ๊ฒฝ * feat: UnAuthorizedException ์ถ๊ฐ * refactor: ๋ฉ์๋ ์์ ๋ณ๊ฒฝ * test: ๋ถํ์ํ given์ ์ญ์ * test: ํ ์คํธ๋ฅผ ์ํ ๋ฐ์ดํฐ ์ฝ์ repository๋ฅผ ํ์ฉํ๋๋ก ๋ณ๊ฒฝ --------- Co-authored-by: Donghoon Lee <[email protected]> * [FE] ๋ฆฌ๋ทฐ ์ฐ๊ธฐ ํ์ด์ง์ ํ์ ๋ ๋์์ธ์ ๋ฐ์ํ๊ณ , ๋ฆฌํฉํฐ๋งํ๋ค. (#53) * fix: eslint์์ ์ ๋ ๊ฒฝ๋ก๋ฅผ ์ฝ์ง ๋ชปํ๋ ์ค๋ฅ ์์ ์ ๋ ๊ฒฝ๋ก ์ง์ Co-Authored-By: ImxYJL <[email protected]> * design: ์์คํ ๊ธฐ๋ณธ ํฐํธ ํฌ๊ธฐ ์ง์ Co-Authored-By: ImxYJL <[email protected]> * chore: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ emotion.ts์์ theme ์ ๊ฑฐ Co-Authored-By: ImxYJL <[email protected]> * feat: ๊ณตํต ๋ฒํผ ์ปดํฌ๋ํธ ๊ตฌํ Co-Authored-By: ImxYJL <[email protected]> * feat: ํค์๋ ๋ฒํผ ์ปดํฌ๋ํธ ๊ตฌํ Co-Authored-By: ImxYJL <[email protected]> * feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ํผ๋ธ๋ฆฌ์ฑ ๋ฐ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ Co-Authored-By: ImxYJL <[email protected]> * feat: ๋ฆฌ๋ทฐ์ด ์ฝ๋ฉํธ ์ปดํฌ๋ํธ ๊ตฌํ Co-Authored-By: ImxYJL <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์์ ๋ฆฌ๋ทฐ ์์ดํ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ Co-Authored-By: ImxYJL <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ๋ฆฌํฉํฐ๋ง - ๋ฆฌ๋ทฐ์ด ์ฝ๋ฉํธ ์ถ๊ฐ - ๋ฆฌ๋ทฐ ์์ดํ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ - ๋ถ๊ฐ์ ์ธ ์คํ์ผ๋ง Co-Authored-By: ImxYJL <[email protected]> --------- Co-authored-by: ImxYJL <[email protected]> * [FE] feat: sidebar ๋ฆฌํฉํ ๋ง ๋ฐ ๊ธฐ๋ฅ ์ถ๊ฐ , topbar ์ถ๊ฐ, ๋ฐ์ํ ํ์ด์ง ๋ ์ด์์ ์ ์ฉ (#55) * style: globalStyles.ts์์ ๊ฒฝ๋ก ๊ณต๋ฐฑ ์ถ๊ฐ * docs: ๋ถํ์ํ import ์ญ์ Co-Authored-By: soosoo22 <[email protected]> * design : theme ์ถ๊ฐ - ์ถ๊ฐ๋ theme : breakpoints, sidebarWidth Co-Authored-By: soosoo22 <[email protected]> * chore: Header ์ปดํฌ๋ํธ ์ญ์ Co-Authored-By: soosoo22 <[email protected]> * feat : Topbar ์์ฑ, logo ์ด๋ฏธ์ง ๋ณ๊ฒฝ ๋ฐ SearchInput ์์ฑ - logo ์ด๋ฏธ์ง ๋ณ๊ฒฝ - Topbar์ ๋ค์ด๊ฐ๋ ์ปดํฌ๋ํธ๋ค (SidebarOpenButtion, Logo )์์ฑ - userProfile ์ด๋ฏธ์ง ์์ฑ - ๊ณตํต ์ปดํฌ๋ํธ : SearchInput ui ์์ฑ Co-Authored-By: soosoo22 <[email protected]> * feat : ํ์ด์ง ๋ ์ด์์ ์์ฑ - ๋ ์ด์์ ๊ด๋ จ ์ปดํฌ๋ํธ๋ค ์์ฑ Co-Authored-By: soosoo22 <[email protected]> * refactor : App์ ํ์ด์ง ๋ ์ด์์ ์ ์ฉ Co-Authored-By: soosoo22 <[email protected]> * refactor: Sidebar ๋ฆฌํฉํ ๋ง - ๋ฉ๋ด๋ช ์์์ฒ๋ฆฌ - ํผ๊ทธ๋ง ๋์์ธ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ Co-Authored-By: soosoo22 <[email protected]> * feat: sidebar ์ด๊ณ ๋ซ๋ ๊ธฐ๋ฅ ์ถ๊ฐ Co-Authored-By: soosoo22 <[email protected]> --------- Co-authored-by: soosoo22 <[email protected]> * fix: ์ปดํ์ผ ์๋ฌ ํด๊ฒฐ (#60) Co-authored-by: nayonsoso <[email protected]> * [FE] fix : stylelint ์ ์ฉ ์ค๋ฅ ์์ (#66) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * ci: CI ์คํฌ๋ฆฝํธ ์์ฑ (#70) * [BE] test: ๊นํ ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน์ ํ ์คํธ ์ถ๊ฐ ๋ฐ fixture ๋ฏธ์ ์ฉ ๋ถ๋ถ ๋ณด์ (#68) * test: GithubReviewerGroupRepository ํ ์คํธ ์ถ๊ฐ * test: ReviewServiceTest์ ํ ์คํธ fixture ์ ์ฉ * test: given, when, then์ ์ถ๊ฐ * test: given ๋ฐ์ดํฐ ์ค๋ฅ ์์ * [BE] chore: workflow ๋๋ ํฐ๋ฆฌ ์ด๋ (#74) * chore: workflow ๋๋ ํฐ๋ฆฌ ์ด๋ * fix: ๋ฐฑ์๋ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ * fix: ๋ฐฑ์๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ * fix: checkout actions์ ๋๋ ํ ๋ฆฌ ์ค์ * fix: ๋๋ ํ ๋ฆฌ ์ค์ ... * infra: CD ํ์ดํ๋ผ์ธ ์์ฑ (#76) * fix: cd gradle ๋๋ ํ ๋ฆฌ ์ด๋ (#77) * [BE] refactor: ๋จ๊ฑด ๋ฆฌ๋ทฐ ์กฐํ ์ ๋ฆฌ๋ทฐ์ด ์ ๋ณด ์ญ์ , ๋ฆฌ๋ทฐ ์์ฑ ์์ ์ถ๊ฐ (#65) * refactor: ๋ฆฌ๋ทฐ ์กฐํ ์ ๋ฆฌ๋ทฐ ์์ฑ ์๊ฐ ์ถ๊ฐ, ๋ฆฌ๋ทฐ์ด ์ ๋ณด ์ญ์ * fix: ํ ์คํธ ์ด๋ ธํ ์ด์ ํ์ฑํ ๋ฐ ์์ * chore: ํ ์คํธ ํด๋์ค ํจํค์ง ์ด๋ * refactor: ๋ถํ์ํ given์ ์ ๊ฑฐ * [FE] ๋ฆฌ๋ทฐ ์์ฑ, ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ์ด์ง์ ๋ฐฑ์๋ API ์ฐ๋ ๋ฐ dotenv-webpack ์ค์น, BASE_URL์ .env๋ก ์ด๋ (#78) * chore: gitignore์ yarn-error.log ์ถ๊ฐ * ci: env ํ์ผ ์ฌ์ฉ์ ์ํ dotenv-webpack ์ค์น * refactor: ์๋ํฌ์ธํธ์ env ํ์ผ์ ํตํ API_BASE_URL ๊ฒฝ๋ก ์ ์ฉ * fix: ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ ๋ฐ์ดํฐ์์ ๋ฐฑ์๋ ์๋ต๊ณผ ์์ฑ ์ด๋ฆ์ด ๋ฌ๋๋ ๋ถ๋ถ ์์ * refactor: ๋ฐฑ์๋ ์๋ต ๋ฐ ๋ฆฌํฉํ ๋ง๋ ๋ฆฌ๋ทฐ ์ฐ๊ธฐ ํ์์ ๋ง๊ฒ ๋ฆฌ๋ทฐ ์ฐ๊ธฐ ๋ชจํน ๋ฐ์ดํฐ ์์ * chore: ๋ถํ์ํ console.log ์ญ์ * [Fe] ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ๋ฐ์ํ๋ eslint ์ค๋ฅ๋ฅผ ์์ ํ์ต๋๋ค. (#81) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * [FE] ci: Jest, RTL ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ถ (#84) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * ci: jest ๋ฐ RTL ์ค์น * ci: jest ํ์ ์ค์ ์ถ๊ฐ * ci: CI๋ฅผ ์ํ yml ํ์ผ ํ ์คํธ * fix: ์๋ชป ์ฌ๋ผ๊ฐ ํ์ผ ์ญ์ --------- Co-authored-by: badahertz52 <[email protected]> * [BE] refactor: ๋ฐ์ํ๋ ๋ชจ๋ ์์ธ์ ํ์ ํต์ผ (#69) * refactor: ์ปค์คํ ์์ธ๋ฅผ ๋ฐ์์ํค๋๋ก ์์ * refactor: ๋ชจ๋ ์์ธ๋ฅผ ์ก์ ์ ์๋๋ก ์์ * refactor: ExceptionHandler๊ฐ ๋ฐํํ๋ ์์ธ ์๋ต ํ์ ๋ณ๊ฒฝ - ProblemDetail๋ก ๋ณ๊ฒฝ * refactor: ResponseEntityExceptionHandler๋ฅผ ์์ํ์ง ์๋๋ก ๋ณ๊ฒฝ * feat: ResponseEntityExceptionHandler์์ ์ฒ๋ฆฌํ๋ ์์ธ๋ฅผ ์ง์ ํธ๋ค๋ง * feat: CORS ์ค์ ์ถ๊ฐ (#88) * fix: ci PR ๋ธ๋์น ์ค์ (#92) * refactor: ์์ธ ํธ๋ค๋ฌ ์ธ์ ๋ณ๊ฒฝ (#87) * [BE] ๋๋ฉ์ธ ์ฐ๊ด๊ด๊ณ ์ฌ์ค์ (#97) * feat: ๊นํ๋ธ ์์ด๋ ์์๊ฐ ํฌ์ฅ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ํ์ `GithubId` ์ฌ์ฉ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ํค์๋ ๋ด ์ปฌ๋ผ ์์ (content) Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ์ผ๊ธ ์ปฌ๋ ์ ์ด๋ฆ ๋ณ๊ฒฝ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ์ง๋ฌธ ์ํฐํฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ๋ต๋ณ ๊ตฌ์กฐ ๋ณ๊ฒฝ, ๊ธธ์ด ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ํค์๋ ์ฐ๊ด๊ด๊ณ ์์ด ์ฐธ์กฐํ๋๋ก ์ค์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * test: ๋ต๋ณ ๊ธธ์ด ํ ์คํธ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ ์์ฑ ์ ํค์๋ ๋ฐ์์ ์์ฑ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * test: ๋ฆฌ๋ทฐ์ด์ ๋ฆฌ๋ทฐ์ด ๊ฐ์ ๊ฒฝ์ฐ์ ์์ธ ํ ์คํธ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: ๋ฆฌ๋ทฐ-ํค์๋ ๋งคํ ํ ์ด๋ธ ์ญ์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * fix: Fixture ์ฌ์ฉํด ์ปดํ์ผ ์๋ฌ ํด๊ฒฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ์ผ๋๋ค ํธ์ ๋ฉ์๋ ์์ฑ, Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๊นํ๋ธ ์์ด๋ ๊ทธ๋ฃน, ๋ฆฌ๋ทฐ์ด ์ฐ๊ด๊ด๊ณ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน - ๋ฆฌ๋ทฐ ์ผ๋๋ค ๋จ๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ ์ ์ฉ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน - ๋ฆฌ๋ทฐ ์ผ๋๋ค ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ ์ ์ฉ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ๊นํ๋ธ ์์ด๋ ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ์ ํ๋ฆฌ๋ทฐ ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: ์ฌ์ฉํ์ง ์๋ ํ์ผ ์ญ์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ ์ถ๊ฐ ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * fix: ์ํ ์ฐธ์กฐ NPE ํด๊ฒฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: Github ID ํจํค์ง ์ด๋ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ - ๋ฆฌ๋ทฐ ๋ต๋ณ ์ฐ๊ด๊ด๊ณ ์ค์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: ์ฌ์ฉํ์ง ์๋ ์ฝ๋ ์ ๊ฑฐ * refactor: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ์์ธ ๋ณด๊ธฐ ๊ตฌํ --------- Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * [FE] feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ๊ธฐ๋ฅ ๊ตฌํ (#89) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * chore: ํ์ฌ ์ฌ์ฉ๋์ง ์๋ ์ ์ฅ ๋ฒํผ ์จ๊น ์ฒ๋ฆฌ * design: ๊ธฐ๋ณธ ํฐํธ ์ฌ์ด์ฆ ๋ณ๊ฒฝ - 15px -> 16px๋ก ์์ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * design: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ์์ ๋ ๋์์ธ ์ ์ฉ - ์์ ์ฝ๋ ์์ - ๋ฒํผ ํธ๋ฒ ์ ์คํ์ผ๋ง ์์ - ๋ฆฌ๋ทฐ ๋ง๊ฐ์ผ ๋ ์ง ํ์ ๋ณ๊ฒฝ * design: ๋ฆฌ๋ทฐ ์ง๋ฌธ์ ์๋ด ๋ฌธ๊ตฌ ๋ฐ placeholder ์ถ๊ฐ - ๊ฐ ์ง๋ฌธ์ ' (20์ ์ด์)' ๋ฌธ๊ตฌ ํ๋์ฝ๋ฉ - ์ต๋ 1000์ ์ ๋ ฅ ๊ฐ๋ฅํ๋ค๋ ๋ฌธ๊ตฌ๋ฅผ textarea์ placeholder๋ก ์ถ๊ฐ * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * chore: api๋ช ๋ฐ endpoint๋ช ์์ * chore: ๋ฆฌ๋ทฐ ์ง๋ฌธ ๋ชฉ๋ก์ ์๋ฒ์์ ๋ฐ์์ค๊ธฐ ์ํด ์์ ์ ๊ฑฐ * chore: api ๋ฌธ์ ํ์์ ๋ง๊ฒ ๋ฐ์ดํฐ ํ์ ์์ * fix: ํค์๋ ๋ฒํผ์ ๋๋ ์ ๋ ํผ์ด ์ ์ถ๋๋ ๋ฌธ์ ํด๊ฒฐ * feat: ์์ฑํ ๋ฆฌ๋ทฐ ๋ด์ฉ์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ์ํ์ ๋๊ธฐํํ๋๋ก ์ค์ * design: textarea์ ํฌ๊ธฐ๋ฅผ ๊ณ ์ ์ํค๊ณ , ๋์ด๊ฐ ๊ฒฝ์ฐ ์คํฌ๋กค ๋๋๋ก ๋ณ๊ฒฝ * design: ๊ณตํต ๋ฒํผ ์ปดํฌ๋ํธ์ ์กฐ๊ฑด๋ถ ์คํ์ผ๋ง ๊ตฌํ * design: disabled ๊ด๋ จ ์์ ๋ณ์ ์ถ๊ฐ * feat: ๋ชจ๋ ํผ์ ์์ฑํ์ ๋ ์ ์ถ ๋ฒํผ์ด ํ์ฑํ๋๋๋ก ๊ตฌํ, ํค์๋ ์ ํ ๋ก์ง ๊ตฌํ * feat: ์ ์ถ ๋ฒํผ ํด๋ฆญ ์ confirm ๋ฐ์, ํ ๋ฒ ๋ ํ์ธ ์ ์ ์ถ๋๋๋ก ๊ตฌํ * feat: ํค์๋ ๋ฒํผ์ 5๊ฐ ์ด๊ณผํด์ ์ ํํ ์ ์๋๋ก ๊ตฌํ * feat: textarea์ 1000์๋ฅผ ์ด๊ณผํด์ ์ ๋ ฅํ ์ ์๋๋ก ๊ตฌํ ๋ฐ ํ์ฌ ๊ธ์์ ํ์ * fix: ์ด๋ฏธ ์ ํ๋ ํค์๋๋ฅผ ํด์ ํ๋ ค ํด๋ ๊ฐ์ ์ ํ๋๋ ์ค๋ฅ ์์ * refactor: ํผ ์ ํจ์ฑ ๊ฒ์ฌ ์กฐ๊ฑด๋ค์ ๋ณ์๋ก ๋ถ๋ฆฌ * design: ํค์๋ ๋ฒํผ๋ค์ ํฌ๊ธฐ๋ฅผ fit-content๋ก ๋ณ๊ฒฝ ๋ฐ ๊ฐ๋ก๋ก ๋์ดํ๋๋ก ์์ * chore: api ์ฐ๊ฒฐ ์ด์ , ์์๋ก ํผ ์ ๋ณด๋ฅผ ์ฝ์์ ์ถ๋ ฅํ๋๋ก ์ค์ * chore: ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ํ์ด์ง ๋ผ์ฐํฐ ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ํ์ด์ง ๋ฐ ์์ฑ ์๋ฃ ์ ํ์ด์ง ์ด๋ ๊ธฐ๋ฅ ๊ตฌํ * refactor: ๋ฆฌ๋ทฐ ์์ดํ ์ปดํฌ๋ํธ ๋งค์ง๋๋ฒ ์์ํ * chore: ์๊ณ ์์ด์ฝ ์คํ์ผ ์ปดํฌ๋ํธํ * refactor: ๋ฆฌ๋ทฐ ๊ด๋ จ ๋ฉ์์ง ์์ ๋ถ๋ฆฌ * design: ๋ฆฌ๋ทฐ ์์ฑ๋ placeholder ๋ฐ ๋ณธ๋ฌธ font weight ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ๋ฌธํญ ๋ฒํธ ๋์ ์ผ๋ก ๋ถ์ฌํ๋๋ก ๋ณ๊ฒฝ ๋ฐ ์์ํ ์ ์ฉ * refactor: on-, handle- prefix ๊ด๋ จ ์ปจ๋ฒค์ ์ ์ฉ ๋ฐ ํค์๋ ๋ฒํผ ์ธํฐํ์ด์ค ํ์ฅ * chore: ๋ฆฌ๋ทฐ ๋ต๋ณ์ ๊ธธ์ด๊ฐ ์ ํจํ์ง ์ฒดํฌํ๋ ๋ณ์์ ์ด๋ฆ์ ์๋ฏธ๋ฅผ ์ ๋๋ฌ๋ด๋๋ก ์์ * refactor: ๊ณตํต ๋ฒํผ์ ํ์ ๋ณ ์คํ์ผ์ ํจ์๋ก ๋ถ๋ฆฌ * style: api ํธ์ถ ํจ์๋ช ์ปจ๋ฒค์ ์ ๋ง๊ฒ ์์ * chore: ๋ถํ์ํ PropsWithChildren import ์ ๊ฑฐ --------- Co-authored-by: badahertz52 <[email protected]> * [FE] MSW๋ฅผ mock server๋ก ์ ํ (#95) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * style: eslint ์ ์ฉ์ ๋ฐ๋ฅธ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง import ์์ ์ ๋ฆฌ * refactor: formatDate๋ฅผ utils/date ํ์ผ๋ก ์ด๋ * design: theme์ colors,, fontSize ๋ณ๊ฒฝ ๋ฐ borderRadius ์ถ๊ฐ * feat: MultilineTextViewer ์ปดํฌ๋ํธ ์์ฑ - ๊ฐํ์ด ํฌํจ๋ string์ ๊ฐํ์ ์ ์ฉํด์ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ * feat: ๊นํ๋ธ ์ ์ฅ์ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ ์์ฑ * feat: ๋ฆฌ๋ทฐ์ ๊ด๋ จ๋ ๋ ์ง UI ์ปดํฌ๋ํธ ์์ฑ * featr: LockButton ์ญ์ LockToggle ์ถ๊ฐ * refactor: ํผ๊ทธ๋ง ๋์์ธ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ReviewDescription ๋ณ๊ฒฝ * feat: ReviewComment ์ปดํฌ๋ํธ ์์ฑ * refactor: ReviewViewSection -> ReviewSection ์ผ๋ก ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ๋ถํ์ํ ์ปดํฌ๋ํธ ์ญ์ : RevieAnswer , ReviewQuestion * refactor: DetailedReviewPage ๋ฆฌํฉํ ๋ง - ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ - ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ์ปดํฌ๋ํธ(DetailedReviewPage) ๋ฆฌํฉํ ๋ง - DetailedReviewPage ํด๋์ styles.ts ์ญ์ * refactor: review์ ๋ํ ํ์ ๋ณ๊ฒฝ * design : ReviewDate์ ํด๋ก ์คํ์ผ ์ ์ฉ * feat: KeywordSection ์ปดํฌ๋ํธ ์์ฑ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ํค์๋ ๋ถ๋ถ ์ปดํฌ๋ํธ ์์ฑ * feat: ReviewSectionHeader ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ์์ ๋ฐ๋ณต๋๋ ์ง๋ฌธ,ํค์๋ ํค๋๋ถ๋ถ์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌ * design : ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ width ๋ณ๊ฒฝ * refactor: DetailedReview์ ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํฐ ๋ณ๊ฒฝ - KeywordSection ์ ์ฉ * design : formWidth๋ฅผ theme์ ์ถ๊ฐ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ/๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ์ ์ฉ * fix: Layout์์ ๊ฐ๋ก ์คํฌ๋กค ์๊ธฐ๋ ์ค๋ฅ ์์ - 100vw๋ ์คํฌ๋กค์ ํฌํจํ ๋ทฐํฌํธ ๋๋น๋ผ์ 100%์ผ๋ก ์์ * feat: ๋ฆฌ๋ทฐ ์ํ์ด์ง router์ ๋ผ์ฐํฐ ํ๋ผ๋ฏธํฐ ์ ์ฉ ๋ฐ ๊ด๋ จ ์ค์ ๋ณ๊ฒฝ - ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์ํด ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง id๋ฅผ sidebar์ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ๋ฉ๋ด link์ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธํ์ด์ง(DetailedReviewPage)์ api ํธ๋ค๋ฌ ์์ * docs: ๋ณ์๋ช ๋ณ๊ฒฝ (isLock -> isPublic) * refactor: ๊นํ ์ ์ฅ์ ๋ก๊ณ ์ฃผ์ ๋ณ์๋ช ๋ณ๊ฒฝ - projectImgSrc -> thumbnailUrl * ci: msw ๊ด๋ จ ํจํค์ง ์ค์น * ci: msw ๊ด๋ จ ์ค์ ํ์ผ ์ถ๊ฐ - ๋ธ๋ผ์ฐ์ ํ๊ฒฝ, node ํ๊ฒฝ์์ msw๋ก ๋ชฉ์๋ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ด๋ จ ํ์ผ ์ถ๊ฐ * feat: mock ํธ๋ค๋ฌ ์ถ๊ฐ ๋ฐ ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง ๋ชฉ ๋ฐ์ดํฐ ์ถ๊ฐ * feat: root์์ ๋ชฉ์๋ฒ ์ฌ์ฉํ ์ ์๋๋กํจ * refactor: endpoint ์์ - env ์์ ์๋ฒ ์ฃผ์ ๋์ ์ฌ๋์ ๋ฃ๋ ๊ฒ์ผ๋ก ํต์ผ * feat: ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง(detailedReviewPage)์ ๋ชฉ์๋ฒ ์ฐ๊ฒฐ ๋ฐ ๊ด๋ จ ์ฝ๋ ์์ - ์ํ๋ช ๋ณ๊ฒฝ: detailReview -> detailedReview - detailedReview ํ์ ์ null ์ถ๊ฐ ๋ฐ ๊ทธ์ ๋ฐ๋ฅธ ์ค๋ฅ ํธ๋ค๋ง ์ถ๊ฐ - deadline์ string ํ์ ์ผ๋ก response๋ก ์ ๋ฌ๋์ด์ new Date๋ก ๊ฐ์ธ์ props๋ก ์ ๋ฌ * docs: indexhtml์ title ๋ณ๊ฒฝ * style: apis/review.ts ์ import ๊ด๋ จ eslint rule ์ ์ฉ์ ๋ฐ๋ฅธ ์์ * fix: ts์์ process ์ฝ์ง ๋ชปํ๋ ์ค๋ฅ ์์ * fix: webpack dev server script ๋ณต์ * [FE] ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง : url router ์ฐ๋, ๋ณ๊ฒฝ๋ ๋์์ธ ๋ฐ์ ๋ฐ ์๋ฒ์์ api๋ฅผ ์ฐ๋ (#91) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * style: eslint ์ ์ฉ์ ๋ฐ๋ฅธ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง import ์์ ์ ๋ฆฌ * refactor: formatDate๋ฅผ utils/date ํ์ผ๋ก ์ด๋ * design: theme์ colors,, fontSize ๋ณ๊ฒฝ ๋ฐ borderRadius ์ถ๊ฐ * feat: MultilineTextViewer ์ปดํฌ๋ํธ ์์ฑ - ๊ฐํ์ด ํฌํจ๋ string์ ๊ฐํ์ ์ ์ฉํด์ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ * feat: ๊นํ๋ธ ์ ์ฅ์ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ ์์ฑ * feat: ๋ฆฌ๋ทฐ์ ๊ด๋ จ๋ ๋ ์ง UI ์ปดํฌ๋ํธ ์์ฑ * featr: LockButton ์ญ์ LockToggle ์ถ๊ฐ * refactor: ํผ๊ทธ๋ง ๋์์ธ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ReviewDescription ๋ณ๊ฒฝ * feat: ReviewComment ์ปดํฌ๋ํธ ์์ฑ * refactor: ReviewViewSection -> ReviewSection ์ผ๋ก ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ๋ถํ์ํ ์ปดํฌ๋ํธ ์ญ์ : RevieAnswer , ReviewQuestion * refactor: DetailedReviewPage ๋ฆฌํฉํ ๋ง - ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ - ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ์ปดํฌ๋ํธ(DetailedReviewPage) ๋ฆฌํฉํ ๋ง - DetailedReviewPage ํด๋์ styles.ts ์ญ์ * refactor: review์ ๋ํ ํ์ ๋ณ๊ฒฝ * design : ReviewDate์ ํด๋ก ์คํ์ผ ์ ์ฉ * feat: KeywordSection ์ปดํฌ๋ํธ ์์ฑ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ํค์๋ ๋ถ๋ถ ์ปดํฌ๋ํธ ์์ฑ * feat: ReviewSectionHeader ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ์์ ๋ฐ๋ณต๋๋ ์ง๋ฌธ,ํค์๋ ํค๋๋ถ๋ถ์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌ * design : ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ width ๋ณ๊ฒฝ * refactor: DetailedReview์ ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํฐ ๋ณ๊ฒฝ - KeywordSection ์ ์ฉ * design : formWidth๋ฅผ theme์ ์ถ๊ฐ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ/๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ์ ์ฉ * fix: Layout์์ ๊ฐ๋ก ์คํฌ๋กค ์๊ธฐ๋ ์ค๋ฅ ์์ - 100vw๋ ์คํฌ๋กค์ ํฌํจํ ๋ทฐํฌํธ ๋๋น๋ผ์ 100%์ผ๋ก ์์ * feat: ๋ฆฌ๋ทฐ ์ํ์ด์ง router์ ๋ผ์ฐํฐ ํ๋ผ๋ฏธํฐ ์ ์ฉ ๋ฐ ๊ด๋ จ ์ค์ ๋ณ๊ฒฝ - ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์ํด ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง id๋ฅผ sidebar์ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ๋ฉ๋ด link์ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธํ์ด์ง(DetailedReviewPage)์ api ํธ๋ค๋ฌ ์์ * docs: ๋ณ์๋ช ๋ณ๊ฒฝ (isLock -> isPublic) * refactor: ๊นํ ์ ์ฅ์ ๋ก๊ณ ์ฃผ์ ๋ณ์๋ช ๋ณ๊ฒฝ - projectImgSrc -> thumbnailUrl * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง api ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง keyword ํ์ ๋ณ๊ฒฝ - api endpoint ๋ณ๊ฒฝ , router ๋ณ๊ฒฝ, sidebar ์์ธ๋ณด๊ธฐ ๊ฒฝ๋ก ๋ณ๊ฒฝ - useState์ ๋น ๊ฐ์ ๋ํ ํ์ ์ถ๋ก ์ฌ์ฉ * [BE] test: ๋๋ฉ์ธ ์ฐ๊ด๊ด๊ณ ์ฌ์ค์ ํ ํ ์คํธ ์์ฑ (#101) * test: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ํ ์คํธ ์์ฑ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ ์คํธ๋ฅผ `ReviewTest`๋ก ์ด๋ * test: ๋ฆฌ๋ทฐ์ด ์ค๋ณต ์ถ๊ฐ ํ ์คํธ * refactor: Test Fixture ์ฌ์ฉํ๋๋ก ์์ * refactor: ์์ธ ํด๋์ค๋ช ํต์ผ * style: ํ ์คํธ ๊ฐํ * refactor: ํ ์คํธ๋ช ๋ช ํํ๊ฒ ์์ * refactor: ํ์ ๋๋ฉ์ธ์์์ ๋น๊ต๋ฅผ GithubId๋ก ์งํํ๋๋ก ์์ * refactor: createdAt ์ฌ์ฉํ์ง ์๊ณ , deadline์ผ๋ก ์์ * refactor: ํ๋๋ช reviewerGithubIds๋ก ํต์ผ * test: ๋ฆฌ๋ทฐ์ด ์ค๋ณต ์์ฑ ๊ฒ์ฆ * refactor: reviewer/reviewee ํต์ผ * refactor: ๋ฆฌ๋ทฐ์ด-๋ฆฌ๋ทฐ์ด github id๋ฅผ ๋ช ์ * refactor: ํ ์คํธ์ ํ๋์ ๊ฒ์ฆ๋ง ์งํ๋๋๋ก ์์ * [FE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง ๊ธฐ๋ฅ ๊ตฌํ (#90) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * feat: DropDown ์ปดํฌ๋ํธ ๊ตฌํ - ์ฌ์ฉ์ ์ ํ์ ์ํ `DropDown` ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํ - `onChange` ์ด๋ฒคํธ ํธ๋ค๋ฌ์ `options` ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ์ต์ ์ ๋์ ์ผ๋ก ํ์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: svg ์์ด์ฝ ํฌ๊ธฐ ์์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * design: Topbar UI ์์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * design: ๋ฒํผ, ๊ฒ์์ฐฝ UI ์์ ํ export Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * feat: ReviewPreviewCard ์ปดํฌ๋ํธ ๊ตฌํ - ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋ ์ปดํฌ๋ํธ ๊ตฌํ - ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ด๋ฆ, ์์ฑ์ผ, ๋ฆฌ๋ทฐ ๋ด์ฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ํค์๋, ๊ณต๊ฐ ์ฌ๋ถ๋ฅผ ํ์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: ReviewPreview ์ธํฐํ์ด์ค ์ถ๊ฐ - ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ `ReviewPreview` ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํ์ต๋๋ค. Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * feat: SearchSection ์ปดํฌ๋ํธ ๊ตฌํ - ๊ฒ์ ์ ๋ ฅ์ฐฝ, ๊ฒ์ ๋ฒํผ, ๋๋กญ๋ค์ด์ ํฌํจํ์ฌ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * feat: ReviewPreviewListPage ๊ตฌํ ๋ฐ ๋ชจ์ ๋ฐ์ดํฐ ์ถ๊ฐ - `ReviewPreviewListPage` ์ปดํฌ๋ํธ ๊ตฌํ - `SearchSection`์ ํฌํจํ์ฌ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํ - `ReviewPreviewCard`๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ํ์ - ๋ชจ์ ๋ฐ์ดํฐ(`mockReviewPreviews`) ์ถ๊ฐ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: import ์ค๋ณต ๋ฐ ์์ ์ ๋ฆฌ, ReviewPreviewListPage ๋ผ์ฐํธ ์ถ๊ฐ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: ์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ๊ฐ์ธ๊ธฐ ๋๋ฌธ์ Container๋ก ๋ณ๊ฒฝ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ๊ฐ์ ธ์ค๊ธฐ ์ํด getReviewListApi ํจ์ ์ถ๊ฐ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * refactor: ์์ธ ๋ฆฌ๋ทฐ ๋ถ๋ฌ์ค๊ธฐ api ์๋ํฌ์ธํธ ์์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * refactor: ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง API ์ฐ๋ ๋ถ๋ถ ์์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: badahertz52 <[email protected]> Co-authored-by: ImxYJL <[email protected]> Co-authored-by: Fe <[email protected]> * [BE] feat: ๋ฆฌ๋ทฐ ์์ฑ API ๊ตฌํ (#102) * refactor: ๋ฆฌ๋ทฐ ์์ฒญ dto ์์ * refactor: ๋ฆฌ๋ทฐ ์ฝํ ์ธ ์์ฑ ์, ๋ฆฌ๋ทฐ์ ์์ ์ ์ถ๊ฐํ๋๋ก ๋ณ๊ฒฝ * feat: QuestionRepository ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ์์ฑ ๊ธฐ๋ฅ ์ถ๊ฐ * test: ๋ฆฌ๋ทฐ ์์ฑ ํ ์คํธ ์ถ๊ฐ * refactor: ReviewGroup ์์ฑ ์, GithubIdReviewerGroup๋ ๊ฐ์ด ์ ์ฅ๋๋๋ก ๋ณ๊ฒฝ * refactor: GithubId equals ๋ฐ hashcode ์ฌ์ ์ * refactor: review ์์ฑ ์, reviewGroup์ด null์ด ์๋๋๋ก ๋ณ๊ฒฝ * refactor: EqualsAndHashCode์ id ๋ช ์ * refactor: reviewee๋ฅผ reviewerGroup ํตํด์ ๋ฐ์์ค๋๋ก ๋ณ๊ฒฝ * refactor: ํ๋ผ๋ฏธํฐ long ํ์ ์ผ๋ก ๋ณ๊ฒฝ * test: ์ฌ์ฉํ์ง ์๋ ๋ณ์ ์ ๊ฑฐ * test: ํ๋ผ๋ฏธํฐ๋ณ๋ก ๊ฐํํ๋๋ก ๋ณ๊ฒฝ * refactor: ReviewerGroupGithubIds์ reviewerGithubIds๋ฅผ CascadeType.PERSIST๋ก ๋ณ๊ฒฝ * chore: ๋ค๋ฅธ ์์ ์์ ์งํ๋ ์ฌํญ์ผ๋ก ์ฌ์ฉํ์ง ์๋ ํ ์คํธ ์ญ์ * [FE] Github Actions๋ก CI ๊ตฌ์ถ (#96) * ci: CI๋ฅผ ์ํ yml ํ์ผ ์์ฑ * ci: yarn.lock ๊ฒฝ๋ก ์ถ๊ฐ * ci: working-directory ์ถ๊ฐ * cI: ๋์ ํ ์คํธ๋ฅผ ์ํด push ๋ธ๋์น ๊ฒฝ๋ก ์กฐ๊ฑด์์ frontend ์์ ์ ๊ฑฐ * ci: ํ ์คํธ๋ฅผ ์ํด ํ์ฌ ๋ธ๋์น๋ ์กฐ๊ฑด์ ์ถ๊ฐ * ci: package์ test ๋ช ๋ น์ด ์ถ๊ฐ * ci: yarn.lock ํ์ผ ์ ๋ฐ์ดํธ * ci: ํ ์คํธ ํ์ผ ํ์ ์์ * chore: ํ์์๋ ํ์ผ ์ญ์ * chore: svg ํ์ผ์ ๋๋ฌธ์๋ก importํ ๊ฒ๋ค ์๋ฌธ์๋ก ์์ * ci: ์นํฉ env ์ค์ ์ ๋ฐ์ดํธ * ci: process.env ์ฌ์ฉ์ ์ํ ํ์ ์ค์ * ci: env ์นํฉ ์ค์ ๊ฒฝ๋ก๋ฅผ ์ ๋ ๊ฒฝ๋ก๋ก ๋ณ๊ฒฝ * ci: env ์นํฉ ์ค์ ๊ฒฝ๋ก ์์ * ci: env ์ ๋๊ฒฝ๋ก ์์ * ci: ์ ๋๊ฒฝ๋ก ์์ 2 * ci: ์ฝ๊ธฐ ๊ถํ์ ๋ช ์์ ์ผ๋ก ์ฃผ๊ณ ํ ์คํธ * ci: dist ํ์ผ ํ ์คํธ * ci: CI ํ๊ฒฝ์์๋ env ํ์ผ ์์ฑ * ci: ๋ฐฐํฌ ์ ์ ๋์ ํ์ธ์ ์ํ github pages ์์ ๋ฐฐํฌ ์ค์ * ci: ์์ ๋ฐฐํฌ ์ฝ๋ ์ญ์ * ci: develop ๋ธ๋์น๋ก frontend ์ดํ ๊ฒฝ๋ก์์ PR์ด ์ฌ๋ผ์ฌ ๋ CI๊ฐ ์คํ๋๋๋ก ์์ * ci: node ์ค์น ์๋ฌ ํด๊ฒฐ * [BE] feat: ๋ฆฌ๋ทฐ์ ํ์ํ ์ ๋ณด ์กฐํ ๊ธฐ๋ฅ ์ถ๊ฐ (#103) * test: QuestionTestFixture ์์ฑ * feat: ๋ชจ๋ ๋ฆฌ๋ทฐ ๋ฌธํญ์ ์กฐํํ๋ ๊ธฐ๋ฅ ๊ตฌํ * feat: ๋ชจ๋ ํค์๋๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ ๊ตฌํ * test: ReviewerGroupFixture ์์ฑ * feat: ๋ฆฌ๋ทฐ ์์ฑ ์ ํ์ํ ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ ๋ณด๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ ๊ตฌํ * feat: ๋ฆฌ๋ทฐ ์์ฑ ์ ํ์ํ ์ ๋ณด๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ ๊ตฌํ * refactor: @ServiceTest ์ ์ฉ * refactor: swagger ์ ์ฉ * refactor: ํ๋๋ช ๋ณ๊ฒฝ * style: ๊ฐํ ์ถ๊ฐ * refactor: ๋ ์ง ํ์ ๋ณ๊ฒฝ * test: import๋ฌธ ์ ๊ฑฐ * refactor: ReviewCreationResponse ํจํค์ง ๋ณ๊ฒฝ * refactor: readOnly ํธ๋์ญ์ ์ ์ฉ * fix: ๋ฆฌ๋ทฐ์ด ์ค๋ณต ๊ฒ์ฆ ์์ ์ ๊ฑฐ --------- Co-authored-by: donghoony <[email protected]> * [FE] ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์์ MSW๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ mocking (#111) * chore: ์ค๋ณต๋ ์ธํฐํ์ด์ค ์ ๊ฑฐ * feat: MSW ํธ๋ค๋ฌ ๋ฐ mock data ์ถ๊ฐ * chore: ๋ฆฌ๋ทฐ ์ฐ๊ธฐ ํ์ด์ง ๋ฐ์ดํฐ endpoint ์์ * feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ msw๋ฅผ ์ ์ฉํ์ฌ ์๋ฒ mocking * merge * [FE] ๊ณตํต ์ปดํฌ๋ํธ์ธ ๋ชจ๋ฌ์ ๋ง๋ ๋ค. (#110) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * style: eslint ์ ์ฉ์ ๋ฐ๋ฅธ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง import ์์ ์ ๋ฆฌ * refactor: formatDate๋ฅผ utils/date ํ์ผ๋ก ์ด๋ * design: theme์ colors,, fontSize ๋ณ๊ฒฝ ๋ฐ borderRadius ์ถ๊ฐ * feat: MultilineTextViewer ์ปดํฌ๋ํธ ์์ฑ - ๊ฐํ์ด ํฌํจ๋ string์ ๊ฐํ์ ์ ์ฉํด์ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ * feat: ๊นํ๋ธ ์ ์ฅ์ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ ์์ฑ * feat: ๋ฆฌ๋ทฐ์ ๊ด๋ จ๋ ๋ ์ง UI ์ปดํฌ๋ํธ ์์ฑ * featr: LockButton ์ญ์ LockToggle ์ถ๊ฐ * refactor: ํผ๊ทธ๋ง ๋์์ธ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ReviewDescription ๋ณ๊ฒฝ * feat: ReviewComment ์ปดํฌ๋ํธ ์์ฑ * refactor: ReviewViewSection -> ReviewSection ์ผ๋ก ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ๋ถํ์ํ ์ปดํฌ๋ํธ ์ญ์ : RevieAnswer , ReviewQuestion * refactor: DetailedReviewPage ๋ฆฌํฉํ ๋ง - ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ - ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ์ปดํฌ๋ํธ(DetailedReviewPage) ๋ฆฌํฉํ ๋ง - DetailedReviewPage ํด๋์ styles.ts ์ญ์ * refactor: review์ ๋ํ ํ์ ๋ณ๊ฒฝ * design : ReviewDate์ ํด๋ก ์คํ์ผ ์ ์ฉ * feat: KeywordSection ์ปดํฌ๋ํธ ์์ฑ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ํค์๋ ๋ถ๋ถ ์ปดํฌ๋ํธ ์์ฑ * feat: ReviewSectionHeader ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ์์ ๋ฐ๋ณต๋๋ ์ง๋ฌธ,ํค์๋ ํค๋๋ถ๋ถ์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌ * design : ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ width ๋ณ๊ฒฝ * refactor: DetailedReview์ ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํฐ ๋ณ๊ฒฝ - KeywordSection ์ ์ฉ * design : formWidth๋ฅผ theme์ ์ถ๊ฐ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ/๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ์ ์ฉ * fix: Layout์์ ๊ฐ๋ก ์คํฌ๋กค ์๊ธฐ๋ ์ค๋ฅ ์์ - 100vw๋ ์คํฌ๋กค์ ํฌํจํ ๋ทฐํฌํธ ๋๋น๋ผ์ 100%์ผ๋ก ์์ * feat: ๋ฆฌ๋ทฐ ์ํ์ด์ง router์ ๋ผ์ฐํฐ ํ๋ผ๋ฏธํฐ ์ ์ฉ ๋ฐ ๊ด๋ จ ์ค์ ๋ณ๊ฒฝ - ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์ํด ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง id๋ฅผ sidebar์ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ๋ฉ๋ด link์ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธํ์ด์ง(DetailedReviewPage)์ api ํธ๋ค๋ฌ ์์ * docs: ๋ณ์๋ช ๋ณ๊ฒฝ (isLock -> isPublic) * refactor: ๊นํ ์ ์ฅ์ ๋ก๊ณ ์ฃผ์ ๋ณ์๋ช ๋ณ๊ฒฝ - projectImgSrc -> thumbnailUrl * ci: msw ๊ด๋ จ ํจํค์ง ์ค์น * ci: msw ๊ด๋ จ ์ค์ ํ์ผ ์ถ๊ฐ - ๋ธ๋ผ์ฐ์ ํ๊ฒฝ, node ํ๊ฒฝ์์ msw๋ก ๋ชฉ์๋ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ด๋ จ ํ์ผ ์ถ๊ฐ * feat: mock ํธ๋ค๋ฌ ์ถ๊ฐ ๋ฐ ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง ๋ชฉ ๋ฐ์ดํฐ ์ถ๊ฐ * feat: root์์ ๋ชฉ์๋ฒ ์ฌ์ฉํ ์ ์๋๋กํจ * refactor: endpoint ์์ - env ์์ ์๋ฒ ์ฃผ์ ๋์ ์ฌ๋์ ๋ฃ๋ ๊ฒ์ผ๋ก ํต์ผ * feat: ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง(detailedReviewPage)์ ๋ชฉ์๋ฒ ์ฐ๊ฒฐ ๋ฐ ๊ด๋ จ ์ฝ๋ ์์ - ์ํ๋ช ๋ณ๊ฒฝ: detailReview -> detailedReview - detailedReview ํ์ ์ null ์ถ๊ฐ ๋ฐ ๊ทธ์ ๋ฐ๋ฅธ ์ค๋ฅ ํธ๋ค๋ง ์ถ๊ฐ - deadline์ string ํ์ ์ผ๋ก response๋ก ์ ๋ฌ๋์ด์ new Date๋ก ๊ฐ์ธ์ props๋ก ์ ๋ฌ * docs: indexhtml์ title ๋ณ๊ฒฝ * style: apis/review.ts ์ import ๊ด๋ จ eslint rule ์ ์ฉ์ ๋ฐ๋ฅธ ์์ * fix: ts์์ process ์ฝ์ง ๋ชปํ๋ ์ค๋ฅ ์์ * fix: webpack dev server script ๋ณต์ * feat: ModalPortal ์ ์ฑ * feat: SideModal ์ปดํฌ๋ํธ, useSide ์ ์ฑ ๋ฐ Sidebar์ ์ ์ฉ * feat: ModalBackground ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ ์ฉ * fix: ๋ชจ๋ฌ ์ด๋ฆด ๋ ์คํฌ๋กค๋ฐ ๋ง๋ ๊ธฐ๋ฅ ์ค๋ฅ ์์ * design : ModalPortal ์ฌ์ด์ฆ ๋จ์ ๋ณ๊ฒฝ (% -> vw, vh) * feat: Button ์ปดํฌ๋ํธ๊ฐ button ์์ฑ์ props๋ก ๋ฐ์ ์ ์๋๋ก ์์ * feat: ConfirmModal ์์ฑ * refactor: index.tsx์์ ๋ชจ๋ฌ์ ๊บผ๋ผ ์ ์๋๋ก ๋ฆฌํฉํ ๋ง * refactor: PropsWithChildren ์์ - PropsWithChildren๋ฅผ import ํ์ง ์๊ณ React์์ ๋ฐ๋ก ์ธ ์ ์๋๋ก React.PropsWithChildren๋ก ์์ * [FE] msw๊ด๋ จ env ์ค๋ฅ ํด๊ฒฐ (#114) * chore: fe/feat/105-review-writing-msw ์ endpoint ๊ด๋ จ ๋ณ๊ฒฝ์ฌํญ ๋ฐ์ * fix: NODE_ENV ๊ด๋ จ ์ค๋ฅ ์์ - ์ค๋ฅ : env ํ์ผ์ NODE_ENV๊ฐ ์์์๋ ์ด๋ฅผ ์ธ์ํ๋ ์ค๋ฅ ๋ฐ์ - ์์ธ: ํ๋ ์์ํฌ์์ NODE_ENV๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ๋ ์๋ค๊ณ ํจ - ํด๊ฒฐ: NODE_ENV๋ฅผ ์ญ์ ํ๊ณ MSW๋ฅผ ์ฌ์ฉ * [BE] feat: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ (#109) * refactor: contains ์๋์ ์ํ EqualsAndHashcode ์ถ๊ฐ * fix: lazyInitialization ํด๊ฒฐ * feat: ์ง๋ฌธ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ์๋ต ์์ฑ * refactor: ๋ฆฌ๋ทฐ ํญ๋ชฉ๊ณผ ์ง๋ฌธ์ ์ฐ๊ด๊ด๊ณ ๋ณ๊ฒฝ ๋ฐ ๋ต๋ณ ์ต๋ ๊ธ์์ DB์ ๋ฐ์ * refactor: ๋ฆฌ๋ทฐ์ ๋ฆฌ๋ทฐ๊ทธ๋ฃน ์ด๊ธฐํ ๋ถ๋ถ ์ถ๊ฐ * feat: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ * feat: ๋ฐ์ ๋ฆฌ๋ทฐ๊ฐ ์์ ๋์ ์๋ต ์ถ๊ฐ * refactor: dto ์ค๋ช ์ถ๊ฐ * refactor: dto ์ค๋ช ์์ * refactor: ์ธ์ ํ์ ์์ , ๊ฐํ ์์ * refactor: transactional ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ์กฐํํ ๋Page๊ฐ์ฒด ๋ง๊ณ List๋ก ๋ฐ์์ค๋๋ก ์์ * refactor: ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ง๋๋ ๊ธฐ๋ฅ ๋๋ฉ์ธ ์์ผ๋ก ์ด๋ * test: ํ ์คํธ ์ฝ๋ ๊ฐ์ - ๋ณ์๋ช ์์ , save ์ฌ๋ฌ๊ฐ ๋์ saveAll ์ฌ์ฉ ๋ฑ * refactor: ๋ง์ง๋ง์ผ๋ก ๋ณธ ๋ฆฌ๋ทฐID๊ฐ ์๋ ๋ก์ง์ ๋ํด ์์ - lastViewedReviewId๋ฅผ ์ ๋ ฅํ์ง ์์ผ๋ฉด 999๊ฐ์ด ์ด์ํ๊ฒ ํฐ ์๋ฅผ ๋ฃ์ด์ฃผ๋๊ฒ ์๋๋ผ, ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฃ์ด์ฃผ๋๋ก ์์ * docs: ์ค์จ๊ฑฐ ๋ฐ์ฝ๋ ์ด์ ์ ์ฉ * refactor: lastReviewId๊ฐ null ์ด์ด๋ ๊ฐ์ฅ ์ต์ ๋ฆฌ๋ทฐ๋ฅผ ์ฐพ์ ์ ์๋๋ก ์์ * refactor: eqaulsAndHashCode ์ฌ์ ์ * refactor: eqaulsAndHashCode ์ฌ์ฌ์ ์ * refactor: API Docs ๋ฐ์ --------- Co-authored-by: donghoony <[email protected]> * fix: ์๋ชป ์ ์๋ endpoint ์์ (#118) * [FE] ๋จธ์ง๋ก ์ธํด ์ฌ๋ผ์ง ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ณ๊ฒฝ ์ฌํญ ๋ณต๊ตฌ ๋ฐ ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ (#121) * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ ๋ฐ Keyword ํ์ ๋ณต๊ตฌ * fix: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ path ๋ณต๊ตฌ * fix: ์ฌ์ด๋๋ฐ์ ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๊ฒฝ๋ก ๋ณต๊ตฌ * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํฐ ๋ณ๊ฒฝ * fix: DetailedReviewPage ๋ณต๊ตฌ ๋ฐ ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ * [BE] ๋๋ฏธ ๋ฐ์ดํฐ ์ถ๊ฐ, local ํ๋กํ์ผ ๊ด๋ฆฌ (#123) * refactor: Unauthorized ์์ธ ์ฒ๋ฆฌ * chore: ๋๋ฏธ ๋ฐ์ดํฐ ์ถ๊ฐ ๋ฐ Profile ์ฒ๋ฆฌ * chore: ํ ์คํธ yml ์์ฑ * fix: Long notblank -> notnull (#126) * [FE] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์์ msw๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจํน (#124) * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์์ msw๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจํน Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: ์๋ํฌ์ธํธ baseurl์ '/' ์ถ๊ฐ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: badahertz52 <[email protected]> Co-authored-by: ImxYJL <[email protected]> Co-authored-by: Fe <[email protected]> * fix: ๋ฆฌ๋ทฐ ๋ชฉ๋ก DTO ํ๋ ์์ (#129) * [FE] msw ๋ชจํน์ ์ํ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ ํ๋์ฝ๋ฉ (#130) * refactor: msw ๋ชจํน์ ์ํ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ ํ๋์ฝ๋ฉ Co-Authored-By: ImxYJL <[email protected]> * refactor: 2์ฐจ ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์ํ ๋ฉค๋ฒ ์์ด๋ ์์ํ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: ๋ถํ์ํ ์ฝ์ ๋ก๊ทธ ์ ๊ฑฐ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: ImxYJL <[email protected]> Co-authored-by: badahertz52 <[email protected]> Co-authored-by: Fe <[email protected]> * [FE] endPoint ์ค๋ฅ์ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ด๋ ์์ (#132) * fix: endpoint ์ค๋ฅ ์์ * fix: ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ ๋ฐ์ดํฐ ๋ฐ์ ๋์ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ด๋๋ฅผ 1๋ก ์์ * [BE] fix: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์์ฑ ๊ธฐ๋ฅ ์์ (#134) * fix: src/index.tsx์์ enableMocking ์ ๊ฑฐ (#136) * [FE] Children ์์ฑ์ด ํ์์ธ ํ์ ์ ์ (#147) * feat: children ์์ฑ์ด ํ์์ธ EssentialPropsWithChildren ํ์ ์์ฑ * chore: types ํด๋์ index ํ์ผ์ ๋๋ฝ๋๋ export๋ค ์ถ๊ฐ ๋ฐ ๊ทธ์ ๋ฐ๋ฅธ types import๋ฌธ ๊ฒฝ๋ก ์์ * [FE] ์ฌ์ด๋๋ฐ ๋ฐ ๋ชจ๋ฌ ์ฌ์ฉ์ฑ ๊ฐ์ (#139) * refactor: ์ฌ์ด๋๋ฐ๋ฅผ ๋ซ๋ ์ ๋๋ฉ์ด์ ์ ๊ฑฐ * refactor: ์ฌ์ด๋๋ฐ๊ฐ ๋ ๋นจ๋ฆฌ ์ด๋ฆฌ๋๋ก ์์ * feat: ๋ชจ๋ฌ์ ๋ฐฐ๊ฒฝ ํด๋ฆญ ๋ฐ esc ํค๋ฅผ ๋๋ ์ ๋ ๋ชจ๋ฌ์ด ๋ซํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ * chore: hooks index์ useModalClose ์ถ๊ฐ * feat: ์ฌ์ด๋๋ฐ ๋ฆฌ์คํธ ์์ดํ ์ ํด๋ฆญํ์ ๋ ์ฌ์ด๋๋ฐ๊ฐ ๋ซํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: useModalClose ํ ์ ๋ชจ๋ ๋ชจ๋ฌ์ ๊ณตํต ์ต์์ ์ปดํฌ๋ํธ์ธ ModalBackground์์ ์ฒ๋ฆฌํ๋๋ก ์์ * refactor: ModalBackground๋ฅผ ํด๋ฆญํ์ ๋ ๋ชจ๋ฌ์ด ๋ซํ๊ฒ ํ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ document ๋์ Background์ ์ถ๊ฐ * fix: esc๋ฅผ ์ฌ์ฉํด ๋ชจ๋ฌ์ ๋ซ์์ ๋ ํ๋ฒ๊ฑฐ ๋ฒํผ์ ํฌ์ปค์ค๊ฐ ์๊ธฐ๋ ๋ฌธ์ ํด๊ฒฐ ๋ฐ ๋ณ์๋ช ๋์๋ฌธ์ ์์ * refactor: useEffect ๋ด๋ถ ํจ์๋ค์ ํ ์ธ๋ถ๋ก ์ด๋ ๋ฐ ์ฃผ์ ์ถ๊ฐ * [FE] ์กด์ฌํ์ง ์๋ element์ ๋ํ ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋ ์ ํธ๋ฆฌํฐ ํจ์ ์ ์ (#150) * feat: ์กด์ฌํ์ง ์๋ element์ ๋ํ ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋ ํ ์ ์ * chore: hooks ํด๋ index์ useExistentElement ์ถ๊ฐ * refactor: useExistentElement ํ ์ ๋์ฑ ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์์ * refactor: ์กด์ฌํ์ง ์๋ ์์๋ฅผ ํ๋ณํ๋ ๋์์ ์ปค์คํ ํ ๋์ ์ ํธ๋ฆฌํฐ ํจ์๋ก ์ ์ * chore: ๊ธฐ์กด์ ์กด์ฌํ์ง ์๋ ์์๋ฅผ ํ์งํ๋ ์ปค์คํ ํ ์ญ์ * [FE] HTTP ์์ฒญ ์ค๋ฅ ์ status code๋ณ ์ค๋ฅ ์ํฉ์ ๋์ํ๋ ํจ์ ์์ฑ (#151) * feat: api ์๋ฌ ์ ํ์ํ ๋ฉ์ธ์ง ์์ฑ ํจ์ ์ถ๊ฐ * refactor: api/review.ts์ api ์ค๋ฅ ์ ๋ฉ์ธ์ง๋ฅผ ๋ฐํํ๋ createApiErrorMessage ํจ์ ์ ์ฉ * docs: http ์์ฒญ ์คํจ ๋ฉ์ธ์ง ์์ * fix: ์คํ ์์ * [FE] ํ์ด์ง ์๋จ ์ด๋ ๋ฒํผ ๊ตฌํ (#153) * feat: top button ๋ก์ง ํ ์ผ๋ก ๊ตฌํ * design: top button UI ๊ตฌํ * chore: ๊ฐ ํ์ด์ง๋ง๋ค top button์ด ๋ณด์ฌ์ง๋๋ก ์ค์ * chore: ์ปดํฌ๋ํธ default๋ก exportํ๋๋ก ์ค์ * refactor: handler๋ฅผ useEffect ์ธ๋ถ๋ก ๋ถ๋ฆฌ * chore: svg import ์ปจ๋ฒค์ ์ ๋ง์ถ์ด ์ด๋ฆ ์์ * [FE] feat: ์๋ฌ, ๋ก๋ฉ ํ์ด์ง ๊ตฌํ ๋ฐ ์ ์ฉ (#155) * feat: ๋ฒํผ ์ปดํฌ๋ํธ์ ์์ด์ฝ์ ์ ํ์ ์ผ๋ก ์ถ๊ฐํ ์ ์๋๋ก ๋ณ๊ฒฝ - `icon` prop์ ํตํด ๋ฒํผ์ ์์ด์ฝ์ ์ถ๊ฐํ ์ ์๋๋ก ๋ณ๊ฒฝ * feat: ์๋ฌ ํ์ด์ง๋ฅผ ์ํ ErrorSection ์ปดํฌ๋ํธ ๊ตฌํ - ์๋ฌ ๋ก๊ณ , ๋ฉ์์ง, ์๋ก๊ณ ์นจ ๋ฐ ํ ์ด๋ ๋ฒํผ ์ ๊ณต * feat: ๋ผ์ฐํฐ ์ค์ ์์ `errorElement`์ `ErrorPage` ์ปดํฌ๋ํธ๋ฅผ ์ถ๊ฐ * feat: ๋ฒํผ ํด๋ฆญ ์ ์๋ก๊ณ ์นจ ๋ฐ ํ ์ด๋ ๊ธฐ๋ฅ ์ถ๊ฐ * feat: LoadingBar ์ปดํฌ๋ํธ ๊ตฌํ * feat: ๋ก๋ฉ ํ์ด์ง ์ถ๊ฐ ๋ฐ ์ ์ฉ - ๋ก๋ฉ ๋ฉ์์ง ์ถ๊ฐ - ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง, ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง, ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ๋ก๋ฉ ํ์ด์ง ์ ์ฉ * refactor: buttons ๋ฐฐ์ด์ ํตํด ๋ฒํผ ์์ฑ * refactor: ์ฝ๋์ปจ๋ฒค์ ์ ๋ง๊ฒ ์ฝ๋ ์์ ๋ฐ imageDescription์ ๋ฒํผ props์ ์ถ๊ฐ * refactor: boolean ํ์ ์ถ๋ก ์ ๊ฑฐ * design: ์๋ฌ ์ปดํฌ๋ํธ ํ๋ฉด ๊ฐ์ด๋ฐ ๋ฐฐ์น * design: ๋ก๋ฉ ์ปดํฌ๋ํธ ํ๋ฉด ๊ฐ์ด๋ฐ ๋ฐฐ์น * [BE] refactor: ๋๋ฉ์ธ ์ฐ๊ด ๊ด๊ณ ์ฌ์ ์ (#156) * refactor: ๋๋ฉ์ธ ์ฐ๊ด๊ด๊ณ ์ฌ์ ์ ๋ฐ ์ฌ์ฉํ์ง ์๋ ๋๋ฉ์ธ ์ญ์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * test: ์ฌ์ฉํ์ง ์๋ ํ ์คํธ ์ญ์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * fix: ์์ฝ์ด ์ฌ์ฉํ์ง ์๋๋ก ์์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: Review ๋๋ฉ์ธ์์ reviewee ํ๋ ์ ๊ฑฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์ ์ฅ ๊ธฐ๋ฅ ๊ตฌํ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ํค์๋ ์ ์ฅ ๊ธฐ๋ฅ ๊ตฌํ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์์ฒญ ๊ฐ์ฒด ๊ตฌํ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * test: ๋ฆฌ๋ทฐ, ๋ฆฌ๋ทฐ ๋ด์ฉ ๋๋ฉ์ธ ํ ์คํธ ์ถ๊ฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์ ์ง๋ฌธ ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * fix: Review์ reviewGroupId ์ปฌ๋ผ๋ช ์์ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์, ํค์๋ ๊ฒ์ฆ์ ๊ฐ์ฒด ๋ถ๋ฆฌ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์, ์ง๋ฌธ ๊ฒ์ฆ์ ๊ฐ์ฒด ๋ถ๋ฆฌ * style: ์ฝ๋ ์ฌ์ ๋ ฌ * test: ๋ฆฌ๋ทฐ ์์ฑ ๊ฒ์ฆ ํ ์คํธ ์ถ๊ฐ * refactor: ์ฌ์ฉํ์ง ์๋ ํด๋์ค ์ญ์ * refactor: keyword ๊ด๋ จ ์ฌ์ฉํ์ง ์๋ ํด๋์ค ์ญ์ * refactor: review ๊ด๋ จ ์ฌ์ฉํ์ง ์๋ ํด๋์ค ์ญ์ * refactor: ๋ฐ์ดํฐ ์ด๊ธฐํ ๊ฐ์ฒด ์์ * test: ์ฌ์ฉํ์ง ์๋ ํ ์คํธ ์ญ์ * refactor: ์์ธ ๋ฉ์ธ์ง ๋งํฌ ํต์ผ * refactor: ์ฌ์ฉํ์ง ์๋ ์์ธ ์ ๊ฑฐ * refactor: ์์ธ ํด๋์ค ํจํค์ง ๋ณ๊ฒฝ * refactor: NOT NULL ์ ์ฝ์กฐ๊ฑด ์ถ๊ฐ * refactor: ํ ์คํธ์์๋ง ์ฌ์ฉ๋๋ ํจ์ ์ ๊ฑฐ * refactor: ํ ์คํธ ์คํ ์ ๋ฐ์ํ๋ LazyInitializationException ํด๊ฒฐ * refactor: ํค์๋ ๊ฒ์ฆ ํจ์ ์์ ๋ณ๊ฒฝ * chore: ํ ์คํธ ์ฝ๋ ์ปจ๋ฒค์ ํต์ผ * refactor: reviewRequestCode ๊ฒ์ฆ ๋ก์ง ์ด๋ * refactor: ํ๋์ธ questionRepository๋ฅผ ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ์ด, ํ๋ก์ ํธ ์ด๋ฆ ๊ธธ์ด ๊ฒ์ฆ ํจ์ ๋ถ๋ฆฌ * test: ๋ฆฌ๋ทฐ ์ ์ฅ ์ reviewKeywor ์ ์ฅ ๊ฒ์ฆ ์ถ๊ฐ --------- Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> * [All] infra: ๋์ค์ฝ๋ ์นํ ์ฌ์ฉํด PR ์์ฑ/์ฝ๋ฉํธ ์ ๋ฉ์ (#169) * feat: PR Request ์์ฑ / Comment ์ ๋์ค์ฝ๋ ๋ฉ์ * fix: Case-sensitive ID๋ก ํด๊ฒฐ, ALL webhook ์ถ๊ฐ * fix: remove whitespace * chore: rename workflow * fix: fix shell script * fix: step statement * fix: remove trailing whitespace after equals sign * [BE] feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ฑ API ๊ตฌํ (#163) * feat: ๋๋คํ ๋ฌธ์์ด ์์ฑ๊ธฐ ๊ตฌํ Co-authored-by: donghoony <[email protected]> * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ฑ ์์ฒญ, ์๋ต ํ์ Co-authored-by: donghoony <[email protected]> * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ฑ Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> * feat: ๋ฆฌ๋ทฐ ์์ฑ ์ปจํธ๋กค๋ฌ Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> --------- Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * [BE] refactor: ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ ์ ๋ณด ์์ฒญ ๊ธฐ๋ฅ ๋ฆฌํฉํฐ๋ง (#162) * refactor: ๋ถํ์ํ update ๋ฐฉ์ง * feat: controller์ ๋ฆฌ๋ทฐ ์์ฑ ์์ฒญ์ ๋ํ ์๋ต ๊ธฐ๋ฅ ๊ตฌํ * feat: controller์ ๋ฆฌ๋ทฐ ์์ฑ์ ์ํด ํ์ํ ์ ๋ณด๋ฅผ ์๋ต ๊ธฐ๋ฅ ๊ตฌํ * feat: service์ ๋ฆฌ๋ทฐ ์์ฑ์ ์ํด ํ์ํ ์ ๋ณด ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ * chore: ์ฌ์ฉํ์ง ์๋ dto ์ญ์ * test: ๋ฆฌ๋ทฐ ๋ฆฌ๋ทฐ ์์ฑ์ ์ํด ํ์ํ ์ ๋ณด ์กฐํ ๊ธฐ๋ฅ ํ ์คํธ ์์ฑ * refactor: swagger ์ค์ ์ผ๋ถ ์์ ๋ฐ ์๋ฌ ์๋ต์ฝ๋ ๋ ธ์ถ๋๋๋ก ๋ณ๊ฒฝ * refactor: service์์ ์์ํ์ long์ ๋ฐํํ๋๋ก ๋ณ๊ฒฝ * docs: api ๋ฌธ์ dto ํญ๋ชฉ์ค๋ช ๋ณ๊ฒฝ * test: ์ฌ์ฉํ์ง ์๋ ๋ณ์ ์ ์ธํ์ง ์๋๋ก ๋ณ๊ฒฝ * docs: api ๋ฌธ์ ๊ฒ์ฆ ๋ด์ฉ์ ๋ํ ์ด์ฒด ๋ณ๊ฒฝ * refactor: ํธ๋์ญ์ ์กฐํ ๋ช ์ ์ถ๊ฐ * refactor: dto ์ด๋ฆ ๋ณ๊ฒฝ * [FE] ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ react-query ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง (#161) * fix: src/index.tsx์์ enableMocking ์ ๊ฑฐ * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ฑ ์ ์ฝ๋ฉํธ ์ปดํฌ๋ํธ๋ช ๋ณ๊ฒฝ ๋ฐ ๊ธฐ๋ณธ๊ฐ ์ค์ - ์ปดํฌ๋ํธ๋ช ๋ณ๊ฒฝ: RevewComment -> ReveweeComments - reviewGroup์ description์ด ๋น๋ฌธ์์ด์ด๋ฉด ๊ธฐ๋ณธ๊ฐ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝ * refactor: ์๋ฒ DB์ ์๋ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์์ํ - ํ์ฌ DB์ ์๋ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ฅผ ๋ชฉ ์๋ฒ์์๋ ์ฌ์ฉํ๊ณ , ์ฌ์ด๋๋ฐ ํ์ด์ง ์ด๋ ์์๋ ํ์ฉํ ์ ์๋๋ก ๊ด๋ จ value๋ค์ ์์ํ ํจ * feat : QueryClient, QueryClientProvider ์ ์ฉ - src/index.tsx์ QueryClient, QueryClientProvider ์ ์ฉ * fix: dependencies์ ์๋ ํ ์คํธ ํจํค์ง๋ค์ devDependencies๋ก ์ฎ๊น * feat: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ react-query ์ ์ฉ * feat : msw์ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง 404 ์ค๋ฅ ์ถ๊ฐ * ci: react-error-boundary ์ค์น * feat: Outlet์ QueryErrorResetBoundary,ErrorBoundary, Suspense ์ ์ฉ * feat: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ useSuspenseQuery ์ ์ฉ * refactor: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง resource, queryString key ์์ํ * refactor: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง react-query key ์์ํ * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ์ปดํฌ๋ํธ ์์์๋ง ์ฌ์ฉํ๋ ์์๋ค ์์ํ * refactor: DetailedReviewPage/components์ index.tsx๋ฅผ ์ถ๊ฐํด import ๊ฒฝ๋ก ๊ฐ๊ฒฐํ๊ฒ ์์ * feat: error ์ ํ๋ฅผ ์ํ QueryClient ์ต์ ์ถ๊ฐ - react-query์ query, mutation์์ error๊ฐ ์ ํ๋๋๋ก QueryClient ์ต์ ์ค์ * fix: ErrorPage์ SideModal์ closeModal props๋ก ์ค * refactor: ErrorSection ์์น ๋ณ๊ฒฝ(src/pages/ErrorPage -> src/components/error) * feat: ErrorFallback ์ปดํฌ๋ํธ ์์ฑ * feat: ErrorSuspenseContainer ์์ฑ ๋ฐ App.tsx์ ์ ์ฉ * chore: constants/index.ts export ๊ฒฝ๋ก ๋ณ๊ฒฝ - ์ค๋ณต๋๋ apiErrorMessage ์ญ์ - queryKeys ์ถ๊ฐ * chore: 3์ฐจ-1์ฃผ์ฐจ ํต์ฌ ๊ธฐ๋ฅ ์ํ ๋ ํ์ ์๋ ์ฝ๋ ์ฃผ์ ์ฒ๋ฆฌ * docs: ErrorPage์ ERROR_MESSAGE ์์ * design: formWidth ๋ณ๊ฒฝ ๋ฐ fontSize์ 1.4rem ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ ์ถ๊ฐ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ชฉ๋ฐ์ดํฐ, ๋ฐ์ดํฐ ํ์ ์ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ ์ถ๊ฐ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ์ปดํฌ๋ํธ์ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ ์ถ๊ฐ ๋ฐ ๊ด๋ จ ์คํ์ผ ์ถ๊ฐ * refactor: ๋ถํ์ํ export ์ญ์ * chore: type๋ช ์์ (RevieweeCommentProps =>RevieweeCommentsProps) * refactor: ErrorSection์ผl Button ์์ * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ * refactor: ErrorSuspenseContainer ์ ์ฉ ์์น ๋ณ๊ฒฝ - App๊ฐ ์๋ router์ element์์ ์ ์ฉํ๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ฐ์ดํฐ ํ์ ๊ฐ์ ๋ฐฉ๋ฒ ๋ณ๊ฒฝ * chore: ๋ถํ์ํ ์ฃผ์ ์ญ์ * refactor: ErrorSection์ buttons ๋ค์ด๋ฐ ๋ณ๊ฒฝ ๋ฐ ์์์ key ์ถ๊ฐ - buttons -> buttonList * chore: ์คํ์ผ ์ฃผ์์ NOTE ์ถ๊ฐ * [BE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํ (#179) * feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ Co-authored-by: nayonsoso <[email protected]> * feat: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์๋ต ์์ฑ Co-authored-by: donghoony <[email protected]> * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํ Co-authored-by: nayonsoso <[email protected]> * refactor: Cascade ์ ์ฉ์ผ๋ก ๋ถํ์ํ save ์ ๊ฑฐ Co-authored-by: nayonsoso <[email protected]> * refactor: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์์ฑ ๊ฐ์ฒด ๋์ถ Co-authored-by: nayonsoso <[email protected]> --------- Co-authored-by: nayonsoso <[email protected]> * fix: ๋ธ๋ผ์ฐ์ ํ์ดํ ์คํ ์์ (#167) * [BE] feat: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ (#182) * feat: ์ปจํธ๋กค๋ฌ ๋ฆฌ๋ทฐ ์์ธ ์กฐํ api ์๋ต ๊ธฐ๋ฅ ๊ตฌํ * feat: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ api ์๋ต ๊ฐ์ฒด ๊ตฌํ * refactor: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ api ์๋ต ๊ฐ์ฒด๋ช ๋ณ๊ฒฝ * feat: ์๋น์ค ๋ฆฌ๋ทฐ ์์ธ ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ * test: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ ๊ธฐ๋ฅ ํ ์คํธ ์ถ๊ฐ * style: ์คํ ๋ฐ ๊ฐํ ์์ * refactor: ๋ ์ง ์๋ต ์, ์ผ์๊น์ง๋ง ์๋ตํ๋๋ก ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ์กฐํ ๊ถํ ๊ฒ์ฆ ๋ก์ง์ repository ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝ * refactor: ๊ฒ์ฆ๋ฉ์ธ์ง ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ์๋น์ค์์ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ์ ๋ํ ์์ธ ํด๋์ค ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ ๋ฉ์๋๋ช ๋ณ๊ฒฝ * refactor: ํค๋๋ช ์์ํ * [FE] recoil์ ํตํ groupAccessCode ์ ์ญ ์ํ ๊ด๋ฆฌ (#180) * ci: recoil ์ค์น * feat: src/index.ts์ RecoilRoot ์ ์ฉ * feat: groupAccessCode ์ ๋ํ atom ์ํ ์ถ๊ฐ * feat: useGroupAccessCode ํ ์ถ๊ฐ - useGroupAccessCode : groupAccessCode์ atom ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ํ * [BE] ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ์ต์ ์์ผ๋ก ์กฐํํ๋ค. (#189) * fix: ๋ ์ง ์ ์ ๋ ฌ * refactor: ์ฌ์ฉํ์ง ์๋ ๋ณ์ ์ ๊ฑฐ --------- Co-authored-by: donghoony <[email protected]> * [BE] ์ด๊ธฐ ๋ฐ์ดํฐ ์ค์ (#187) * feat: ์ด๊ธฐ ๋ฐ์ดํฐ ์ค์ * build: CD ์ local profile ์ค์ --------- Co-authored-by: donghoony <[email protected]> * [FE] feat: Alert Modal๊ณผ Error Alert Modal ์ปดํฌ๋ํธ ๊ตฌํ ๋ฐ Button ์ปดํฌ๋ํธ ํ์ฅ (#165) * refactor: ๊ณตํต ๋ฒํผ ์ปดํฌ๋ํธ๊ฐ children๊ณผ style์ ๋ฐ๋๋ก ์์ * chore: error alert modal์์ ์ฌ์ฉํ primary ์์์ ๊ฒฝ๊ณ ์ผ๊ฐํ ์ถ๊ฐ * feat: ErrorAlertModal ์ปดํฌ๋ํธ ๊ตฌํ * feat: AlertModal ์ปดํฌ๋ํธ ๊ตฌํ * chore: ๋ณ๊ฒฝ๋ Button ์ปดํฌ๋ํธ์ ๊ตฌ์กฐ์ ๋ง๊ฒ ์ฝ๋ ์์ * fix: AlertModal์ด Esc ๋๋ background์ ํด๋ฆญ์ผ๋ก ๋ซํ์ง ์๋๋ก ์์ * chore: AlertModal๊ณผ ErrorAlertModal export * refactor: Button ์ปดํฌ๋ํธ๊ฐ type์ ๋ณ๋๋ก ๋ฐ๋๋ก ์์ ๋ฐ ๊ธฐ์กด์ buttonType์ styleType์ผ๋ก ๋ณ๊ฒฝ * refactor: background ํด๋ฆญ ๋๋ Esc ํค๋ฅผ ํตํด ๋ชจ๋ฌ์ ๋ซ๋ ๊ฒ์ ๋ถ๋ฆฌ * refactor: AlertModal์ ๋ชจ๋ฌ ๋ซ๋ ์ ์ฑ ์ props๋ก ์ ํ ๊ฐ๋ฅํ๋๋ก ์์ * refactor: ErrorAlertModal์ AlertModal์ ์ฌ์ฉํด ๊ตฌํ * refactor: ๋ซ๊ธฐ ๋ฒํผ ์ด์ธ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋ฌ์ ๋ซ์ ์ ์๋์ง ์ฌ๋ถ์ handler๋ฅผ props๋ก ์ ๋ฌ๋ฐ๋๋ก ๋ณ๊ฒฝ * refactor: ๋น์ด์๋ ์คํ์ผ ์ปดํฌ๋ํธ ์ ๊ฑฐ * [FE] ๋๋ฉ ํ์ด์ง ํผ๋ธ๋ฆฌ์ฑ ๋ฐ ๋๋ฐ์ด์ฑ ํจ์ ์ถ๊ฐ (#181) * feat: Input ๊ณตํต ์ปดํฌ๋ํธ ์ ์ * feat: LandingPage ์ ์ * fix: Input์ type์ text๋ก ์์ * feat: debounce ํจ์ ์์ฑ * docs: debounce ํจ์์ TODO ์ฃผ์ ๋ฐ TSdoc ์ถ๊ฐ ์ธ ๊ฐ๋จํ if๋ฌธ ๋ฆฌํฉํ ๋ง * chore: ์๋ชป๋ ํ์ผ ๊ตฌ์กฐ ๋ฐ ๋๋ ํ ๋ฆฌ๋ช ์์ * chore: px์ rem์ผ๋ก ์์ * refactor: ๋์ ์คํ์ผ๋ง์ css ๋์ styled ์คํ์ผ ์ ์ฉ * refactor: Input ์คํ์ผ์ ๋์ฑ ์ ์ฐํ๊ฒ ๋ฐ์ ์ ์๋๋ก ์์ , ์คํ์ผ ๋ฆฌํฐ๋ด ์ ๊ฑฐ * refactor: Input์ ์ ์ฉ๋ ์ปค์คํ ์คํ์ผ๋ง์ $style๋ก ์์ * fix: undefined ๋ฆฌํด์ null ๋ฆฌํด์ผ๋ก ์์ * refactor: flex-direction์ ๋ณ๋์ ์ปค์คํ ํ์ ์ ์ฌ์ฉํ๋ ๋์ React ๋ด์ฅ ํ์ ์์ฌ์ฉํ๋๋ก ์์ * refactor: Input ์ปดํฌ๋ํธ์์ rest props ์ ๊ฑฐ * chore: ๋ถํ์ํ import ์ ๊ฑฐ * [FE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ ๋ณ๊ฒฝ๋ API ์ฐ๋ ํ, ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ์ ์ฉ ๋ฐ ๋ฌดํ ์คํฌ๋กค ๊ตฌํ (#192) * design: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋ ๋ฐฐ๊ฒฝ์ ๋ณ๊ฒฝ ๋ฐ ์ ์ฒด ๊ฐ์ธ๋ div์ ์๋์ชฝ ์ฌ๋ฐฑ ์ถ๊ฐ * refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์ธํฐํ์ด์ค ์ถ๊ฐ ๋ฐ ์์ - ReviewPreviewList ์ธํฐํ์ด์ค ์ถ๊ฐ - size, lastReviewId, reviews ํ๋ ์ถ๊ฐ - ReviewPreview ์ธํฐํ์ด์ค ์์ - keywords ํ๋๋ฅผ Keyword[] ํ์ ์ผ๋ก ๋ณ๊ฒฝ * chore: ๋ซํ ์๋ฌผ์ ๋ก ์์ด์ฝ ๋ณ๊ฒฝ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ์ ์ฉ * refactor: ์น ์ ๊ทผ์ฑ์ ์ํ alt, aria-label ์ถ๊ฐ ๋ฐ ์ฝ๋ ์ปจ๋ฒค์ ์ ๋ง์ถฐ ์ฝ๋ ์์ * feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฆฌ์คํธ ํธ๋ค๋ฌ์ ํ์ด์ง๋ค์ด์ ๋ก์ง ์ถ๊ฐ - ๊ธฐ์กด์ ๋จ์ ๋ฐํ ํธ๋ค๋ฌ์์ ํ์ด์ง๋ค์ด์ ๊ธฐ๋ฅ์ ํฌํจํ ํธ๋ค๋ฌ๋ก ์์ * feat: `SideModal` ์ปดํฌ๋ํธ์ `closeModal` prop ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ ๋ฌดํ ์คํฌ๋กค ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: useReviewPreviewList ํ ์์ฑํ์ฌ ๋ฐ์ดํฐ ํธ์ถ ๋ก์ง ๋ถ๋ฆฌ * refactor: ๋ถํ์ํ ButtonContainer ์ ๊ฑฐ * design: px์ rem์ผ๋ก ๋ณ๊ฒฝ * refactor: Button ์ปดํฌ๋ํธ์ key ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ์ด, ํ๋ก์ ํธ๋ช ์ ๋ณด์ฌ์ฃผ๋ DescriptionSection ์ปดํฌ๋ํธ ๊ตฌํ * refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ๋ถ๋ฌ์ค๋ api ๋ณ๊ฒฝ ์ด์๋ก ์ธํด ์๋ํฌ์ธํธ, fetch ํจ์ ์์ * chore: fragment ์ ๊ฑฐ * refactor: api ๋ณ๊ฒฝ์ ๋ฐ๋ผ ReviewPreviewList, ReviewPreview ์ธํฐํ์ด์ค ์์ * refactor: ๋ณ๊ฒฝ๋ api์ ๋ฐ๋ผ props ์์ * refactor: reviewerGroup, isPublic ์ ๊ฑฐ * refactor: endPoint.gettingReviewList ํธ์ถ ์ธ์ ๋ณ๊ฒฝ * refactor: DescriptionSection์์ ReviewInfoSection์ผ๋ก ์ปดํฌ๋ํธ๋ช ๋ณ๊ฒฝ * refactor: useSuspenseQuery ์ ์ฉ ํ, ๋ฌดํ์คํฌ๋กค ๊ด๋ จ ์ฝ๋ ์ฃผ์ ์ฒ๋ฆฌ --------- Co-authored-by: badahertz52 <[email protected]> * [FE] feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ์๋ฒ ๋ฐ ๋ชจ๋ฌ ์ฐ๋ (#191) * chore: ๋ณ๊ฒฝ๋ UI ์ ์ฉ * design: ํค์๋ ๋ฌธํญ ์๋ด ๋ฌธ๊ตฌ ์์ * feat: Textarea ๊ณตํต ์ปดํฌ๋ํธ ๋ผ๋ ๊ตฌํ * chore: ์์ ๋ api ์๋ํฌ์ธํธ ๋ฐ queryparams ์ ์ฉ * design: reset.ts ์ถ๊ฐ ์ค์ * chore: ๋ณ๊ฒฝ๋ api ๋ฌธ์์ ๋ง๊ฒ ํ์ ์์ * feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ๋ชจ๋ฌ ๋ฐ ์๋ฒ ์ฐ๋ * chore: ์ฌ์ด๋๋ฐ ๋ฉ๋ด ํด๋ฆญ ์ ์ด๋ํ path ์์ * fix: ConfirmModal์์ background ํด๋ฆญ ์ ๋ชจ๋ฌ์ด ๋ซํ์ง ์๋ ํ์ ์์ * design: AlertModal ๋ฐ ErrorAlertModal ๋์์ธ ์์ * chore: ๋ฆฌ๋ทฐ ์์ฑ ๋ฐ ์์ฑ ์๋ฃ ํ์ด์ง ๋ผ์ฐํฐ ์ถ๊ฐ * chore: ๋ถํ์ํ ์ฃผ์ ์ ๊ฑฐ ๋ฐ ์ฌ์ด๋๋ฐ์์ ๋ฆฌ๋ทฐ ์์ฑ ๋ฉ๋ด ์จ๊น ์ฒ๋ฆฌ * chore: ๋ฆฌ๋ทฐ ์ ์ถ ํ์ด์ง ๋ฒํผ ํ์ ๋ช ์ * chore: svg import ์ปจ๋ฒค์ ์ ๋ง๊ฒ ์์ * [FE] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง, ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์์ ๋ก๊ทธ์ธ์ ์ฐ๋ (#193) * design: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋ ๋ฐฐ๊ฒฝ์ ๋ณ๊ฒฝ ๋ฐ ์ ์ฒด ๊ฐ์ธ๋ div์ ์๋์ชฝ ์ฌ๋ฐฑ ์ถ๊ฐ * refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์ธํฐํ์ด์ค ์ถ๊ฐ ๋ฐ ์์ - ReviewPreviewList ์ธํฐํ์ด์ค ์ถ๊ฐ - size, lastReviewId, reviews ํ๋ ์ถ๊ฐ - ReviewPreview ์ธํฐํ์ด์ค ์์ - keywords ํ๋๋ฅผ Keyword[] ํ์ ์ผ๋ก ๋ณ๊ฒฝ * chore: ๋ซํ ์๋ฌผ์ ๋ก ์์ด์ฝ ๋ณ๊ฒฝ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ์ ์ฉ * refactor: ์น ์ ๊ทผ์ฑ์ ์ํ alt, aria-label ์ถ๊ฐ ๋ฐ ์ฝ๋ ์ปจ๋ฒค์ ์ ๋ง์ถฐ ์ฝ๋ ์์ * feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฆฌ์คํธ ํธ๋ค๋ฌ์ ํ์ด์ง๋ค์ด์ ๋ก์ง ์ถ๊ฐ - ๊ธฐ์กด์ ๋จ์ ๋ฐํ ํธ๋ค๋ฌ์์ ํ์ด์ง๋ค์ด์ ๊ธฐ๋ฅ์ ํฌํจํ ํธ๋ค๋ฌ๋ก ์์ * feat: `SideModal` ์ปดํฌ๋ํธ์ `closeModal` prop ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ ๋ฌดํ ์คํฌ๋กค ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: useReviewPreviewList ํ ์์ฑํ์ฌ ๋ฐ์ดํฐ ํธ์ถ ๋ก์ง ๋ถ๋ฆฌ * refactor: ๋ถํ์ํ ButtonContainer ์ ๊ฑฐ * design: px์ rem์ผ๋ก ๋ณ๊ฒฝ * refactor: Button ์ปดํฌ๋ํธ์ key ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก,๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง api ํธ๋ค๋ฌ์์ groupAccessCode๋ฅผ header์ ์ถ๊ฐ * feat: DetailedReviewPage ์์ groupAccessCode ์ํ ์ ์ฉ * feat: LoginRedirectModal ์์ฑ * refactor: ErrorSection ๋ฆฌํฉํ ๋ง * feat: ๋ฆฌ๋ทฐ์ด, ํ๋ก์ ํธ๋ช ์ ๋ณด์ฌ์ฃผ๋ DescriptionSection ์ปดํฌ๋ํธ ๊ตฌํ * refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ๋ถ๋ฌ์ค๋ api ๋ณ๊ฒฝ ์ด์๋ก ์ธํด ์๋ํฌ์ธํธ, fetch ํจ์ ์์ * feat: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ groupAccessCode ์ํ๋ฅผ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ groupAccessCode ์ํ๊ฐ์ด ์์ผ๋ฉด api์์ฒญ์ ํ๊ณ ์์ผ๋ฉด LoginRedirectModal์ ๋์ด์ ๋ก๊ทธ์ธ ์ ๋ํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ - DetailedPage/index.tsx์ ์๋ ๋ด์ฉ์ DetailedReivewPageContents๋ก ์ด๋ - DetailedPage/index.tsx์์ ErrorSuspenseContainer ์คํํ๋ ๊ฒ์ผ๋ก ์์ * chore: fragment ์ ๊ฑฐ * refactor: api ๋ณ๊ฒฝ์ ๋ฐ๋ผ ReviewPreviewList, ReviewPreview ์ธํฐํ์ด์ค ์์ * fix: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง keyword ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ * refactor: ๋ณ๊ฒฝ๋ api์ ๋ฐ๋ผ props ์์ * refactor: reviewerGroup, isPublic ์ ๊ฑฐ * feat: ErrorFallback ์ ํ ์ด๋ ๊ฒฝ๋ก ๋ณ๊ฒฝ * refactor: endPoint.gettingReviewList ํธ์ถ ์ธ์ ๋ณ๊ฒฝ * refactor: DetailedReviewPage์์ groupAccessCode ๊ฐ์ ธ์ค๋ ๋ฐฉ์ ๋ณ๊ฒฝ - useRecoilValue๊ฐ ์๋ useGroupAccessCode์์ ๊ฐ์ ธ์ค๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝ * refactor: DescriptionSection์์ ReviewInfoSection์ผ๋ก ์ปดํฌ๋ํธ๋ช ๋ณ๊ฒฝ * refactor: ErrorPage์์ Home ์ด๋ ๋ฒํผ์ ์ ๋ํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ - route์ค๋ฅ ๋ฉ์ธ์ง์ api์ค๋ฅ ๋ฉ์ธ์ง๋ฅผ errorMessage ํ์ผ์์ ๊ด๋ฆฌํ๋๋ก ์์ - ErrorPage์์ errorMessage๊ฐ ROUTE_ERROR_MESSAGE์ด๋ฉด ํ ๋ฒํผ์ด ํ๋ฉด์์์ ๋จผ์ ๋์ค๋๋ก ์์ - ์์๋ณ ํ,refresh ์์ด์ฝ SVG ์ถ๊ฐ * refactor: useSuspenseQuery ์ ์ฉ ํ, ๋ฌดํ์คํฌ๋กค ๊ด๋ จ ์ฝ๋ ์ฃผ์ ์ฒ๋ฆฌ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง ๋ชฉ ์๋ฒ ํธ๋ค๋ฌ ๋ฐ ๋ชฉ๋ฐ์ดํฐ ์์ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ groupAccessCode ์ ์ญ ์ํ ์ ์ฉ * refactor: ๋ถํ์ํ ์ฝ๋ ์ญ์ * chore: ์คํ ์์ --------- Co-authored-by: soosoo22 <[email protected]> * [FE] feat: ๋๋ฉ ํ์ด์ง API ์ฐ๋ (#196) * feat: ๊ทธ๋ฃน ์์ฑ์ ์ํ ์๋ํฌ์ธํธ ์์ฑ ๋ฐ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์๋ํฌ์ธํธ, api ํธ์ถ ํจ์ ์์ * fix: CSSProperties ๋์ ์ปค์คํ ํ์ ์ ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค ์์ * feat: ReviewAccessForm์ ๋ชจ๋ฌ ๋ฐ API ์ฐ๊ฒฐ * fix: ๋๋ฝ๋๋ CopyIcon ํ์ผ ์ ๋ก๋ * feat: ํ์ธ ์ฝ๋ ์ ๋ ฅ API ์ฐ๋ * feat: ์์ ํ ๋ฆฌ๋ทฐ ์์ฑ URL์ ๋ฆฌํดํ๋ ํจ์ ์์ฑ * [FE] fix: ๋๋ฝ๋๋ ๋ฒํผ ๋ฆฌํฉํ ๋ง ๋ฐ ์๋ํฌ์ธํธ ๋ณต๊ตฌ (#199) * fix: ์ถฉ๋ ํด๊ฒฐ ๊ณผ์ ์์ ๋๋ฝ๋๋ ์๋ํฌ์ธํธ ๋ณต๊ตฌ * fix: ๋ฒํผ ๋ฆฌํฉํ ๋ง ๋ฐ์ * feat: textarea์ ์ต์ ์ ๋ ฅ ๊ธ์ ์๋ฅผ ๋ง์กฑํ์ง ๋ชปํ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง ํ์ ๊ธฐ๋ฅ ๊ตฌํ (#200) * feat: ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ํ์ด์ง์์ ํ ๋ฒํผ ์ถ๊ฐ (#201) * docs: ๋ฆฌ๋ทฐ๋ฏธ ์๊ฐ๊ธ ์์ฑ (#203) * [BE] refactor: ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋ ์ ๊ฑฐ, ์ปจ๋ฒค์ ๋ฐ ์์ ๋ฆฌํฉํ ๋ง (#206) * refactor: date๋ฅผ review๊ฐ ์ ๊ณตํ๋๋ก ์์ * style: ์ปจ๋ฒค์ ์ ์ฉ * refactor: ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋ ์ ๊ฑฐ * refactor: ๋ฉ์๋๋ช ํต์ผ * style: ๋ถํ์ํ ๊ฐํ ์ ๊ฑฐ * [FE] jest ์ฌ์ฉ ์ nodeํ๊ฒฝ ์ msw ํธํ์ฑ ๋ฌธ์ ์ ํ๊ฒฝ ๋ณ์ ์ค๋ฅ ํด๊ฒฐ (#215) * ci: dependencies์์ jest ์ญ์ ๋ฐ ts-jest ์ค์น * ci: jest์์ ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉํ ์ ์๋๋ก jest.config.js ์ถ๊ฐ * chore: eslint์ ์ฉ ์ ์ธ ํ์ผ์ jest.config.js, tsconfig.json ์ถ๊ฐ * ci: jest์ testEnvioronment๋ฅผ jsdom์ผ๋ก ์ค์ * fix: jest์์ msw ver2๋ฅผ ๋ชฉ์๋ฒ๋ก ์ฌ์ฉ ์ ์๊ธฐ๋ ์ค๋ฅ ์์ 1. msw/node ๋ฅผ ์ฝ์ง ๋ชปํจ - jest.config.js์ testEnvironment ๋น๋ฌธ์์ด 2. ReferentError: TextEnCoder is not defined - ํด๊ฒฐ : jest.polyfills.js ์ถ๊ฐ ๋ฐ undici ์ค์น 3. ReferenceError: ReadableStream is not defined - ํด๊ฒฐ : undici ๋ค์ด ๊ทธ๋ ์ด๋ undici": "^6.19.5", -> "^5.0.0" * ci : jest์์ env ํ์ผ ์ฝ์ ์ ์๋๋ก dotenv ์ค์น ๋ฐ jest์ ์ ์ฉ * [FE] ๊ฐ๋ฐํ๊ฒฝ๊ณผ ๋น๋ํ๊ฒฝ์ ๋ฐ๋ผ msw ์คํ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋๋ก msw ์คํ ์กฐ๊ฑด๋ฌธ ๊ฐ์ (#221) * ci: ๋น๋ ํ์ผ์ ์คํํ ์ ์๋ http-server ํจํค์ง ์ค์น ๋ฐ ์คํ ๋ช ๋ น์ด ์ถ๊ฐ * fix:๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ๋น๋/๋ฐฐํฌ ํ๊ฒฝ์ ๊ตฌ๋ถํด ๋ชฉ ์๋ฒ๋ฅผ ์คํํ๋๋ก ์กฐ๊ฑด๋ฌธ ๊ฐ์ * fix: ๋จธ์ง ์ถฉ๋ ์ yarn.lock ์ญ์ ํ ๊ฑฐ ๋ณต๊ตฌ * [FE] ๋ฆฌ๋ทฐ ์์ธํ์ด์ง query ํ ๋ถ๋ฆฌ ๋ฐ HTTP ์์ฒญ ํ ์คํธ ์งํ (#216) * refactor: DetailedPage/index.tsx ๋ฆฌํฉํ ๋ง - early return๋ฅผ ์ฌ์ฉํด ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ * feat: useGetDetailedReview ํ ์์ฑ ๋ฐ DetailedReviewPageContents์ ์ ์ฉ * feat: useSearchParamAndQuery ํ ์์ฑ ๋ฐ DetailedPageContent์ ์ ์ฉ * refactor: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์์ id๋ผ๊ณ ์ฌ์ฉํ๋ key๊ฐ, params์ key๋ฅผ reviewId๋ก ๋ณ๊ฒฝ - DetailedReview์ router param์ id์์ reviewId๋ก ๋ณ๊ฒฝ * ci: dependencies์์ jest ์ญ์ ๋ฐ ts-jest ์ค์น * ci: jest์์ ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉํ ์ ์๋๋ก jest.config.js ์ถ๊ฐ * chore: eslint์ ์ฉ ์ ์ธ ํ์ผ์ jest.config.js, tsconfig.json ์ถ๊ฐ * ci: jest์ testEnvioronment๋ฅผ jsdom์ผ๋ก ์ค์ * refactor: useGetDetailedReview์์ query ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ ๋ฐํํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * fix: jest์์ msw ver2๋ฅผ ๋ชฉ์๋ฒ๋ก ์ฌ์ฉ ์ ์๊ธฐ๋ ์ค๋ฅ ์์ 1. msw/node ๋ฅผ ์ฝ์ง ๋ชปํจ - jest.config.js์ testEnvironment ๋น๋ฌธ์์ด 2. ReferentError: TextEnCoder is not defined - ํด๊ฒฐ : jest.polyfills.js ์ถ๊ฐ ๋ฐ undici ์ค์น 3. ReferenceError: ReadableStream is not defined - ํด๊ฒฐ : undici ๋ค์ด ๊ทธ๋ ์ด๋ undici": "^6.19.5", -> "^5.0.0" * ci : jest์์ env ํ์ผ ์ฝ์ ์ ์๋๋ก dotenv ์ค์น ๋ฐ jest์ ์ ์ฉ * fix: mock ํธ๋ค๋ฌ์ธ getDetailedReview ์์ ์ค๋ณต๋ ์ฟผ๋ฆฌ ๋งค๊ฐ ๋ณ์ ์ฌ์ฉ ์์ - ์ค๋ฅ ์ํฉ: jest์์ msw ์ฌ์ฉ ์, get์ url์ ํ๋ผ๋ฏธํฐ ์ฌ์ฉ ์ ์ค๋ณต๋ ์ฟผ๋ฆฌ ๋งค๊ฐ ๋ณ์ ์ค๋ฅ๊ฐ ๋จ - ์ค๋ฅ ๋ฉ์ธ์ง ::Found a redundant usage of query parameters in the request handler - ํด๊ฒฐ: ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ ํ์ด์ง์ reviews๊น์ง์ url ์์๋ฅผ ๋ง๋ค๊ณ , get์์๋ ์ด ์์๋ฅผ ํ์ฉํ ์ ๊ทํํ์์ผ๋ก ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ ํ์ด์ง๋ก ์ค๋ ๋ชจ๋ ์์ฒญ์ ๊ฐ๋ก์ฑ ์ ์๋๋ก ํจ * refactor: getWrongDetailedReview ๋ชฉ์๋ฒ ํธ๋ค๋ฌ ๋ฐ ๊ด๋ จ ์์ ์ญ์ - getDetailedReview์์ request๋ฅผ ๋ถ์ํด http์ค๋ฅ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํจ * feat: queryClientWrapper ์์ฑ - queryClientWrapper : msw๋ฅผ ์ฌ์ฉํ jest ํ ์คํธ์ queryWrapper๋ก ์ฌ์ฉ * test:๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง api ์์ฒญ ์ฑ๊ณต์ ๋ํ ํ ์คํธ ์ถ๊ฐ * fix: groupAccessCodeAtom์ ๊ธฐ๋ณธ๊ฐ ์๋๋๋ก ๋ณต๊ตฌ * chore:queryClientWrapper ๋ค์ด๋ฐ ํ๊ธฐ๋ฒ์ ํ์ค์นผ ์ผ์ด์ค๋ก ๋ณ๊ฒฝ * fix: ๋จธ์ง ์ถฉ๋ ๋ฐฉ์ง๋ฅผ ์ํด yarn.lock ์ญ์ * fix: ๋จธ์ง ์ yarn.lock ์ถฉ๋ ํด๊ฒฐ * [FE] test: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ API ์ฐ๋ ํ ์คํธ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง (#217) * chore: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง ๊ด๋ จ ์ปดํฌ๋ํธ ๋ฐ ์ธํฐํ์ด์ค, ํ์ผ ์ด๋ฆ ๋ณ๊ฒฝ * refactor: api ์๋ํฌ์ธํธ ์์ ์ ์ฉ * refactor: useGetReviewList ํ ์ผ๋ก ๋ถ๋ฆฌ * test: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง api ์ฐ๋ ํ ์คํธ ์ถ๊ฐ * chore: msw ๋ชจํน ์ฝ๋ ์ ๊ฑฐ * chore: ๊ฒฝ๋ก index ์ ๊ฑฐ * fix: ์ค๋ณต๋ import ๋ฐ ๋ถํ์ํ ํธ๋ค๋ฌ ์ ๊ฑฐ * chore: ์๋ํฌ์ธํธ ์์ ์ ๊ฑฐ * [FE] refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ๋ฆฌํฉํ ๋ง (#219) * refactor: ๊ฐ ๋ชจ๋ฌ๋ณ๋ก ์ํ์ ๋์์ ๊ด๋ฆฌํ๋ ํ ๋ถ๋ฆฌ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํผ์ ๋ก์ง์ ํ ์ผ๋ก ๋ถ๋ฆฌ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ๋ถ๋ฆฌํ ํ ์ ์ฉ * refactor: URL์์ reviewRequestCode๋ฅผ ์ถ์ถํ๋ ๋ก์ง์ ํ ์ผ๋ก ๋ถ๋ฆฌ * chore: ๋ถํ์ํ ํ ์คํธ์ฉ ์ฝ๋ ์ ๊ฑฐ * chore: ErrorModal์ ๋ซ์ ๋ errorMessage ์ํ๋ ์ด๊ธฐ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋๋ก ์์ * [BE] feat: ํค๋ ์กด์ฌ ์ฌ๋ถ ๊ฒ์ฆ (#207) * fix: ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด ์ด๋ ธํ ์ด์ ์ผ์น * feat: ํค๋ ๊ฒ์ฌ ์ด๋ ธํ ์ด์ * feat: ํค๋ ๋ฐธ๋ฆฌ๋ฐ์ดํฐ * feat: ์ปจํธ๋กค๋ฌ์ ํค๋ ๊ฒ์ฌ * feat: ํค๋ ๊ฒ์ฆ ๋ฉ์์ง ํด๋ผ์ด์ธํธ์ ์ ๋ฌ * fix: ๋๋ฝ๋ `@Valid` ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: ์์ฒญ์ด null์ธ ๊ฒฝ์ฐ ํธ๋ค๋ง * chore: ํ ์คํธ ์ด๋ฆ ๊ฐ๊ฒฐํ๊ฒ ๋ณ๊ฒฝ * chore: ์๋ฌธ์ ์ปจ๋ฒค์ * feat: ArgumentResolver๋ฅผ ํ์ฉํ ํค๋ ๊ฒ์ฆ * feat: ๊ณต์ฉ ํจํค์ง๋ก ์ด๋ ๋ฐ ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์์ * chore: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ * feat: ArgumentResolver ์ ์ฉ, Validator ์ญ์ * chore: ์ฌ์ฉํ์ง ์๋ ์ปค์คํ ์์ธ ์๋ณต * refactor: ํค๋ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ๋ฉ์์ง ์์ * chore: ๋ถํ์ํ `@Valid` ์ด๋ ธํ ์ด์ ์ญ์ * refactor: ๋ณ์ ์ถ์ถ Co-authored-by: Yeongseo Na <[email protected]> * fix: ์ปดํ์ผ ์๋ฌ ํด๊ฒฐ --------- Co-authored-by: Yeongseo Na <[email protected]> * ci: index.html์ ๊ตฌ๊ธ ์ ๋๋ฆฌํฑ์ค ์ ์ฉ (#226) * [FE] ci: sentry ์ด๊ธฐ ์ค์ (#223) * ci: sentry ์ด๊ธฐ ์ค์ * chore: gitignore์ env.sentry-build-plugin ์ถ๊ฐ * ci: sentry ์ ์ฉ ํ๋ก์ ํธ๋ฅผ woowacoure-review-me๋ก ๋ณ๊ฒฝ, ๋ก์ปฌ ํ๊ฒฝ ์ถ์ ํ๋๋ก ๋ณ๊ฒฝ * ci: sentry ์ ์ฉ ํ๊ฒฝ์ ๋ฐฐํฌ ํ๊ฒฝ์ผ๋ก ๋ค์ ๋ณ๊ฒฝ * ci: sentry์์ replay ๊ด๋ จ ์ค์ ์ญ์ --------- Co-authored-by: badahertz52 <[email protected]> * [FE] refactor: LandingPage์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ์ ์ฉ ๋ฐ ๋ฆฌํฉํ ๋ง (#218) * chore: LandingPage์ styles ํ์ผ ๋ถ๋ฆฌ * fix: POST ์์ฒญ์ ํ๋ ํจ์์ ์ด๋ฆ์ post~๋ก ์์ * feat: ๊ทธ๋ฃน ๋ฐ์ดํฐ ์์ฑ ์์ฒญ์ ๋ํ MSW ํธ๋ค๋ฌ ์ถ๊ฐ * refactor: ๋ชจํน ๋ฐ์ดํฐ ๊ฐ์ ๋ ์ง๊ด์ ์ผ๋ก ์์ * refactor: LandingPage๋ฅผ ErrorSuspenseContainer๊ฐ ๊ฐ์ธ๋๋ก ์์ * refactor: URL์ ์ป์ด์ค๋ API์ react-query ์ ์ฉ ๋ฐ API ํธ์ถ ํจ์ ์ด๋ฆ ์์ * chore: LandingPage ํ์ ์ปดํฌ๋ํธ๋ค์ index ํ์ผ ์ถ๊ฐ ๋ฐ ์ ์ฉ * refactor: groupAccessCode ๊ด๋ จ msw ํธ๋ค๋ฌ ์ถ๊ฐ ๋ฐ ์๋ฌ ์ํ(์๋ ์ฝ๋ ์ ๋ ฅ, ์๋ฒ ์๋ฌ)์ ๋ฐ๋ฅธ ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ๋๋ก ์์ * refactor: groupAccessCode์ ์ํ๋ฒณ ๋์๋ฌธ์์ ์ซ์๋ง ์ฌ ์ ์๋๋ก ์์ * refactor: LandingPage์์ ErrorSuspenseContainer๋ฅผ ์ ๊ฑฐํ๊ณ ๋์ URLGeneratorForm๋ง์ ๊ฐ์ธ๋๋ก ์์ * refactor: Input ์ปดํฌ๋ํธ์ onChange ์ด๋ฒคํธ ํ์ ์์ * refactor: Input ์ปดํฌ๋ํธ์ name ์์ฑ ์ถ๊ฐ * refactor: ์์ ๋ ๊ฒฝ๋ก ๋ฐ์ * refactor: usePostDataForUrl ์ฟผ๋ฆฌ์์ mutation์ ๋ฆฌํดํ๋๋ก ์์ * refactor: URL์ ์ฑ๊ณต์ ์ผ๋ก ์์ฑํ ์ดํ Input์ ๋ฆฌ์ ํ๋ ํจ์ ์ถ๊ฐ * chore: NOTE ์ฃผ์ ์ถ๊ฐ * refactor: getIsValidGroupAccessCodeApi์์ 400 ์ธ์ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ๊ธฐ์กด์ createApiErrorMessage๋ฅผ ์ฌ์ฉํ๋๋ก ์์ * chore: ๋๋ฝ๋๋ -Api suffix ๋ฐ์ * [BE] Actuator ์ ์ฉ๊ณผ logback ์ค์ (#228) * build: actuator ์์กด์ฑ ์ถ๊ฐ * feat: ๋ก๊ทธ๋ฐฑ ์ค์ * feat: submodule ์ ์ฉ - actuator ์ค์ ์ ์๋ธ ๋ชจ๋์ ์ ์ฅ * style: ๊ฐํ ๋ฐ ์ฃผ์ ์ ๊ฑฐ * test: logback ์ค์ ์ถ๊ฐ * [FE] CD test (#233) * ci: sentry ์ด๊ธฐ ์ค์ * chore: ์๋น์ค ํ์ดํ ๋๋ฌธ์๋ก ๋ณ๊ฒฝ * chore: merge * [BE] ํ๋กํ์ผ ๋ถ๋ฆฌ, CD ์คํฌ๋ฆฝํธ ์์ (#235) * feat: ํ๋กํ์ผ ๋ถ๋ฆฌ * feat: ํ๋กํ์ผ ๋ถ๋ฆฌ * cd: ํ๋กํ์ผ ๋ถ๋ฆฌ cd ์คํฌ๋ฆฝํธ ์์ * fix: CD ์คํฌ๋ฆฝํธ ์คํ ์์ (#236) * [FE] CD test 2 (#237) * ci: sentry ์ด๊ธฐ ์ค์ * chore: ์๋น์ค ํ์ดํ ๋๋ฌธ์๋ก ๋ณ๊ฒฝ * chore: merge * fix: sentry ์ฌ์ค์ * fix: sentry ์ค์ ๋ณต๊ตฌ * fix: cd ์คํฌ๋ฆฝํธ ์คํ ์์ (#238) * [FE] CD TEST 3 (#239) * ci: sentry ์ด๊ธฐ ์ค์ * chore: ์๋น์ค ํ์ดํ ๋๋ฌธ์๋ก ๋ณ๊ฒฝ * chore: merge * fix: sentry ์ฌ์ค์ * fix: sentry ์ค์ ๋ณต๊ตฌ * chore: ์๋น์ค ํ์ดํ ๋ณ๊ฒฝ * [BE] build: Micrometer ์์กด์ฑ ์ถ๊ฐ (#244) * build: ๋ง์ดํฌ๋ก๋ฏธํฐ ์์กด์ฑ ์ถ๊ฐ Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> * chore: ์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> --------- Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> * [FE] feat: ๊ณตํต ์ปดํฌ๋ํธ์ธ ์ฒดํฌ๋ฐ์ค์ ์ฒดํฌ๋ฐ์ค ์์ดํ ์ ์ (#240) * feat: ๊ณตํต ์ฒดํฌ๋ฐ์ค ์ปดํฌ๋ํธ ์์ฑ * feat: ์ฒดํฌ๋ฐ์ค์ ๋ ์ด๋ธ์ ๋ฌ ์ ์๋ CheckboxItem ์ปดํฌ๋ํธ ์์ฑ * fix: style์ ์๋ชป ์ ๋ฌํ๋ ๋ฌธ์ ํด๊ฒฐ * [BE] fix: CD ์คํฌ๋ฆฝํธ ์์ (#246) * fix: CD ์คํฌ๋ฆฝํธ ์์ * chore: ์ ์ฅ ๋ฐ์ดํฐ dev์์ ํ์ฉํ ์ ์๋๋ก ์์ * [FE] refactor: LandingPage ๊ฒฝ๋ก ๋ณ๊ฒฝ (#249) * refactor: LandingPage์ ๊ฒฝ๋ก ๋ณ๊ฒฝ * refactor: App ์์ ์ฌ์ด๋๋ฐ ์ฃผ์ ์ฒ๋ฆฌ * [BE] Swagger API ๋ฌธ์ ์ ๋ฐ์ดํธ (#254) * docs: ๋ฆฌ๋ทฐ api ๋ฌธ์๋ฅผ ์ํ swagger ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: ์ฌ์ฉํ์ง ์๋ dto ์ญ์ * docs: api ๋ฌธ์์ ์ต์ ๋ฐ ์ต๋ ์ค์ ์๋ด ์ถ๊ฐ * docs: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน api๋ฅผ ์ํ swagger ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: Spring์์ ์ ๊ณตํ๋ APPLICATION_JSON_VALUE ์ฌ์ฉ * [BE] feat: ์์ธ์ ๋ํ ๋ก๊ทธ ์์ฑ (#255) * feat: Controller advice ์ ๋ก๊น ์ถ๊ฐ * refactor: ์คํ ํธ๋ ์ด์ค ๋ก๊น ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน ์์ฑ์ ๊ธธ์ด ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ๋ต๋ณ ๊ธธ์ด ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ฝ๋ ๊ฒ์ฆ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ์กฐํ ๊ฒ์ฆ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ ํ๋ ํค์๋ ์กด์ฌํ์ง ์๋ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ค๋ณต ์ ํ๋ ํค์๋ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ํค์๋ ์กฐํ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ ํ ํค์๋ ๊ฐฏ์ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ ํ๋ ์ง๋ฌธ ์ค๋ณต ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ง๋ฌธ ์กฐํ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ค๋ณต ์ง๋ฌธ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์คํ๋ง ๋ฐ์ ์์ธ ๋ก๊น ์ ๋ฉ์ธ์ง ์ถ๊ฐ * feat: ์ธ์ฝ๋ฉ ์ค์ * style: ๊ฐํ ์์ Co-authored-by: Donghoon Lee <[email protected]> * style: ๊ฐํ ๋ฐ ๊ณต๋ฐฑ ์์ * refactor: ๋ถํ์ํ ๊ฒ์ฆ ์ ๊ฑฐ - ์ ํ๋ ํค์๋์ ์ง๋ฌธ์ด DB์ ์๋์ง๋ฅผ validator ์์ ๊ฒ์ฆํ ํ์๋, repository.getById ๋ฅผ ํ ๋ ํ๋ฒ ๋ ๊ฒ์ฆ์ด ๋ค์ด๊ฐ๋ค. ๋ฐ๋ผ์ 'DB์ ์๋์ง'์ ๋ํ ๊ฒ์ฆ์ validator ์์ ํ ํ์๋ ์๋ค๋ ํ๋จ ํ์ ํด๋น ๋ก์ง์ ์ญ์ ํ๋ค. --------- Co-authored-by: Donghoon Lee <[email protected]> * [FE] refactor: Textarea๋ฅผ ์ฌ์ฉํ๋ ๊ณตํต ์ฅ๋ฌธํ ๋ต๋ณ ์ ๋ ฅ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ (#252) * feat: ๊ณตํต textarea ์ปดํฌ๋ํธ ์์ฑ * refactor: longReviewItem์ ๋ก์ง์ ์ปค์คํ ํ ์ผ๋ก ๋ถ๋ฆฌ * refactor: longReviewItem์ผ๋ก ์ด๋ฆ ๋ณ๊ฒฝ ๋ฐ ์ปดํฌ๋ํธ ๊ตฌํ * chore: ๊ธฐ์กด์ ReviewItem ์ ๊ฑฐ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ LongReviewItem ์ ์ฉ * [FE] refactor: ๊ณต์ฉ ๋ชจ๋ฌ ํ ์ถ๊ฐ ๋ฐ LongReviewItem ๋ฆฌํฉํ ๋ง (#258) * feat: ๋ชจ๋ฌ ์ํ ๊ด๋ฆฌ ํ ์ถ๊ฐ * refactor: LongReviewItem ์ปดํฌ๋ํธ๊ฐ ์ธ๋ถ์ event๋ฅผ props๋ก ๋ฐ์ ์ ์๋๋ก ๋ณ๊ฒฝ * [FE] test: LandingPage์์ ์ฌ์ฉํ๋ API์ ๋ํ ํ ์คํธ ์์ฑ (#251) * chore: ๋ถํ์ํ Fragment ์ ๊ฑฐ * test: LandingPage์์ ์ฌ์ฉํ๋ api ํ ์คํธ ์ถ๊ฐ * [FE] refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ react query๋ฅผ ์ ์ฉํ๊ณ API ์ฐ๋ ํ ์คํธ ์์ฑ (#256) * refactor: ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๋ก์ง์ react query ์ ์ฉ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ ๊ฒ์ ์์ฒญ ๋ก์ง์ useMutation ์ ์ฉ * refactor: query key ์์ํ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๋ก์ง์ useReviewForm์์ ์ ๊ฑฐ * chore: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ErrorSuspenseContainer ์ ์ฉ * chore: styled component๋ช ์์ * chore: ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ mock data๋ฅผ ๋ณ๊ฒฝ๋ api ํ์์ ๋ง๊ฒ ์์ * chore: useGetDataToWrite๊ฐ ๋ ๋ง์ ๋ฐํ๊ฐ์ ์ ๊ณตํ๋๋ก ์์ * test: useGetDataToWrite์ API ์์ฒญ ํ ์คํธ ์์ฑ * chore: dataToWrite๊ฐ ์๋ ๊ฒฝ์ฐ ์ํ ๊ธฐ๋ณธ๊ฐ ์ง์ * chore: msw๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ๋ทฐ ์์ฑ post ์์ฒญ mocking * chore: ๋ฆฌ๋ทฐ ์ ๋ณด mocking data ์์ฑ * chore: useMutationReview๊ฐ UseMutationResult ํ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋๋ก ์ค์ * test: useMutateReview์ API ์์ฒญ ํ ์คํธ ์์ฑ * chore: useGetDataToWrite์ ๋ฐํ๊ฐ์ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์์ * chore: LongReviewItem ์ปดํฌ๋ํธ ์ ์ฉ * [FE] fix: ์ง๋ฌธ ๋ฒํธ๊ฐ ์๋ชป ์ถ๋ ฅ๋๋ ์ค๋ฅ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ์ ์๋ชป๋ ๊ฒฝ๋ก๋ก ์ด๋ํ๋ ์ค๋ฅ ์์ (#265) * fix: ์ง๋ฌธ ๋ฒํธ๊ฐ ์๋ชป ์ถ๋ ฅ๋๋ ์ค๋ฅ ์์ * fix: ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ์ ์๋ชป๋ ๊ฒฝ๋ก๋ก ์ด๋๋๋ ๋ฌธ์ ์์ * [BE] feat: ์ง๋ฌธ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ์ผ๋ก ์นํ (#262) * chore: cd ํ ์คํธ ํ์ธ ์ฝ๋ ์์ฑ (#272) * fix: ์์ธ ๋ด์ฉ ํ์ํ ๋ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ ์นํ (#270) * [FE] feat: ํด๋ฆฝ๋ณด๋ ๋ณต์ฌ ์ปดํฌ๋ํธ ๊ตฌํ (#261) * feat: ํด๋ฆฝ๋ณด๋ ๋ณต์ฌ ์ปดํฌ๋ํธ ๊ตฌํ Co-authored-by: skylar1220 <[email protected]> * fix: ๋ถ๋ชจ ์์์ ๋๋น์ ๋ฐ๋ผ CopyTextButton์ด ์์์ง๋ ๋ฌธ์ ํด๊ฒฐ * refactor: ReviewGroupDataModal ์คํ์ผ ์กฐ์ - ์ ์ฒด ํฌ๊ธฐ ์ง์ ๋ฐ gap ์กฐ์ * chore: ๋ถํ์ํ padding ์ ๊ฑฐ * chore: index ํ์ผ์ CopyTextButton ์ถ๊ฐ --------- Co-authored-by: skylar1220 <[email protected]> * [FE] chore: front_deploy๋ฅผ develop์ ๋ฐ์ (#276) * [FE] feat: ์ง๋ฌธ ์์ฑ ํ์ด์ง QuestionCard, ReviewWritingCard ๊ณตํต ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ , ์ฌ๋ผ์ด๋ ๋ฐฉ์์ ๊ธฐ๋ฅ ์ถ๊ฐ (#247) * chore: .gitignore์์ ์ฃผ์ ์ ๊ฑฐ * feat: QuestionCard ์ปดํฌ๋ํธ ๊ตฌํ * feat: ReviewWritingCard ์ปดํฌ๋ํธ ๊ตฌํ * style: CSS ์์ฑ ์์ ์ ๋ ฌ * refactor: ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ๊ฐ๊ฐ Header์ Main ์น์ ์ผ๋ก ๋ถ๋ฆฌ * feat: ์ฌ๋ผ์ด๋ ๋ฐฉ์์ผ๋ก ์ง๋ฌธ ์นด๋๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์ ํ๋๋ ๊ธฐ๋ฅ ์ถ๊ฐ * design: pretendard ํฐํธ ์ ์ฉ * chore: ํค๋ review me ๋๋ฌธ์๋ก ๋ณ๊ฒฝ * refactor: QuestionCard, ReviewWritingCard ํด๋ ์์น ๋ณ๊ฒฝ - ReviewWritingFormPage์ components๋ก ์ด๋ * [FE] ์ง๋ฌธ ์์ ํ์ด์ง์ ํ์ํ ์ง๋ฌธ ๋ชฉ ๋ฐ์ดํฐ ๋ฐ ์นด๋์ ์ํ ์ฒ๋ฆฌ (#263) * [BE] fix: CD ์คํฌ๋ฆฝํธ ์์ (#246) * fix: CD ์คํฌ๋ฆฝํธ ์์ * chore: ์ ์ฅ ๋ฐ์ดํฐ dev์์ ํ์ฉํ ์ ์๋๋ก ์์ * [FE] refactor: LandingPage ๊ฒฝ๋ก โฆ
* [FE] ํ๋ก ํธ์๋ ์ด๊ธฐ ์ธํ (#5) * ci: webpack, react, typescript ์ค์ * ci: eslint, prettier, stylelint ์ค์ * [BE] feat: ์ด๊ธฐ ํ๊ฒฝ ์ค์ (#8) * feat: ์ด๊ธฐ ํ๊ฒฝ ์ค์ * refactor: ํด๋์ค ์ข ๋ฃ ์ ๊ฐํ ์ ๊ฑฐ * build: application.yml ์ค์ * [BE] feat: ์ด๊ธฐ ์ํฐํฐ ์์ฑ (#10) * feat: ์ด๊ธฐ ์ํฐํฐ ์์ฑ * refactor: ๋ฆฌ๋ทฐ ๋ด์ฉ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋ค๋์ผ ์ฐ๊ฒฐ * refactor: ํจํค์ง ๊ตฌ์กฐ ๊ณ ๋ คํ์ฌ ProjectGroup์ผ๋ก ์์ * refactor: Project -> Reviewer๋ก ๋ณ๊ฒฝ * refactor: ํ ์ด๋ธ๋ช ์ผ์น (reviewer_group) * [BE] feat: ๋ฆฌ๋ทฐ ์์ฑ (#15) * feat: ์ด๊ธฐ ์ํฐํฐ ์์ฑ * refactor: ๋ฆฌ๋ทฐ ๋ด์ฉ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋ค๋์ผ ์ฐ๊ฒฐ * refactor: ํจํค์ง ๊ตฌ์กฐ ๊ณ ๋ คํ์ฌ ProjectGroup์ผ๋ก ์์ * refactor: Project -> Reviewer๋ก ๋ณ๊ฒฝ * refactor: ํ ์ด๋ธ๋ช ์ผ์น (reviewer_group) * feat: ๋ฉค๋ฒ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ์ด๊ทธ๋ฃน ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ ๋ฌธํญ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ํค์๋ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ ํค์๋ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ ์์ฑ ๊ธฐ๋ฅ ๊ตฌํ * test: ๋ฆฌ๋ทฐ ์์ฑ ๊ธฐ๋ฅ ํ ์คํธ ์ถ๊ฐ --------- Co-authored-by: donghoony <[email protected]> Co-authored-by: nayonsoso <[email protected]> * [BE] feat: ํ ์คํธ ๋ฉ์๋๋ณ ๊ฒฉ๋ฆฌ (#19) * feat: ํ ์คํธ ๊ฒฉ๋ฆฌ๋ฅผ ์ํ DB Cleaner ๋ฐ Extension ๊ตฌํ * feat: Service์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์ด๋ ธํ ์ด์ ์ ๊ณต * test: ์๋น์ค ํ ์คํธ ์ด๋ ธํ ์ด์ ์ฌ์ฉํ๋๋ก ์์ * fix: ๋๋ฝ๋ ๋ฆฌ๋ทฐ ์์ฑ ๋งคํ URL ์ถ๊ฐ (#17) * [BE] feat: ๋ฆฌ๋ทฐ ์กฐํ (#22) * feat: ๋ฆฌ๋ทฐ ์กฐํ ๊ธฐ๋ฅ ์ถ๊ฐ * style: ๊ฐํ ๋ณ๊ฒฝ * test: ๋ฆฌ๋ทฐ ์กฐํ ๊ธฐ๋ฅ ํ ์คํธ ์ถ๊ฐ * refactor: ๋ฆฌ๋ทฐ ์กฐํ ๋ฉ์๋๋ช ๋ณ๊ฒฝ * refactor: id ํ์ ๋ณ๊ฒฝ * style: ๊ฐํ ์์ * fix: PostMapping ์์ --------- Co-authored-by: KIMGYUTAE <[email protected]> Co-authored-by: donghoony <[email protected]> * [BE] feat: ์ปค์คํ ์์ธ ์ฒ๋ฆฌ (#20) * feat: ์ปค์คํ ์์ธ ์์ฑ * feat: ์ปค์คํ ์์ธ ์ ์ฉ * feat: ๊ธ๋ก๋ฒ ์์ธ ์ฒ๋ฆฌ * [BE] feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ ๋ณด ๋ฐ ํค์๋ ์กฐํ API (#24) * feat: ํค์๋ ์กฐํ API * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์กฐํ API * refactor: PathVariable ๋ณ์๋ช ๋ณ๊ฒฝ * [FE] ๋ฆฌ๋ทฐ ์์ฑํ๋ฉด๊ณผ ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ๋ฉด ๊ฒฐํฉ (#26) * fix : webpack dev sever ์ด ๋ ์ค๋ฅ ์์ - package.json ์์ type :"module" ์ญ์ , stylelint ๊ด๋ จ ์ค์ ์ญ์ Co-Authored-By: ImxYJL <[email protected]> * ci : svgํ์ผ ๊ด๋ จ ํ๊ฒฝ ์ ํ Co-Authored-By: ImxYJL <[email protected]> * design : reset ์คํ์ผ, global style์์ ํฐํธ ์ ์ฉ Co-Authored-By: ImxYJL <[email protected]> * feat: ๋ฆฌ๋ทฐ ์ ๊ธ ๋ฒํผ ์ถ๊ฐ Co-Authored-By: ImxYJL <[email protected]> * feat: ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ๋ฉด์ ์ง๋ฌธ,๋ต ์ปดํฌ๋ํธ ์ถ๊ฐ Co-Authored-By: ImxYJL <[email protected]> * feat: ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ๋ฉด์ ํ๋ก์ ํธ ์ค๋ช ์ปดํฌ๋ํธ ์ถ๊ฐ Co-Authored-By: ImxYJL <[email protected]> * feat : ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ๋ฉด ํ์ด์ง ์ถ๊ฐ ๋ฐ ์์ธ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ ํ์ ์ถ๊ฐ Co-Authored-By: ImxYJL <[email protected]> * fix: webpack dev server ์ด ๋ ์ค๋ฅ ์์ Co-authored-by: soosoo22 <[email protected]> * design: reset css ์ ์ฉ Co-authored-by: soosoo22 <[email protected]> * feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ๊ตฌํ Co-authored-by: soosoo22 <[email protected]> * ci: svg ํ์ผ ๊ด๋ จ ์ค์ * fix : ๋จธ์ง์ถฉ๋ ํด๊ฒฐ ๋ฐ ์คํ ์์ * feat: react-router-dom, react-router ์ค์น ๋ฐ ์ค์ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ์ด์ง ๊ฒฐํฉ ๋ฐ ๋ฆฌํฉํ ๋ง * refactor: ๋ฆฌ๋ทฐ ํ์ ํ์ผ ๋ฆฌํฉํ ๋ง ๋ฐ ํ์ ์ถ๊ฐ * feat: api ์ค์ ์ถ๊ฐ ๋ฐ ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ์ด์ง์ api ํธ๋ค๋ฌ ์ถ๊ฐ --------- Co-authored-by: ImxYJL <[email protected]> Co-authored-by: chysis <[email protected]> Co-authored-by: soosoo22 <[email protected]> * [BE] refactor: ํจํค์ง ๊ตฌ์กฐ ๋ฆฌํฉํฐ๋ง (#30) * refactor: ํจํค์ง ๊ตฌ์กฐ ๊ตฌ์ฒดํ * refactor: ํจํค์ง ๊ตฌ์กฐ ๊ตฌ์ฒดํ(์๋น์ค, ์ปจํธ๋กค๋ฌ, ๋ ํฌ์งํ ๋ฆฌ) * [BE] feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ค๋ช ์์ฑ, ๋ง๊ฐ ๊ธฐํ ๋ฐ ๊ฒ์ฆ ๋ก์ง ์ถ๊ฐ (#34) * feat: BadRequestException ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ด๋ฆ, ์ค๋ช ๊ธธ์ด ๊ฒ์ฆ * [FE] design: theme ,์ ์ญ ์คํ์ผ์ ์ค์ (#41) * chore: ๋ถํ์ํ ํ์ผ ์ญ์ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> * design: theme ์์ฑ - ์์, ํฐํธ ์ฌ์ด์ฆ, ํฐํธ wieght ์ค์ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> * design: emotion ThemeProvider ์ ์ฉ ๋ฐ Theme ํ์ ํ์ฅ - emotion์์ ์ ๊ณตํ๋ Theme ํ์ ์ด ๋น ๊ฐ์ฒด์ฌ์ ์ฝ๋์์ ์ฌ์ฉํ๋ theme์ ๋ง๊ฒ ํ์ ์ ํ์ฅํจ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> * design : rem ์ ํ ๋ฐ reset.css๋ฅผ globalStyle์ ์ ์ฉ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: App์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: ImxYJL <[email protected]> Co-authored-by: soosoo22 <[email protected]> Co-authored-by: Fe <[email protected]> * [FE] ci: ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ๋ฐ msw ์ค์น, eslint import rule ์ถ๊ฐ ๋ฐ ์ ์ฉ (#44) * ci: eslint ์ค๋ฅ ์์ ๋ฐ import rule ์ถ๊ฐ ๋ฐ ๊ด๋ จ ํ๋ฌ๊ทธ์ธ ์ค์น - eslint-config-prettier - eslint-plugin-import Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * style: eslint ์ ์ฉ์ผ๋ก ์ธํ ์ฝ๋ ํฌ๋งทํ ๋ณ๊ฒฝ import ์์ ์ ์ฉ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * ci: msw ์ค์น Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: badahertz52 <[email protected]> Co-authored-by: ImxYJL <[email protected]> Co-authored-by: Fe <[email protected]> * [BE] docs: Swagger๋ฅผ ํ์ฉํ API ๋ฌธ์ ์๋ํ (#31) * chore: swagger-ui ์ค์ ์ถ๊ฐ * feat: swaggerConfig ์ถ๊ฐ * docs: ์ปจํธ๋กค๋ฌ์ swagger ์ด๋ ธํ ์ด์ ์ถ๊ฐ * docs: dto์ swagger ์ด๋ ธํ ์ด์ ์ถ๊ฐ * chore: api ๋ฌธ์ ์ค์ ํ์ผ ์ถ๊ฐ * refactor: SwaggerConfig info ์ค์ ํ์ผ ๋ณ์ ์ฐธ์กฐํ๋๋ก ๋ณ๊ฒฝ * docs: api ๋ฌธ์์ ์ํ์ฝ๋ ์ฌ๋ฐ๋ฅด๊ฒ ๋ ธ์ถ๋๋๋ก ๋ณ๊ฒฝ * chore: api ๋ฌธ์ ํ์ผ๋ช ๋ณ๊ฒฝ * chore: api-docs ํ๋กํผํฐ๋ช ๋ณ๊ฒฝ * refactor: ํ๋กํผํฐ ์ ๋ณด์ ์ค์ ํด๋์ค ๋ถ๋ฆฌ * refactor: ์ปจํธ๋กค๋ฌ ๋ด swagger ์ด๋ ธํ ์ด์ ๋ถ๋ฆฌ --------- Co-authored-by: KIMGYUTAE <[email protected]> * [BE] feat: ๋ฆฌ๋ทฐ ๋๋ฉ์ธ ๊ตฌ์ฒดํ, ์ ์ฑ ๊ตฌํ (#43) * feat: dto ๊ฒ์ฆ์ ์ํ ์์กด์ฑ ์ถ๊ฐ * feat: dto์ jakarta validation ์ด๋ ธํ ์ด์ ์ถ๊ฐ * feat: ์ปจํธ๋กค๋ฌ์์ ์์ฒญ์ ๊ฒ์ฆํ ์ ์๋๋ก ์ค์ * feat: FieldError ๋ด์ฉ์ ๋ณด์ฌ์ค ์๋ต ๊ฐ์ฒด ์์ฑ * feat: FieldError ํธ๋ค๋ฌ ์ถ๊ฐ * refactor: ๋ฌธ์์ด ๊ณต๋ฐฑ ๊ฒ์ฆ์ ์ํด NotBlank ์ฌ์ฉ * style: todo ์ฃผ์ ์ถ๊ฐ * feat: ๋ฐ๋๋ผ์ธ์ด ์ง๋๋ฉด ๋ฆฌ๋ทฐ๋ฅผ ์์ฑํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: ์ฌ์ด์ฆ ๊ฒ์ฆ๋ฌธ ์ ๊ฑฐ * style: ๊ฐํ ๋ณ๊ฒฝ * refactor: ์์ธ ์ด๋ฆ์ ๊ณผ๊ฑฐํ์ผ๋ก ๋ณ๊ฒฝ * refactor: RFC 9457 ํ์์ ์งํค๋ฉด์ ํ๋ ์๋ฌ ์ ๋ณด๋ฅผ ๋ฐํํ๋๋ก ์์ * chore: ์คํ ์์ * fix: conflict ํด๊ฒฐ * feat: dto์ jakarta validation ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: ๋ฌธ์์ด ๊ณต๋ฐฑ ๊ฒ์ฆ์ ์ํด NotBlank ์ฌ์ฉ * refactor: ์ฌ์ด์ฆ ๊ฒ์ฆ๋ฌธ ์ ๊ฑฐ * [BE] feat: ํค์๋ ๋๋ฉ์ธ ๊ตฌ์ฒดํ, ์ ์ฑ ๊ตฌํ (#40) * feat: ํค์๋ ์ผ๊ธ ์ปฌ๋ ์ ๋ฐ ์ ์ฝ์ฌํญ ๊ตฌํ * build: ํ ์คํธ ํ๊ฒฝ์์ Lombok ์์กด์ฑ ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ์ ์ถ๊ฐ๋ ํค์๋ ์ญ์ * feat: ๋ฆฌ๋ทฐ์ ํค์๋ ์ถ๊ฐ * feat: ์ผ๊ธ ์ปฌ๋ ์ ์ ์ด๋ฆ์ SelectedKeywords๋ก ๋ณ๊ฒฝ * refactor: ํค์๋ ๊ฐ์ ์ ์ฑ 5๊ฐ ๋ฐ์ * refactor: ์ค๋ณต ํค์๋ ๋ฉํธ ์์ * refactor: `deleteAll`๋ก ๋ฉ์๋๋ช ์์ * refactor: `duplicated` -> `duplicate`๋ก ์์ * refactor: ํค์๋ ๋๋ฑ์ฑ ๋น๊ต * test: ํค์๋ ๋ฑ๋ก ์ ๊ธฐ์กด ํค์๋ ์ญ์ ํ ์คํธ ์์ฑ * refactor: ์ฌ์ฉํ์ง ์๋ ํ๋ ์ญ์ * style: add newlines between comments * refactor: ํค์๋ ID ๊ธฐ๋ฐ ๋น๊ต * refactor: id๊ฐ ์๋ ๊ฒฝ์ฐ detail ๋น๊ต * refactor: ํค์๋ ํ ์คํธ ๋๋ฉ์ธ ๊ธฐ๋ฐ์ผ๋ก ์์ * [BE] feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ๋๋ฉ์ธ ๊ตฌ์ฒดํ, ์ ์ฑ ๊ตฌํ (#45) * feat: Member ์ํฐํฐ์ GitHub ID ์์ฑ ์ถ๊ฐ * feat: ์์ฑํ ๋ฆฌ๋ทฐ์ด๊ฐ ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน์ ์ํ๋์ง ๊ฒ์ฆ * feat: ๋ฆฌ๋ทฐ ์์ฑ ์, ์ด๋ฏธ ์์ฑํ ๋ฆฌ๋ทฐ๊ฐ ์์ง ์์์ง ๊ฒ์ฆ * refactor: Review ์ํฐํฐ์ reviewer์์ ์ฐ๊ด๊ด๊ณ ManyToOne์ผ๋ก ๋ณ๊ฒฝ * refactor: ์ปฌ๋ผ๋ช ์ค๋ฅ ์์ * refactor: gitHub ํ๊ธฐ -> github์ผ๋ก ๋ณ๊ฒฝ * refactor: GithubReviewGroup -> GithubReviewGroup ํด๋์ค๋ช ๋ณ๊ฒฝ * refactor: ๋๋ฝ๋ @Column ์ถ๊ฐ * test: ๋ฆฌ๋ทฐ ์์ฑ ํ ์คํธ ์, ๊นํ ์ฌ์ฉ์ ๊ทธ๋ฃน ๋ฐ์ดํฐ ์ ์ฅ ๋ถ๋ถ ์ถ๊ฐ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์, ์ค๋ณต ๋ฆฌ๋ทฐ ๊ฒ์ฆ ๋ก์ง ์์ * refactor: GithubReviewerGroupNotFoundException์ UnAuthorizedException ๊ตฌํํ๋๋ก ์์ * refactor: ReviewContentExistException -> ReviewAlreadySubmittedException ํด๋์ค๋ช ๋ณ๊ฒฝ * feat: UnAuthorizedException ์ถ๊ฐ * refactor: ๋ฉ์๋ ์์ ๋ณ๊ฒฝ * test: ๋ถํ์ํ given์ ์ญ์ * test: ํ ์คํธ๋ฅผ ์ํ ๋ฐ์ดํฐ ์ฝ์ repository๋ฅผ ํ์ฉํ๋๋ก ๋ณ๊ฒฝ --------- Co-authored-by: Donghoon Lee <[email protected]> * [FE] ๋ฆฌ๋ทฐ ์ฐ๊ธฐ ํ์ด์ง์ ํ์ ๋ ๋์์ธ์ ๋ฐ์ํ๊ณ , ๋ฆฌํฉํฐ๋งํ๋ค. (#53) * fix: eslint์์ ์ ๋ ๊ฒฝ๋ก๋ฅผ ์ฝ์ง ๋ชปํ๋ ์ค๋ฅ ์์ ์ ๋ ๊ฒฝ๋ก ์ง์ Co-Authored-By: ImxYJL <[email protected]> * design: ์์คํ ๊ธฐ๋ณธ ํฐํธ ํฌ๊ธฐ ์ง์ Co-Authored-By: ImxYJL <[email protected]> * chore: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ emotion.ts์์ theme ์ ๊ฑฐ Co-Authored-By: ImxYJL <[email protected]> * feat: ๊ณตํต ๋ฒํผ ์ปดํฌ๋ํธ ๊ตฌํ Co-Authored-By: ImxYJL <[email protected]> * feat: ํค์๋ ๋ฒํผ ์ปดํฌ๋ํธ ๊ตฌํ Co-Authored-By: ImxYJL <[email protected]> * feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ํผ๋ธ๋ฆฌ์ฑ ๋ฐ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ Co-Authored-By: ImxYJL <[email protected]> * feat: ๋ฆฌ๋ทฐ์ด ์ฝ๋ฉํธ ์ปดํฌ๋ํธ ๊ตฌํ Co-Authored-By: ImxYJL <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์์ ๋ฆฌ๋ทฐ ์์ดํ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ Co-Authored-By: ImxYJL <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ๋ฆฌํฉํฐ๋ง - ๋ฆฌ๋ทฐ์ด ์ฝ๋ฉํธ ์ถ๊ฐ - ๋ฆฌ๋ทฐ ์์ดํ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ - ๋ถ๊ฐ์ ์ธ ์คํ์ผ๋ง Co-Authored-By: ImxYJL <[email protected]> --------- Co-authored-by: ImxYJL <[email protected]> * [FE] feat: sidebar ๋ฆฌํฉํ ๋ง ๋ฐ ๊ธฐ๋ฅ ์ถ๊ฐ , topbar ์ถ๊ฐ, ๋ฐ์ํ ํ์ด์ง ๋ ์ด์์ ์ ์ฉ (#55) * style: globalStyles.ts์์ ๊ฒฝ๋ก ๊ณต๋ฐฑ ์ถ๊ฐ * docs: ๋ถํ์ํ import ์ญ์ Co-Authored-By: soosoo22 <[email protected]> * design : theme ์ถ๊ฐ - ์ถ๊ฐ๋ theme : breakpoints, sidebarWidth Co-Authored-By: soosoo22 <[email protected]> * chore: Header ์ปดํฌ๋ํธ ์ญ์ Co-Authored-By: soosoo22 <[email protected]> * feat : Topbar ์์ฑ, logo ์ด๋ฏธ์ง ๋ณ๊ฒฝ ๋ฐ SearchInput ์์ฑ - logo ์ด๋ฏธ์ง ๋ณ๊ฒฝ - Topbar์ ๋ค์ด๊ฐ๋ ์ปดํฌ๋ํธ๋ค (SidebarOpenButtion, Logo )์์ฑ - userProfile ์ด๋ฏธ์ง ์์ฑ - ๊ณตํต ์ปดํฌ๋ํธ : SearchInput ui ์์ฑ Co-Authored-By: soosoo22 <[email protected]> * feat : ํ์ด์ง ๋ ์ด์์ ์์ฑ - ๋ ์ด์์ ๊ด๋ จ ์ปดํฌ๋ํธ๋ค ์์ฑ Co-Authored-By: soosoo22 <[email protected]> * refactor : App์ ํ์ด์ง ๋ ์ด์์ ์ ์ฉ Co-Authored-By: soosoo22 <[email protected]> * refactor: Sidebar ๋ฆฌํฉํ ๋ง - ๋ฉ๋ด๋ช ์์์ฒ๋ฆฌ - ํผ๊ทธ๋ง ๋์์ธ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ Co-Authored-By: soosoo22 <[email protected]> * feat: sidebar ์ด๊ณ ๋ซ๋ ๊ธฐ๋ฅ ์ถ๊ฐ Co-Authored-By: soosoo22 <[email protected]> --------- Co-authored-by: soosoo22 <[email protected]> * fix: ์ปดํ์ผ ์๋ฌ ํด๊ฒฐ (#60) Co-authored-by: nayonsoso <[email protected]> * [FE] fix : stylelint ์ ์ฉ ์ค๋ฅ ์์ (#66) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * ci: CI ์คํฌ๋ฆฝํธ ์์ฑ (#70) * [BE] test: ๊นํ ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน์ ํ ์คํธ ์ถ๊ฐ ๋ฐ fixture ๋ฏธ์ ์ฉ ๋ถ๋ถ ๋ณด์ (#68) * test: GithubReviewerGroupRepository ํ ์คํธ ์ถ๊ฐ * test: ReviewServiceTest์ ํ ์คํธ fixture ์ ์ฉ * test: given, when, then์ ์ถ๊ฐ * test: given ๋ฐ์ดํฐ ์ค๋ฅ ์์ * [BE] chore: workflow ๋๋ ํฐ๋ฆฌ ์ด๋ (#74) * chore: workflow ๋๋ ํฐ๋ฆฌ ์ด๋ * fix: ๋ฐฑ์๋ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ * fix: ๋ฐฑ์๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ * fix: checkout actions์ ๋๋ ํ ๋ฆฌ ์ค์ * fix: ๋๋ ํ ๋ฆฌ ์ค์ ... * infra: CD ํ์ดํ๋ผ์ธ ์์ฑ (#76) * fix: cd gradle ๋๋ ํ ๋ฆฌ ์ด๋ (#77) * [BE] refactor: ๋จ๊ฑด ๋ฆฌ๋ทฐ ์กฐํ ์ ๋ฆฌ๋ทฐ์ด ์ ๋ณด ์ญ์ , ๋ฆฌ๋ทฐ ์์ฑ ์์ ์ถ๊ฐ (#65) * refactor: ๋ฆฌ๋ทฐ ์กฐํ ์ ๋ฆฌ๋ทฐ ์์ฑ ์๊ฐ ์ถ๊ฐ, ๋ฆฌ๋ทฐ์ด ์ ๋ณด ์ญ์ * fix: ํ ์คํธ ์ด๋ ธํ ์ด์ ํ์ฑํ ๋ฐ ์์ * chore: ํ ์คํธ ํด๋์ค ํจํค์ง ์ด๋ * refactor: ๋ถํ์ํ given์ ์ ๊ฑฐ * [FE] ๋ฆฌ๋ทฐ ์์ฑ, ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ์ด์ง์ ๋ฐฑ์๋ API ์ฐ๋ ๋ฐ dotenv-webpack ์ค์น, BASE_URL์ .env๋ก ์ด๋ (#78) * chore: gitignore์ yarn-error.log ์ถ๊ฐ * ci: env ํ์ผ ์ฌ์ฉ์ ์ํ dotenv-webpack ์ค์น * refactor: ์๋ํฌ์ธํธ์ env ํ์ผ์ ํตํ API_BASE_URL ๊ฒฝ๋ก ์ ์ฉ * fix: ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ ๋ฐ์ดํฐ์์ ๋ฐฑ์๋ ์๋ต๊ณผ ์์ฑ ์ด๋ฆ์ด ๋ฌ๋๋ ๋ถ๋ถ ์์ * refactor: ๋ฐฑ์๋ ์๋ต ๋ฐ ๋ฆฌํฉํ ๋ง๋ ๋ฆฌ๋ทฐ ์ฐ๊ธฐ ํ์์ ๋ง๊ฒ ๋ฆฌ๋ทฐ ์ฐ๊ธฐ ๋ชจํน ๋ฐ์ดํฐ ์์ * chore: ๋ถํ์ํ console.log ์ญ์ * [Fe] ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ๋ฐ์ํ๋ eslint ์ค๋ฅ๋ฅผ ์์ ํ์ต๋๋ค. (#81) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * [FE] ci: Jest, RTL ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ถ (#84) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * ci: jest ๋ฐ RTL ์ค์น * ci: jest ํ์ ์ค์ ์ถ๊ฐ * ci: CI๋ฅผ ์ํ yml ํ์ผ ํ ์คํธ * fix: ์๋ชป ์ฌ๋ผ๊ฐ ํ์ผ ์ญ์ --------- Co-authored-by: badahertz52 <[email protected]> * [BE] refactor: ๋ฐ์ํ๋ ๋ชจ๋ ์์ธ์ ํ์ ํต์ผ (#69) * refactor: ์ปค์คํ ์์ธ๋ฅผ ๋ฐ์์ํค๋๋ก ์์ * refactor: ๋ชจ๋ ์์ธ๋ฅผ ์ก์ ์ ์๋๋ก ์์ * refactor: ExceptionHandler๊ฐ ๋ฐํํ๋ ์์ธ ์๋ต ํ์ ๋ณ๊ฒฝ - ProblemDetail๋ก ๋ณ๊ฒฝ * refactor: ResponseEntityExceptionHandler๋ฅผ ์์ํ์ง ์๋๋ก ๋ณ๊ฒฝ * feat: ResponseEntityExceptionHandler์์ ์ฒ๋ฆฌํ๋ ์์ธ๋ฅผ ์ง์ ํธ๋ค๋ง * feat: CORS ์ค์ ์ถ๊ฐ (#88) * fix: ci PR ๋ธ๋์น ์ค์ (#92) * refactor: ์์ธ ํธ๋ค๋ฌ ์ธ์ ๋ณ๊ฒฝ (#87) * [BE] ๋๋ฉ์ธ ์ฐ๊ด๊ด๊ณ ์ฌ์ค์ (#97) * feat: ๊นํ๋ธ ์์ด๋ ์์๊ฐ ํฌ์ฅ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ํ์ `GithubId` ์ฌ์ฉ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ํค์๋ ๋ด ์ปฌ๋ผ ์์ (content) Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ์ผ๊ธ ์ปฌ๋ ์ ์ด๋ฆ ๋ณ๊ฒฝ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ์ง๋ฌธ ์ํฐํฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ๋ต๋ณ ๊ตฌ์กฐ ๋ณ๊ฒฝ, ๊ธธ์ด ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ํค์๋ ์ฐ๊ด๊ด๊ณ ์์ด ์ฐธ์กฐํ๋๋ก ์ค์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * test: ๋ต๋ณ ๊ธธ์ด ํ ์คํธ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ ์์ฑ ์ ํค์๋ ๋ฐ์์ ์์ฑ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * test: ๋ฆฌ๋ทฐ์ด์ ๋ฆฌ๋ทฐ์ด ๊ฐ์ ๊ฒฝ์ฐ์ ์์ธ ํ ์คํธ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: ๋ฆฌ๋ทฐ-ํค์๋ ๋งคํ ํ ์ด๋ธ ์ญ์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * fix: Fixture ์ฌ์ฉํด ์ปดํ์ผ ์๋ฌ ํด๊ฒฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ์ผ๋๋ค ํธ์ ๋ฉ์๋ ์์ฑ, Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๊นํ๋ธ ์์ด๋ ๊ทธ๋ฃน, ๋ฆฌ๋ทฐ์ด ์ฐ๊ด๊ด๊ณ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน - ๋ฆฌ๋ทฐ ์ผ๋๋ค ๋จ๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ ์ ์ฉ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน - ๋ฆฌ๋ทฐ ์ผ๋๋ค ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ ์ ์ฉ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ๊นํ๋ธ ์์ด๋ ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ์ ํ๋ฆฌ๋ทฐ ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: ์ฌ์ฉํ์ง ์๋ ํ์ผ ์ญ์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ ์ถ๊ฐ ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * fix: ์ํ ์ฐธ์กฐ NPE ํด๊ฒฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: Github ID ํจํค์ง ์ด๋ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ - ๋ฆฌ๋ทฐ ๋ต๋ณ ์ฐ๊ด๊ด๊ณ ์ค์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: ์ฌ์ฉํ์ง ์๋ ์ฝ๋ ์ ๊ฑฐ * refactor: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ์์ธ ๋ณด๊ธฐ ๊ตฌํ --------- Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * [FE] feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ๊ธฐ๋ฅ ๊ตฌํ (#89) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * chore: ํ์ฌ ์ฌ์ฉ๋์ง ์๋ ์ ์ฅ ๋ฒํผ ์จ๊น ์ฒ๋ฆฌ * design: ๊ธฐ๋ณธ ํฐํธ ์ฌ์ด์ฆ ๋ณ๊ฒฝ - 15px -> 16px๋ก ์์ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * design: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ์์ ๋ ๋์์ธ ์ ์ฉ - ์์ ์ฝ๋ ์์ - ๋ฒํผ ํธ๋ฒ ์ ์คํ์ผ๋ง ์์ - ๋ฆฌ๋ทฐ ๋ง๊ฐ์ผ ๋ ์ง ํ์ ๋ณ๊ฒฝ * design: ๋ฆฌ๋ทฐ ์ง๋ฌธ์ ์๋ด ๋ฌธ๊ตฌ ๋ฐ placeholder ์ถ๊ฐ - ๊ฐ ์ง๋ฌธ์ ' (20์ ์ด์)' ๋ฌธ๊ตฌ ํ๋์ฝ๋ฉ - ์ต๋ 1000์ ์ ๋ ฅ ๊ฐ๋ฅํ๋ค๋ ๋ฌธ๊ตฌ๋ฅผ textarea์ placeholder๋ก ์ถ๊ฐ * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * chore: api๋ช ๋ฐ endpoint๋ช ์์ * chore: ๋ฆฌ๋ทฐ ์ง๋ฌธ ๋ชฉ๋ก์ ์๋ฒ์์ ๋ฐ์์ค๊ธฐ ์ํด ์์ ์ ๊ฑฐ * chore: api ๋ฌธ์ ํ์์ ๋ง๊ฒ ๋ฐ์ดํฐ ํ์ ์์ * fix: ํค์๋ ๋ฒํผ์ ๋๋ ์ ๋ ํผ์ด ์ ์ถ๋๋ ๋ฌธ์ ํด๊ฒฐ * feat: ์์ฑํ ๋ฆฌ๋ทฐ ๋ด์ฉ์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ์ํ์ ๋๊ธฐํํ๋๋ก ์ค์ * design: textarea์ ํฌ๊ธฐ๋ฅผ ๊ณ ์ ์ํค๊ณ , ๋์ด๊ฐ ๊ฒฝ์ฐ ์คํฌ๋กค ๋๋๋ก ๋ณ๊ฒฝ * design: ๊ณตํต ๋ฒํผ ์ปดํฌ๋ํธ์ ์กฐ๊ฑด๋ถ ์คํ์ผ๋ง ๊ตฌํ * design: disabled ๊ด๋ จ ์์ ๋ณ์ ์ถ๊ฐ * feat: ๋ชจ๋ ํผ์ ์์ฑํ์ ๋ ์ ์ถ ๋ฒํผ์ด ํ์ฑํ๋๋๋ก ๊ตฌํ, ํค์๋ ์ ํ ๋ก์ง ๊ตฌํ * feat: ์ ์ถ ๋ฒํผ ํด๋ฆญ ์ confirm ๋ฐ์, ํ ๋ฒ ๋ ํ์ธ ์ ์ ์ถ๋๋๋ก ๊ตฌํ * feat: ํค์๋ ๋ฒํผ์ 5๊ฐ ์ด๊ณผํด์ ์ ํํ ์ ์๋๋ก ๊ตฌํ * feat: textarea์ 1000์๋ฅผ ์ด๊ณผํด์ ์ ๋ ฅํ ์ ์๋๋ก ๊ตฌํ ๋ฐ ํ์ฌ ๊ธ์์ ํ์ * fix: ์ด๋ฏธ ์ ํ๋ ํค์๋๋ฅผ ํด์ ํ๋ ค ํด๋ ๊ฐ์ ์ ํ๋๋ ์ค๋ฅ ์์ * refactor: ํผ ์ ํจ์ฑ ๊ฒ์ฌ ์กฐ๊ฑด๋ค์ ๋ณ์๋ก ๋ถ๋ฆฌ * design: ํค์๋ ๋ฒํผ๋ค์ ํฌ๊ธฐ๋ฅผ fit-content๋ก ๋ณ๊ฒฝ ๋ฐ ๊ฐ๋ก๋ก ๋์ดํ๋๋ก ์์ * chore: api ์ฐ๊ฒฐ ์ด์ , ์์๋ก ํผ ์ ๋ณด๋ฅผ ์ฝ์์ ์ถ๋ ฅํ๋๋ก ์ค์ * chore: ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ํ์ด์ง ๋ผ์ฐํฐ ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ํ์ด์ง ๋ฐ ์์ฑ ์๋ฃ ์ ํ์ด์ง ์ด๋ ๊ธฐ๋ฅ ๊ตฌํ * refactor: ๋ฆฌ๋ทฐ ์์ดํ ์ปดํฌ๋ํธ ๋งค์ง๋๋ฒ ์์ํ * chore: ์๊ณ ์์ด์ฝ ์คํ์ผ ์ปดํฌ๋ํธํ * refactor: ๋ฆฌ๋ทฐ ๊ด๋ จ ๋ฉ์์ง ์์ ๋ถ๋ฆฌ * design: ๋ฆฌ๋ทฐ ์์ฑ๋ placeholder ๋ฐ ๋ณธ๋ฌธ font weight ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ๋ฌธํญ ๋ฒํธ ๋์ ์ผ๋ก ๋ถ์ฌํ๋๋ก ๋ณ๊ฒฝ ๋ฐ ์์ํ ์ ์ฉ * refactor: on-, handle- prefix ๊ด๋ จ ์ปจ๋ฒค์ ์ ์ฉ ๋ฐ ํค์๋ ๋ฒํผ ์ธํฐํ์ด์ค ํ์ฅ * chore: ๋ฆฌ๋ทฐ ๋ต๋ณ์ ๊ธธ์ด๊ฐ ์ ํจํ์ง ์ฒดํฌํ๋ ๋ณ์์ ์ด๋ฆ์ ์๋ฏธ๋ฅผ ์ ๋๋ฌ๋ด๋๋ก ์์ * refactor: ๊ณตํต ๋ฒํผ์ ํ์ ๋ณ ์คํ์ผ์ ํจ์๋ก ๋ถ๋ฆฌ * style: api ํธ์ถ ํจ์๋ช ์ปจ๋ฒค์ ์ ๋ง๊ฒ ์์ * chore: ๋ถํ์ํ PropsWithChildren import ์ ๊ฑฐ --------- Co-authored-by: badahertz52 <[email protected]> * [FE] MSW๋ฅผ mock server๋ก ์ ํ (#95) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * style: eslint ์ ์ฉ์ ๋ฐ๋ฅธ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง import ์์ ์ ๋ฆฌ * refactor: formatDate๋ฅผ utils/date ํ์ผ๋ก ์ด๋ * design: theme์ colors,, fontSize ๋ณ๊ฒฝ ๋ฐ borderRadius ์ถ๊ฐ * feat: MultilineTextViewer ์ปดํฌ๋ํธ ์์ฑ - ๊ฐํ์ด ํฌํจ๋ string์ ๊ฐํ์ ์ ์ฉํด์ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ * feat: ๊นํ๋ธ ์ ์ฅ์ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ ์์ฑ * feat: ๋ฆฌ๋ทฐ์ ๊ด๋ จ๋ ๋ ์ง UI ์ปดํฌ๋ํธ ์์ฑ * featr: LockButton ์ญ์ LockToggle ์ถ๊ฐ * refactor: ํผ๊ทธ๋ง ๋์์ธ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ReviewDescription ๋ณ๊ฒฝ * feat: ReviewComment ์ปดํฌ๋ํธ ์์ฑ * refactor: ReviewViewSection -> ReviewSection ์ผ๋ก ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ๋ถํ์ํ ์ปดํฌ๋ํธ ์ญ์ : RevieAnswer , ReviewQuestion * refactor: DetailedReviewPage ๋ฆฌํฉํ ๋ง - ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ - ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ์ปดํฌ๋ํธ(DetailedReviewPage) ๋ฆฌํฉํ ๋ง - DetailedReviewPage ํด๋์ styles.ts ์ญ์ * refactor: review์ ๋ํ ํ์ ๋ณ๊ฒฝ * design : ReviewDate์ ํด๋ก ์คํ์ผ ์ ์ฉ * feat: KeywordSection ์ปดํฌ๋ํธ ์์ฑ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ํค์๋ ๋ถ๋ถ ์ปดํฌ๋ํธ ์์ฑ * feat: ReviewSectionHeader ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ์์ ๋ฐ๋ณต๋๋ ์ง๋ฌธ,ํค์๋ ํค๋๋ถ๋ถ์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌ * design : ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ width ๋ณ๊ฒฝ * refactor: DetailedReview์ ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํฐ ๋ณ๊ฒฝ - KeywordSection ์ ์ฉ * design : formWidth๋ฅผ theme์ ์ถ๊ฐ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ/๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ์ ์ฉ * fix: Layout์์ ๊ฐ๋ก ์คํฌ๋กค ์๊ธฐ๋ ์ค๋ฅ ์์ - 100vw๋ ์คํฌ๋กค์ ํฌํจํ ๋ทฐํฌํธ ๋๋น๋ผ์ 100%์ผ๋ก ์์ * feat: ๋ฆฌ๋ทฐ ์ํ์ด์ง router์ ๋ผ์ฐํฐ ํ๋ผ๋ฏธํฐ ์ ์ฉ ๋ฐ ๊ด๋ จ ์ค์ ๋ณ๊ฒฝ - ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์ํด ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง id๋ฅผ sidebar์ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ๋ฉ๋ด link์ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธํ์ด์ง(DetailedReviewPage)์ api ํธ๋ค๋ฌ ์์ * docs: ๋ณ์๋ช ๋ณ๊ฒฝ (isLock -> isPublic) * refactor: ๊นํ ์ ์ฅ์ ๋ก๊ณ ์ฃผ์ ๋ณ์๋ช ๋ณ๊ฒฝ - projectImgSrc -> thumbnailUrl * ci: msw ๊ด๋ จ ํจํค์ง ์ค์น * ci: msw ๊ด๋ จ ์ค์ ํ์ผ ์ถ๊ฐ - ๋ธ๋ผ์ฐ์ ํ๊ฒฝ, node ํ๊ฒฝ์์ msw๋ก ๋ชฉ์๋ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ด๋ จ ํ์ผ ์ถ๊ฐ * feat: mock ํธ๋ค๋ฌ ์ถ๊ฐ ๋ฐ ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง ๋ชฉ ๋ฐ์ดํฐ ์ถ๊ฐ * feat: root์์ ๋ชฉ์๋ฒ ์ฌ์ฉํ ์ ์๋๋กํจ * refactor: endpoint ์์ - env ์์ ์๋ฒ ์ฃผ์ ๋์ ์ฌ๋์ ๋ฃ๋ ๊ฒ์ผ๋ก ํต์ผ * feat: ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง(detailedReviewPage)์ ๋ชฉ์๋ฒ ์ฐ๊ฒฐ ๋ฐ ๊ด๋ จ ์ฝ๋ ์์ - ์ํ๋ช ๋ณ๊ฒฝ: detailReview -> detailedReview - detailedReview ํ์ ์ null ์ถ๊ฐ ๋ฐ ๊ทธ์ ๋ฐ๋ฅธ ์ค๋ฅ ํธ๋ค๋ง ์ถ๊ฐ - deadline์ string ํ์ ์ผ๋ก response๋ก ์ ๋ฌ๋์ด์ new Date๋ก ๊ฐ์ธ์ props๋ก ์ ๋ฌ * docs: indexhtml์ title ๋ณ๊ฒฝ * style: apis/review.ts ์ import ๊ด๋ จ eslint rule ์ ์ฉ์ ๋ฐ๋ฅธ ์์ * fix: ts์์ process ์ฝ์ง ๋ชปํ๋ ์ค๋ฅ ์์ * fix: webpack dev server script ๋ณต์ * [FE] ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง : url router ์ฐ๋, ๋ณ๊ฒฝ๋ ๋์์ธ ๋ฐ์ ๋ฐ ์๋ฒ์์ api๋ฅผ ์ฐ๋ (#91) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * style: eslint ์ ์ฉ์ ๋ฐ๋ฅธ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง import ์์ ์ ๋ฆฌ * refactor: formatDate๋ฅผ utils/date ํ์ผ๋ก ์ด๋ * design: theme์ colors,, fontSize ๋ณ๊ฒฝ ๋ฐ borderRadius ์ถ๊ฐ * feat: MultilineTextViewer ์ปดํฌ๋ํธ ์์ฑ - ๊ฐํ์ด ํฌํจ๋ string์ ๊ฐํ์ ์ ์ฉํด์ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ * feat: ๊นํ๋ธ ์ ์ฅ์ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ ์์ฑ * feat: ๋ฆฌ๋ทฐ์ ๊ด๋ จ๋ ๋ ์ง UI ์ปดํฌ๋ํธ ์์ฑ * featr: LockButton ์ญ์ LockToggle ์ถ๊ฐ * refactor: ํผ๊ทธ๋ง ๋์์ธ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ReviewDescription ๋ณ๊ฒฝ * feat: ReviewComment ์ปดํฌ๋ํธ ์์ฑ * refactor: ReviewViewSection -> ReviewSection ์ผ๋ก ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ๋ถํ์ํ ์ปดํฌ๋ํธ ์ญ์ : RevieAnswer , ReviewQuestion * refactor: DetailedReviewPage ๋ฆฌํฉํ ๋ง - ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ - ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ์ปดํฌ๋ํธ(DetailedReviewPage) ๋ฆฌํฉํ ๋ง - DetailedReviewPage ํด๋์ styles.ts ์ญ์ * refactor: review์ ๋ํ ํ์ ๋ณ๊ฒฝ * design : ReviewDate์ ํด๋ก ์คํ์ผ ์ ์ฉ * feat: KeywordSection ์ปดํฌ๋ํธ ์์ฑ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ํค์๋ ๋ถ๋ถ ์ปดํฌ๋ํธ ์์ฑ * feat: ReviewSectionHeader ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ์์ ๋ฐ๋ณต๋๋ ์ง๋ฌธ,ํค์๋ ํค๋๋ถ๋ถ์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌ * design : ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ width ๋ณ๊ฒฝ * refactor: DetailedReview์ ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํฐ ๋ณ๊ฒฝ - KeywordSection ์ ์ฉ * design : formWidth๋ฅผ theme์ ์ถ๊ฐ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ/๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ์ ์ฉ * fix: Layout์์ ๊ฐ๋ก ์คํฌ๋กค ์๊ธฐ๋ ์ค๋ฅ ์์ - 100vw๋ ์คํฌ๋กค์ ํฌํจํ ๋ทฐํฌํธ ๋๋น๋ผ์ 100%์ผ๋ก ์์ * feat: ๋ฆฌ๋ทฐ ์ํ์ด์ง router์ ๋ผ์ฐํฐ ํ๋ผ๋ฏธํฐ ์ ์ฉ ๋ฐ ๊ด๋ จ ์ค์ ๋ณ๊ฒฝ - ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์ํด ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง id๋ฅผ sidebar์ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ๋ฉ๋ด link์ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธํ์ด์ง(DetailedReviewPage)์ api ํธ๋ค๋ฌ ์์ * docs: ๋ณ์๋ช ๋ณ๊ฒฝ (isLock -> isPublic) * refactor: ๊นํ ์ ์ฅ์ ๋ก๊ณ ์ฃผ์ ๋ณ์๋ช ๋ณ๊ฒฝ - projectImgSrc -> thumbnailUrl * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง api ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง keyword ํ์ ๋ณ๊ฒฝ - api endpoint ๋ณ๊ฒฝ , router ๋ณ๊ฒฝ, sidebar ์์ธ๋ณด๊ธฐ ๊ฒฝ๋ก ๋ณ๊ฒฝ - useState์ ๋น ๊ฐ์ ๋ํ ํ์ ์ถ๋ก ์ฌ์ฉ * [BE] test: ๋๋ฉ์ธ ์ฐ๊ด๊ด๊ณ ์ฌ์ค์ ํ ํ ์คํธ ์์ฑ (#101) * test: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ํ ์คํธ ์์ฑ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ ์คํธ๋ฅผ `ReviewTest`๋ก ์ด๋ * test: ๋ฆฌ๋ทฐ์ด ์ค๋ณต ์ถ๊ฐ ํ ์คํธ * refactor: Test Fixture ์ฌ์ฉํ๋๋ก ์์ * refactor: ์์ธ ํด๋์ค๋ช ํต์ผ * style: ํ ์คํธ ๊ฐํ * refactor: ํ ์คํธ๋ช ๋ช ํํ๊ฒ ์์ * refactor: ํ์ ๋๋ฉ์ธ์์์ ๋น๊ต๋ฅผ GithubId๋ก ์งํํ๋๋ก ์์ * refactor: createdAt ์ฌ์ฉํ์ง ์๊ณ , deadline์ผ๋ก ์์ * refactor: ํ๋๋ช reviewerGithubIds๋ก ํต์ผ * test: ๋ฆฌ๋ทฐ์ด ์ค๋ณต ์์ฑ ๊ฒ์ฆ * refactor: reviewer/reviewee ํต์ผ * refactor: ๋ฆฌ๋ทฐ์ด-๋ฆฌ๋ทฐ์ด github id๋ฅผ ๋ช ์ * refactor: ํ ์คํธ์ ํ๋์ ๊ฒ์ฆ๋ง ์งํ๋๋๋ก ์์ * [FE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง ๊ธฐ๋ฅ ๊ตฌํ (#90) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * feat: DropDown ์ปดํฌ๋ํธ ๊ตฌํ - ์ฌ์ฉ์ ์ ํ์ ์ํ `DropDown` ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํ - `onChange` ์ด๋ฒคํธ ํธ๋ค๋ฌ์ `options` ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ์ต์ ์ ๋์ ์ผ๋ก ํ์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: svg ์์ด์ฝ ํฌ๊ธฐ ์์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * design: Topbar UI ์์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * design: ๋ฒํผ, ๊ฒ์์ฐฝ UI ์์ ํ export Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * feat: ReviewPreviewCard ์ปดํฌ๋ํธ ๊ตฌํ - ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋ ์ปดํฌ๋ํธ ๊ตฌํ - ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ด๋ฆ, ์์ฑ์ผ, ๋ฆฌ๋ทฐ ๋ด์ฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ํค์๋, ๊ณต๊ฐ ์ฌ๋ถ๋ฅผ ํ์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: ReviewPreview ์ธํฐํ์ด์ค ์ถ๊ฐ - ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ `ReviewPreview` ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํ์ต๋๋ค. Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * feat: SearchSection ์ปดํฌ๋ํธ ๊ตฌํ - ๊ฒ์ ์ ๋ ฅ์ฐฝ, ๊ฒ์ ๋ฒํผ, ๋๋กญ๋ค์ด์ ํฌํจํ์ฌ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * feat: ReviewPreviewListPage ๊ตฌํ ๋ฐ ๋ชจ์ ๋ฐ์ดํฐ ์ถ๊ฐ - `ReviewPreviewListPage` ์ปดํฌ๋ํธ ๊ตฌํ - `SearchSection`์ ํฌํจํ์ฌ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํ - `ReviewPreviewCard`๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ํ์ - ๋ชจ์ ๋ฐ์ดํฐ(`mockReviewPreviews`) ์ถ๊ฐ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: import ์ค๋ณต ๋ฐ ์์ ์ ๋ฆฌ, ReviewPreviewListPage ๋ผ์ฐํธ ์ถ๊ฐ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: ์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ๊ฐ์ธ๊ธฐ ๋๋ฌธ์ Container๋ก ๋ณ๊ฒฝ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ๊ฐ์ ธ์ค๊ธฐ ์ํด getReviewListApi ํจ์ ์ถ๊ฐ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * refactor: ์์ธ ๋ฆฌ๋ทฐ ๋ถ๋ฌ์ค๊ธฐ api ์๋ํฌ์ธํธ ์์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * refactor: ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง API ์ฐ๋ ๋ถ๋ถ ์์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: badahertz52 <[email protected]> Co-authored-by: ImxYJL <[email protected]> Co-authored-by: Fe <[email protected]> * [BE] feat: ๋ฆฌ๋ทฐ ์์ฑ API ๊ตฌํ (#102) * refactor: ๋ฆฌ๋ทฐ ์์ฒญ dto ์์ * refactor: ๋ฆฌ๋ทฐ ์ฝํ ์ธ ์์ฑ ์, ๋ฆฌ๋ทฐ์ ์์ ์ ์ถ๊ฐํ๋๋ก ๋ณ๊ฒฝ * feat: QuestionRepository ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ์์ฑ ๊ธฐ๋ฅ ์ถ๊ฐ * test: ๋ฆฌ๋ทฐ ์์ฑ ํ ์คํธ ์ถ๊ฐ * refactor: ReviewGroup ์์ฑ ์, GithubIdReviewerGroup๋ ๊ฐ์ด ์ ์ฅ๋๋๋ก ๋ณ๊ฒฝ * refactor: GithubId equals ๋ฐ hashcode ์ฌ์ ์ * refactor: review ์์ฑ ์, reviewGroup์ด null์ด ์๋๋๋ก ๋ณ๊ฒฝ * refactor: EqualsAndHashCode์ id ๋ช ์ * refactor: reviewee๋ฅผ reviewerGroup ํตํด์ ๋ฐ์์ค๋๋ก ๋ณ๊ฒฝ * refactor: ํ๋ผ๋ฏธํฐ long ํ์ ์ผ๋ก ๋ณ๊ฒฝ * test: ์ฌ์ฉํ์ง ์๋ ๋ณ์ ์ ๊ฑฐ * test: ํ๋ผ๋ฏธํฐ๋ณ๋ก ๊ฐํํ๋๋ก ๋ณ๊ฒฝ * refactor: ReviewerGroupGithubIds์ reviewerGithubIds๋ฅผ CascadeType.PERSIST๋ก ๋ณ๊ฒฝ * chore: ๋ค๋ฅธ ์์ ์์ ์งํ๋ ์ฌํญ์ผ๋ก ์ฌ์ฉํ์ง ์๋ ํ ์คํธ ์ญ์ * [FE] Github Actions๋ก CI ๊ตฌ์ถ (#96) * ci: CI๋ฅผ ์ํ yml ํ์ผ ์์ฑ * ci: yarn.lock ๊ฒฝ๋ก ์ถ๊ฐ * ci: working-directory ์ถ๊ฐ * cI: ๋์ ํ ์คํธ๋ฅผ ์ํด push ๋ธ๋์น ๊ฒฝ๋ก ์กฐ๊ฑด์์ frontend ์์ ์ ๊ฑฐ * ci: ํ ์คํธ๋ฅผ ์ํด ํ์ฌ ๋ธ๋์น๋ ์กฐ๊ฑด์ ์ถ๊ฐ * ci: package์ test ๋ช ๋ น์ด ์ถ๊ฐ * ci: yarn.lock ํ์ผ ์ ๋ฐ์ดํธ * ci: ํ ์คํธ ํ์ผ ํ์ ์์ * chore: ํ์์๋ ํ์ผ ์ญ์ * chore: svg ํ์ผ์ ๋๋ฌธ์๋ก importํ ๊ฒ๋ค ์๋ฌธ์๋ก ์์ * ci: ์นํฉ env ์ค์ ์ ๋ฐ์ดํธ * ci: process.env ์ฌ์ฉ์ ์ํ ํ์ ์ค์ * ci: env ์นํฉ ์ค์ ๊ฒฝ๋ก๋ฅผ ์ ๋ ๊ฒฝ๋ก๋ก ๋ณ๊ฒฝ * ci: env ์นํฉ ์ค์ ๊ฒฝ๋ก ์์ * ci: env ์ ๋๊ฒฝ๋ก ์์ * ci: ์ ๋๊ฒฝ๋ก ์์ 2 * ci: ์ฝ๊ธฐ ๊ถํ์ ๋ช ์์ ์ผ๋ก ์ฃผ๊ณ ํ ์คํธ * ci: dist ํ์ผ ํ ์คํธ * ci: CI ํ๊ฒฝ์์๋ env ํ์ผ ์์ฑ * ci: ๋ฐฐํฌ ์ ์ ๋์ ํ์ธ์ ์ํ github pages ์์ ๋ฐฐํฌ ์ค์ * ci: ์์ ๋ฐฐํฌ ์ฝ๋ ์ญ์ * ci: develop ๋ธ๋์น๋ก frontend ์ดํ ๊ฒฝ๋ก์์ PR์ด ์ฌ๋ผ์ฌ ๋ CI๊ฐ ์คํ๋๋๋ก ์์ * ci: node ์ค์น ์๋ฌ ํด๊ฒฐ * [BE] feat: ๋ฆฌ๋ทฐ์ ํ์ํ ์ ๋ณด ์กฐํ ๊ธฐ๋ฅ ์ถ๊ฐ (#103) * test: QuestionTestFixture ์์ฑ * feat: ๋ชจ๋ ๋ฆฌ๋ทฐ ๋ฌธํญ์ ์กฐํํ๋ ๊ธฐ๋ฅ ๊ตฌํ * feat: ๋ชจ๋ ํค์๋๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ ๊ตฌํ * test: ReviewerGroupFixture ์์ฑ * feat: ๋ฆฌ๋ทฐ ์์ฑ ์ ํ์ํ ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ ๋ณด๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ ๊ตฌํ * feat: ๋ฆฌ๋ทฐ ์์ฑ ์ ํ์ํ ์ ๋ณด๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ ๊ตฌํ * refactor: @ServiceTest ์ ์ฉ * refactor: swagger ์ ์ฉ * refactor: ํ๋๋ช ๋ณ๊ฒฝ * style: ๊ฐํ ์ถ๊ฐ * refactor: ๋ ์ง ํ์ ๋ณ๊ฒฝ * test: import๋ฌธ ์ ๊ฑฐ * refactor: ReviewCreationResponse ํจํค์ง ๋ณ๊ฒฝ * refactor: readOnly ํธ๋์ญ์ ์ ์ฉ * fix: ๋ฆฌ๋ทฐ์ด ์ค๋ณต ๊ฒ์ฆ ์์ ์ ๊ฑฐ --------- Co-authored-by: donghoony <[email protected]> * [FE] ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์์ MSW๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ mocking (#111) * chore: ์ค๋ณต๋ ์ธํฐํ์ด์ค ์ ๊ฑฐ * feat: MSW ํธ๋ค๋ฌ ๋ฐ mock data ์ถ๊ฐ * chore: ๋ฆฌ๋ทฐ ์ฐ๊ธฐ ํ์ด์ง ๋ฐ์ดํฐ endpoint ์์ * feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ msw๋ฅผ ์ ์ฉํ์ฌ ์๋ฒ mocking * merge * [FE] ๊ณตํต ์ปดํฌ๋ํธ์ธ ๋ชจ๋ฌ์ ๋ง๋ ๋ค. (#110) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * style: eslint ์ ์ฉ์ ๋ฐ๋ฅธ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง import ์์ ์ ๋ฆฌ * refactor: formatDate๋ฅผ utils/date ํ์ผ๋ก ์ด๋ * design: theme์ colors,, fontSize ๋ณ๊ฒฝ ๋ฐ borderRadius ์ถ๊ฐ * feat: MultilineTextViewer ์ปดํฌ๋ํธ ์์ฑ - ๊ฐํ์ด ํฌํจ๋ string์ ๊ฐํ์ ์ ์ฉํด์ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ * feat: ๊นํ๋ธ ์ ์ฅ์ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ ์์ฑ * feat: ๋ฆฌ๋ทฐ์ ๊ด๋ จ๋ ๋ ์ง UI ์ปดํฌ๋ํธ ์์ฑ * featr: LockButton ์ญ์ LockToggle ์ถ๊ฐ * refactor: ํผ๊ทธ๋ง ๋์์ธ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ReviewDescription ๋ณ๊ฒฝ * feat: ReviewComment ์ปดํฌ๋ํธ ์์ฑ * refactor: ReviewViewSection -> ReviewSection ์ผ๋ก ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ๋ถํ์ํ ์ปดํฌ๋ํธ ์ญ์ : RevieAnswer , ReviewQuestion * refactor: DetailedReviewPage ๋ฆฌํฉํ ๋ง - ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ - ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ์ปดํฌ๋ํธ(DetailedReviewPage) ๋ฆฌํฉํ ๋ง - DetailedReviewPage ํด๋์ styles.ts ์ญ์ * refactor: review์ ๋ํ ํ์ ๋ณ๊ฒฝ * design : ReviewDate์ ํด๋ก ์คํ์ผ ์ ์ฉ * feat: KeywordSection ์ปดํฌ๋ํธ ์์ฑ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ํค์๋ ๋ถ๋ถ ์ปดํฌ๋ํธ ์์ฑ * feat: ReviewSectionHeader ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ์์ ๋ฐ๋ณต๋๋ ์ง๋ฌธ,ํค์๋ ํค๋๋ถ๋ถ์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌ * design : ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ width ๋ณ๊ฒฝ * refactor: DetailedReview์ ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํฐ ๋ณ๊ฒฝ - KeywordSection ์ ์ฉ * design : formWidth๋ฅผ theme์ ์ถ๊ฐ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ/๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ์ ์ฉ * fix: Layout์์ ๊ฐ๋ก ์คํฌ๋กค ์๊ธฐ๋ ์ค๋ฅ ์์ - 100vw๋ ์คํฌ๋กค์ ํฌํจํ ๋ทฐํฌํธ ๋๋น๋ผ์ 100%์ผ๋ก ์์ * feat: ๋ฆฌ๋ทฐ ์ํ์ด์ง router์ ๋ผ์ฐํฐ ํ๋ผ๋ฏธํฐ ์ ์ฉ ๋ฐ ๊ด๋ จ ์ค์ ๋ณ๊ฒฝ - ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์ํด ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง id๋ฅผ sidebar์ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ๋ฉ๋ด link์ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธํ์ด์ง(DetailedReviewPage)์ api ํธ๋ค๋ฌ ์์ * docs: ๋ณ์๋ช ๋ณ๊ฒฝ (isLock -> isPublic) * refactor: ๊นํ ์ ์ฅ์ ๋ก๊ณ ์ฃผ์ ๋ณ์๋ช ๋ณ๊ฒฝ - projectImgSrc -> thumbnailUrl * ci: msw ๊ด๋ จ ํจํค์ง ์ค์น * ci: msw ๊ด๋ จ ์ค์ ํ์ผ ์ถ๊ฐ - ๋ธ๋ผ์ฐ์ ํ๊ฒฝ, node ํ๊ฒฝ์์ msw๋ก ๋ชฉ์๋ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ด๋ จ ํ์ผ ์ถ๊ฐ * feat: mock ํธ๋ค๋ฌ ์ถ๊ฐ ๋ฐ ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง ๋ชฉ ๋ฐ์ดํฐ ์ถ๊ฐ * feat: root์์ ๋ชฉ์๋ฒ ์ฌ์ฉํ ์ ์๋๋กํจ * refactor: endpoint ์์ - env ์์ ์๋ฒ ์ฃผ์ ๋์ ์ฌ๋์ ๋ฃ๋ ๊ฒ์ผ๋ก ํต์ผ * feat: ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง(detailedReviewPage)์ ๋ชฉ์๋ฒ ์ฐ๊ฒฐ ๋ฐ ๊ด๋ จ ์ฝ๋ ์์ - ์ํ๋ช ๋ณ๊ฒฝ: detailReview -> detailedReview - detailedReview ํ์ ์ null ์ถ๊ฐ ๋ฐ ๊ทธ์ ๋ฐ๋ฅธ ์ค๋ฅ ํธ๋ค๋ง ์ถ๊ฐ - deadline์ string ํ์ ์ผ๋ก response๋ก ์ ๋ฌ๋์ด์ new Date๋ก ๊ฐ์ธ์ props๋ก ์ ๋ฌ * docs: indexhtml์ title ๋ณ๊ฒฝ * style: apis/review.ts ์ import ๊ด๋ จ eslint rule ์ ์ฉ์ ๋ฐ๋ฅธ ์์ * fix: ts์์ process ์ฝ์ง ๋ชปํ๋ ์ค๋ฅ ์์ * fix: webpack dev server script ๋ณต์ * feat: ModalPortal ์ ์ฑ * feat: SideModal ์ปดํฌ๋ํธ, useSide ์ ์ฑ ๋ฐ Sidebar์ ์ ์ฉ * feat: ModalBackground ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ ์ฉ * fix: ๋ชจ๋ฌ ์ด๋ฆด ๋ ์คํฌ๋กค๋ฐ ๋ง๋ ๊ธฐ๋ฅ ์ค๋ฅ ์์ * design : ModalPortal ์ฌ์ด์ฆ ๋จ์ ๋ณ๊ฒฝ (% -> vw, vh) * feat: Button ์ปดํฌ๋ํธ๊ฐ button ์์ฑ์ props๋ก ๋ฐ์ ์ ์๋๋ก ์์ * feat: ConfirmModal ์์ฑ * refactor: index.tsx์์ ๋ชจ๋ฌ์ ๊บผ๋ผ ์ ์๋๋ก ๋ฆฌํฉํ ๋ง * refactor: PropsWithChildren ์์ - PropsWithChildren๋ฅผ import ํ์ง ์๊ณ React์์ ๋ฐ๋ก ์ธ ์ ์๋๋ก React.PropsWithChildren๋ก ์์ * [FE] msw๊ด๋ จ env ์ค๋ฅ ํด๊ฒฐ (#114) * chore: fe/feat/105-review-writing-msw ์ endpoint ๊ด๋ จ ๋ณ๊ฒฝ์ฌํญ ๋ฐ์ * fix: NODE_ENV ๊ด๋ จ ์ค๋ฅ ์์ - ์ค๋ฅ : env ํ์ผ์ NODE_ENV๊ฐ ์์์๋ ์ด๋ฅผ ์ธ์ํ๋ ์ค๋ฅ ๋ฐ์ - ์์ธ: ํ๋ ์์ํฌ์์ NODE_ENV๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ๋ ์๋ค๊ณ ํจ - ํด๊ฒฐ: NODE_ENV๋ฅผ ์ญ์ ํ๊ณ MSW๋ฅผ ์ฌ์ฉ * [BE] feat: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ (#109) * refactor: contains ์๋์ ์ํ EqualsAndHashcode ์ถ๊ฐ * fix: lazyInitialization ํด๊ฒฐ * feat: ์ง๋ฌธ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ์๋ต ์์ฑ * refactor: ๋ฆฌ๋ทฐ ํญ๋ชฉ๊ณผ ์ง๋ฌธ์ ์ฐ๊ด๊ด๊ณ ๋ณ๊ฒฝ ๋ฐ ๋ต๋ณ ์ต๋ ๊ธ์์ DB์ ๋ฐ์ * refactor: ๋ฆฌ๋ทฐ์ ๋ฆฌ๋ทฐ๊ทธ๋ฃน ์ด๊ธฐํ ๋ถ๋ถ ์ถ๊ฐ * feat: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ * feat: ๋ฐ์ ๋ฆฌ๋ทฐ๊ฐ ์์ ๋์ ์๋ต ์ถ๊ฐ * refactor: dto ์ค๋ช ์ถ๊ฐ * refactor: dto ์ค๋ช ์์ * refactor: ์ธ์ ํ์ ์์ , ๊ฐํ ์์ * refactor: transactional ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ์กฐํํ ๋Page๊ฐ์ฒด ๋ง๊ณ List๋ก ๋ฐ์์ค๋๋ก ์์ * refactor: ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ง๋๋ ๊ธฐ๋ฅ ๋๋ฉ์ธ ์์ผ๋ก ์ด๋ * test: ํ ์คํธ ์ฝ๋ ๊ฐ์ - ๋ณ์๋ช ์์ , save ์ฌ๋ฌ๊ฐ ๋์ saveAll ์ฌ์ฉ ๋ฑ * refactor: ๋ง์ง๋ง์ผ๋ก ๋ณธ ๋ฆฌ๋ทฐID๊ฐ ์๋ ๋ก์ง์ ๋ํด ์์ - lastViewedReviewId๋ฅผ ์ ๋ ฅํ์ง ์์ผ๋ฉด 999๊ฐ์ด ์ด์ํ๊ฒ ํฐ ์๋ฅผ ๋ฃ์ด์ฃผ๋๊ฒ ์๋๋ผ, ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฃ์ด์ฃผ๋๋ก ์์ * docs: ์ค์จ๊ฑฐ ๋ฐ์ฝ๋ ์ด์ ์ ์ฉ * refactor: lastReviewId๊ฐ null ์ด์ด๋ ๊ฐ์ฅ ์ต์ ๋ฆฌ๋ทฐ๋ฅผ ์ฐพ์ ์ ์๋๋ก ์์ * refactor: eqaulsAndHashCode ์ฌ์ ์ * refactor: eqaulsAndHashCode ์ฌ์ฌ์ ์ * refactor: API Docs ๋ฐ์ --------- Co-authored-by: donghoony <[email protected]> * fix: ์๋ชป ์ ์๋ endpoint ์์ (#118) * [FE] ๋จธ์ง๋ก ์ธํด ์ฌ๋ผ์ง ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ณ๊ฒฝ ์ฌํญ ๋ณต๊ตฌ ๋ฐ ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ (#121) * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ ๋ฐ Keyword ํ์ ๋ณต๊ตฌ * fix: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ path ๋ณต๊ตฌ * fix: ์ฌ์ด๋๋ฐ์ ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๊ฒฝ๋ก ๋ณต๊ตฌ * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํฐ ๋ณ๊ฒฝ * fix: DetailedReviewPage ๋ณต๊ตฌ ๋ฐ ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ * [BE] ๋๋ฏธ ๋ฐ์ดํฐ ์ถ๊ฐ, local ํ๋กํ์ผ ๊ด๋ฆฌ (#123) * refactor: Unauthorized ์์ธ ์ฒ๋ฆฌ * chore: ๋๋ฏธ ๋ฐ์ดํฐ ์ถ๊ฐ ๋ฐ Profile ์ฒ๋ฆฌ * chore: ํ ์คํธ yml ์์ฑ * fix: Long notblank -> notnull (#126) * [FE] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์์ msw๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจํน (#124) * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์์ msw๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจํน Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: ์๋ํฌ์ธํธ baseurl์ '/' ์ถ๊ฐ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: badahertz52 <[email protected]> Co-authored-by: ImxYJL <[email protected]> Co-authored-by: Fe <[email protected]> * fix: ๋ฆฌ๋ทฐ ๋ชฉ๋ก DTO ํ๋ ์์ (#129) * [FE] msw ๋ชจํน์ ์ํ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ ํ๋์ฝ๋ฉ (#130) * refactor: msw ๋ชจํน์ ์ํ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ ํ๋์ฝ๋ฉ Co-Authored-By: ImxYJL <[email protected]> * refactor: 2์ฐจ ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์ํ ๋ฉค๋ฒ ์์ด๋ ์์ํ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: ๋ถํ์ํ ์ฝ์ ๋ก๊ทธ ์ ๊ฑฐ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: ImxYJL <[email protected]> Co-authored-by: badahertz52 <[email protected]> Co-authored-by: Fe <[email protected]> * [FE] endPoint ์ค๋ฅ์ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ด๋ ์์ (#132) * fix: endpoint ์ค๋ฅ ์์ * fix: ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ ๋ฐ์ดํฐ ๋ฐ์ ๋์ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ด๋๋ฅผ 1๋ก ์์ * [BE] fix: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์์ฑ ๊ธฐ๋ฅ ์์ (#134) * fix: src/index.tsx์์ enableMocking ์ ๊ฑฐ (#136) * [FE] Children ์์ฑ์ด ํ์์ธ ํ์ ์ ์ (#147) * feat: children ์์ฑ์ด ํ์์ธ EssentialPropsWithChildren ํ์ ์์ฑ * chore: types ํด๋์ index ํ์ผ์ ๋๋ฝ๋๋ export๋ค ์ถ๊ฐ ๋ฐ ๊ทธ์ ๋ฐ๋ฅธ types import๋ฌธ ๊ฒฝ๋ก ์์ * [FE] ์ฌ์ด๋๋ฐ ๋ฐ ๋ชจ๋ฌ ์ฌ์ฉ์ฑ ๊ฐ์ (#139) * refactor: ์ฌ์ด๋๋ฐ๋ฅผ ๋ซ๋ ์ ๋๋ฉ์ด์ ์ ๊ฑฐ * refactor: ์ฌ์ด๋๋ฐ๊ฐ ๋ ๋นจ๋ฆฌ ์ด๋ฆฌ๋๋ก ์์ * feat: ๋ชจ๋ฌ์ ๋ฐฐ๊ฒฝ ํด๋ฆญ ๋ฐ esc ํค๋ฅผ ๋๋ ์ ๋ ๋ชจ๋ฌ์ด ๋ซํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ * chore: hooks index์ useModalClose ์ถ๊ฐ * feat: ์ฌ์ด๋๋ฐ ๋ฆฌ์คํธ ์์ดํ ์ ํด๋ฆญํ์ ๋ ์ฌ์ด๋๋ฐ๊ฐ ๋ซํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: useModalClose ํ ์ ๋ชจ๋ ๋ชจ๋ฌ์ ๊ณตํต ์ต์์ ์ปดํฌ๋ํธ์ธ ModalBackground์์ ์ฒ๋ฆฌํ๋๋ก ์์ * refactor: ModalBackground๋ฅผ ํด๋ฆญํ์ ๋ ๋ชจ๋ฌ์ด ๋ซํ๊ฒ ํ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ document ๋์ Background์ ์ถ๊ฐ * fix: esc๋ฅผ ์ฌ์ฉํด ๋ชจ๋ฌ์ ๋ซ์์ ๋ ํ๋ฒ๊ฑฐ ๋ฒํผ์ ํฌ์ปค์ค๊ฐ ์๊ธฐ๋ ๋ฌธ์ ํด๊ฒฐ ๋ฐ ๋ณ์๋ช ๋์๋ฌธ์ ์์ * refactor: useEffect ๋ด๋ถ ํจ์๋ค์ ํ ์ธ๋ถ๋ก ์ด๋ ๋ฐ ์ฃผ์ ์ถ๊ฐ * [FE] ์กด์ฌํ์ง ์๋ element์ ๋ํ ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋ ์ ํธ๋ฆฌํฐ ํจ์ ์ ์ (#150) * feat: ์กด์ฌํ์ง ์๋ element์ ๋ํ ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋ ํ ์ ์ * chore: hooks ํด๋ index์ useExistentElement ์ถ๊ฐ * refactor: useExistentElement ํ ์ ๋์ฑ ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์์ * refactor: ์กด์ฌํ์ง ์๋ ์์๋ฅผ ํ๋ณํ๋ ๋์์ ์ปค์คํ ํ ๋์ ์ ํธ๋ฆฌํฐ ํจ์๋ก ์ ์ * chore: ๊ธฐ์กด์ ์กด์ฌํ์ง ์๋ ์์๋ฅผ ํ์งํ๋ ์ปค์คํ ํ ์ญ์ * [FE] HTTP ์์ฒญ ์ค๋ฅ ์ status code๋ณ ์ค๋ฅ ์ํฉ์ ๋์ํ๋ ํจ์ ์์ฑ (#151) * feat: api ์๋ฌ ์ ํ์ํ ๋ฉ์ธ์ง ์์ฑ ํจ์ ์ถ๊ฐ * refactor: api/review.ts์ api ์ค๋ฅ ์ ๋ฉ์ธ์ง๋ฅผ ๋ฐํํ๋ createApiErrorMessage ํจ์ ์ ์ฉ * docs: http ์์ฒญ ์คํจ ๋ฉ์ธ์ง ์์ * fix: ์คํ ์์ * [FE] ํ์ด์ง ์๋จ ์ด๋ ๋ฒํผ ๊ตฌํ (#153) * feat: top button ๋ก์ง ํ ์ผ๋ก ๊ตฌํ * design: top button UI ๊ตฌํ * chore: ๊ฐ ํ์ด์ง๋ง๋ค top button์ด ๋ณด์ฌ์ง๋๋ก ์ค์ * chore: ์ปดํฌ๋ํธ default๋ก exportํ๋๋ก ์ค์ * refactor: handler๋ฅผ useEffect ์ธ๋ถ๋ก ๋ถ๋ฆฌ * chore: svg import ์ปจ๋ฒค์ ์ ๋ง์ถ์ด ์ด๋ฆ ์์ * [FE] feat: ์๋ฌ, ๋ก๋ฉ ํ์ด์ง ๊ตฌํ ๋ฐ ์ ์ฉ (#155) * feat: ๋ฒํผ ์ปดํฌ๋ํธ์ ์์ด์ฝ์ ์ ํ์ ์ผ๋ก ์ถ๊ฐํ ์ ์๋๋ก ๋ณ๊ฒฝ - `icon` prop์ ํตํด ๋ฒํผ์ ์์ด์ฝ์ ์ถ๊ฐํ ์ ์๋๋ก ๋ณ๊ฒฝ * feat: ์๋ฌ ํ์ด์ง๋ฅผ ์ํ ErrorSection ์ปดํฌ๋ํธ ๊ตฌํ - ์๋ฌ ๋ก๊ณ , ๋ฉ์์ง, ์๋ก๊ณ ์นจ ๋ฐ ํ ์ด๋ ๋ฒํผ ์ ๊ณต * feat: ๋ผ์ฐํฐ ์ค์ ์์ `errorElement`์ `ErrorPage` ์ปดํฌ๋ํธ๋ฅผ ์ถ๊ฐ * feat: ๋ฒํผ ํด๋ฆญ ์ ์๋ก๊ณ ์นจ ๋ฐ ํ ์ด๋ ๊ธฐ๋ฅ ์ถ๊ฐ * feat: LoadingBar ์ปดํฌ๋ํธ ๊ตฌํ * feat: ๋ก๋ฉ ํ์ด์ง ์ถ๊ฐ ๋ฐ ์ ์ฉ - ๋ก๋ฉ ๋ฉ์์ง ์ถ๊ฐ - ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง, ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง, ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ๋ก๋ฉ ํ์ด์ง ์ ์ฉ * refactor: buttons ๋ฐฐ์ด์ ํตํด ๋ฒํผ ์์ฑ * refactor: ์ฝ๋์ปจ๋ฒค์ ์ ๋ง๊ฒ ์ฝ๋ ์์ ๋ฐ imageDescription์ ๋ฒํผ props์ ์ถ๊ฐ * refactor: boolean ํ์ ์ถ๋ก ์ ๊ฑฐ * design: ์๋ฌ ์ปดํฌ๋ํธ ํ๋ฉด ๊ฐ์ด๋ฐ ๋ฐฐ์น * design: ๋ก๋ฉ ์ปดํฌ๋ํธ ํ๋ฉด ๊ฐ์ด๋ฐ ๋ฐฐ์น * [BE] refactor: ๋๋ฉ์ธ ์ฐ๊ด ๊ด๊ณ ์ฌ์ ์ (#156) * refactor: ๋๋ฉ์ธ ์ฐ๊ด๊ด๊ณ ์ฌ์ ์ ๋ฐ ์ฌ์ฉํ์ง ์๋ ๋๋ฉ์ธ ์ญ์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * test: ์ฌ์ฉํ์ง ์๋ ํ ์คํธ ์ญ์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * fix: ์์ฝ์ด ์ฌ์ฉํ์ง ์๋๋ก ์์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: Review ๋๋ฉ์ธ์์ reviewee ํ๋ ์ ๊ฑฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์ ์ฅ ๊ธฐ๋ฅ ๊ตฌํ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ํค์๋ ์ ์ฅ ๊ธฐ๋ฅ ๊ตฌํ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์์ฒญ ๊ฐ์ฒด ๊ตฌํ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * test: ๋ฆฌ๋ทฐ, ๋ฆฌ๋ทฐ ๋ด์ฉ ๋๋ฉ์ธ ํ ์คํธ ์ถ๊ฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์ ์ง๋ฌธ ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * fix: Review์ reviewGroupId ์ปฌ๋ผ๋ช ์์ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์, ํค์๋ ๊ฒ์ฆ์ ๊ฐ์ฒด ๋ถ๋ฆฌ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์, ์ง๋ฌธ ๊ฒ์ฆ์ ๊ฐ์ฒด ๋ถ๋ฆฌ * style: ์ฝ๋ ์ฌ์ ๋ ฌ * test: ๋ฆฌ๋ทฐ ์์ฑ ๊ฒ์ฆ ํ ์คํธ ์ถ๊ฐ * refactor: ์ฌ์ฉํ์ง ์๋ ํด๋์ค ์ญ์ * refactor: keyword ๊ด๋ จ ์ฌ์ฉํ์ง ์๋ ํด๋์ค ์ญ์ * refactor: review ๊ด๋ จ ์ฌ์ฉํ์ง ์๋ ํด๋์ค ์ญ์ * refactor: ๋ฐ์ดํฐ ์ด๊ธฐํ ๊ฐ์ฒด ์์ * test: ์ฌ์ฉํ์ง ์๋ ํ ์คํธ ์ญ์ * refactor: ์์ธ ๋ฉ์ธ์ง ๋งํฌ ํต์ผ * refactor: ์ฌ์ฉํ์ง ์๋ ์์ธ ์ ๊ฑฐ * refactor: ์์ธ ํด๋์ค ํจํค์ง ๋ณ๊ฒฝ * refactor: NOT NULL ์ ์ฝ์กฐ๊ฑด ์ถ๊ฐ * refactor: ํ ์คํธ์์๋ง ์ฌ์ฉ๋๋ ํจ์ ์ ๊ฑฐ * refactor: ํ ์คํธ ์คํ ์ ๋ฐ์ํ๋ LazyInitializationException ํด๊ฒฐ * refactor: ํค์๋ ๊ฒ์ฆ ํจ์ ์์ ๋ณ๊ฒฝ * chore: ํ ์คํธ ์ฝ๋ ์ปจ๋ฒค์ ํต์ผ * refactor: reviewRequestCode ๊ฒ์ฆ ๋ก์ง ์ด๋ * refactor: ํ๋์ธ questionRepository๋ฅผ ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ์ด, ํ๋ก์ ํธ ์ด๋ฆ ๊ธธ์ด ๊ฒ์ฆ ํจ์ ๋ถ๋ฆฌ * test: ๋ฆฌ๋ทฐ ์ ์ฅ ์ reviewKeywor ์ ์ฅ ๊ฒ์ฆ ์ถ๊ฐ --------- Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> * [All] infra: ๋์ค์ฝ๋ ์นํ ์ฌ์ฉํด PR ์์ฑ/์ฝ๋ฉํธ ์ ๋ฉ์ (#169) * feat: PR Request ์์ฑ / Comment ์ ๋์ค์ฝ๋ ๋ฉ์ * fix: Case-sensitive ID๋ก ํด๊ฒฐ, ALL webhook ์ถ๊ฐ * fix: remove whitespace * chore: rename workflow * fix: fix shell script * fix: step statement * fix: remove trailing whitespace after equals sign * [BE] feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ฑ API ๊ตฌํ (#163) * feat: ๋๋คํ ๋ฌธ์์ด ์์ฑ๊ธฐ ๊ตฌํ Co-authored-by: donghoony <[email protected]> * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ฑ ์์ฒญ, ์๋ต ํ์ Co-authored-by: donghoony <[email protected]> * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ฑ Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> * feat: ๋ฆฌ๋ทฐ ์์ฑ ์ปจํธ๋กค๋ฌ Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> --------- Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * [BE] refactor: ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ ์ ๋ณด ์์ฒญ ๊ธฐ๋ฅ ๋ฆฌํฉํฐ๋ง (#162) * refactor: ๋ถํ์ํ update ๋ฐฉ์ง * feat: controller์ ๋ฆฌ๋ทฐ ์์ฑ ์์ฒญ์ ๋ํ ์๋ต ๊ธฐ๋ฅ ๊ตฌํ * feat: controller์ ๋ฆฌ๋ทฐ ์์ฑ์ ์ํด ํ์ํ ์ ๋ณด๋ฅผ ์๋ต ๊ธฐ๋ฅ ๊ตฌํ * feat: service์ ๋ฆฌ๋ทฐ ์์ฑ์ ์ํด ํ์ํ ์ ๋ณด ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ * chore: ์ฌ์ฉํ์ง ์๋ dto ์ญ์ * test: ๋ฆฌ๋ทฐ ๋ฆฌ๋ทฐ ์์ฑ์ ์ํด ํ์ํ ์ ๋ณด ์กฐํ ๊ธฐ๋ฅ ํ ์คํธ ์์ฑ * refactor: swagger ์ค์ ์ผ๋ถ ์์ ๋ฐ ์๋ฌ ์๋ต์ฝ๋ ๋ ธ์ถ๋๋๋ก ๋ณ๊ฒฝ * refactor: service์์ ์์ํ์ long์ ๋ฐํํ๋๋ก ๋ณ๊ฒฝ * docs: api ๋ฌธ์ dto ํญ๋ชฉ์ค๋ช ๋ณ๊ฒฝ * test: ์ฌ์ฉํ์ง ์๋ ๋ณ์ ์ ์ธํ์ง ์๋๋ก ๋ณ๊ฒฝ * docs: api ๋ฌธ์ ๊ฒ์ฆ ๋ด์ฉ์ ๋ํ ์ด์ฒด ๋ณ๊ฒฝ * refactor: ํธ๋์ญ์ ์กฐํ ๋ช ์ ์ถ๊ฐ * refactor: dto ์ด๋ฆ ๋ณ๊ฒฝ * [FE] ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ react-query ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง (#161) * fix: src/index.tsx์์ enableMocking ์ ๊ฑฐ * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ฑ ์ ์ฝ๋ฉํธ ์ปดํฌ๋ํธ๋ช ๋ณ๊ฒฝ ๋ฐ ๊ธฐ๋ณธ๊ฐ ์ค์ - ์ปดํฌ๋ํธ๋ช ๋ณ๊ฒฝ: RevewComment -> ReveweeComments - reviewGroup์ description์ด ๋น๋ฌธ์์ด์ด๋ฉด ๊ธฐ๋ณธ๊ฐ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝ * refactor: ์๋ฒ DB์ ์๋ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์์ํ - ํ์ฌ DB์ ์๋ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ฅผ ๋ชฉ ์๋ฒ์์๋ ์ฌ์ฉํ๊ณ , ์ฌ์ด๋๋ฐ ํ์ด์ง ์ด๋ ์์๋ ํ์ฉํ ์ ์๋๋ก ๊ด๋ จ value๋ค์ ์์ํ ํจ * feat : QueryClient, QueryClientProvider ์ ์ฉ - src/index.tsx์ QueryClient, QueryClientProvider ์ ์ฉ * fix: dependencies์ ์๋ ํ ์คํธ ํจํค์ง๋ค์ devDependencies๋ก ์ฎ๊น * feat: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ react-query ์ ์ฉ * feat : msw์ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง 404 ์ค๋ฅ ์ถ๊ฐ * ci: react-error-boundary ์ค์น * feat: Outlet์ QueryErrorResetBoundary,ErrorBoundary, Suspense ์ ์ฉ * feat: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ useSuspenseQuery ์ ์ฉ * refactor: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง resource, queryString key ์์ํ * refactor: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง react-query key ์์ํ * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ์ปดํฌ๋ํธ ์์์๋ง ์ฌ์ฉํ๋ ์์๋ค ์์ํ * refactor: DetailedReviewPage/components์ index.tsx๋ฅผ ์ถ๊ฐํด import ๊ฒฝ๋ก ๊ฐ๊ฒฐํ๊ฒ ์์ * feat: error ์ ํ๋ฅผ ์ํ QueryClient ์ต์ ์ถ๊ฐ - react-query์ query, mutation์์ error๊ฐ ์ ํ๋๋๋ก QueryClient ์ต์ ์ค์ * fix: ErrorPage์ SideModal์ closeModal props๋ก ์ค * refactor: ErrorSection ์์น ๋ณ๊ฒฝ(src/pages/ErrorPage -> src/components/error) * feat: ErrorFallback ์ปดํฌ๋ํธ ์์ฑ * feat: ErrorSuspenseContainer ์์ฑ ๋ฐ App.tsx์ ์ ์ฉ * chore: constants/index.ts export ๊ฒฝ๋ก ๋ณ๊ฒฝ - ์ค๋ณต๋๋ apiErrorMessage ์ญ์ - queryKeys ์ถ๊ฐ * chore: 3์ฐจ-1์ฃผ์ฐจ ํต์ฌ ๊ธฐ๋ฅ ์ํ ๋ ํ์ ์๋ ์ฝ๋ ์ฃผ์ ์ฒ๋ฆฌ * docs: ErrorPage์ ERROR_MESSAGE ์์ * design: formWidth ๋ณ๊ฒฝ ๋ฐ fontSize์ 1.4rem ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ ์ถ๊ฐ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ชฉ๋ฐ์ดํฐ, ๋ฐ์ดํฐ ํ์ ์ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ ์ถ๊ฐ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ์ปดํฌ๋ํธ์ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ ์ถ๊ฐ ๋ฐ ๊ด๋ จ ์คํ์ผ ์ถ๊ฐ * refactor: ๋ถํ์ํ export ์ญ์ * chore: type๋ช ์์ (RevieweeCommentProps =>RevieweeCommentsProps) * refactor: ErrorSection์ผl Button ์์ * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ * refactor: ErrorSuspenseContainer ์ ์ฉ ์์น ๋ณ๊ฒฝ - App๊ฐ ์๋ router์ element์์ ์ ์ฉํ๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ฐ์ดํฐ ํ์ ๊ฐ์ ๋ฐฉ๋ฒ ๋ณ๊ฒฝ * chore: ๋ถํ์ํ ์ฃผ์ ์ญ์ * refactor: ErrorSection์ buttons ๋ค์ด๋ฐ ๋ณ๊ฒฝ ๋ฐ ์์์ key ์ถ๊ฐ - buttons -> buttonList * chore: ์คํ์ผ ์ฃผ์์ NOTE ์ถ๊ฐ * [BE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํ (#179) * feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ Co-authored-by: nayonsoso <[email protected]> * feat: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์๋ต ์์ฑ Co-authored-by: donghoony <[email protected]> * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํ Co-authored-by: nayonsoso <[email protected]> * refactor: Cascade ์ ์ฉ์ผ๋ก ๋ถํ์ํ save ์ ๊ฑฐ Co-authored-by: nayonsoso <[email protected]> * refactor: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์์ฑ ๊ฐ์ฒด ๋์ถ Co-authored-by: nayonsoso <[email protected]> --------- Co-authored-by: nayonsoso <[email protected]> * fix: ๋ธ๋ผ์ฐ์ ํ์ดํ ์คํ ์์ (#167) * [BE] feat: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ (#182) * feat: ์ปจํธ๋กค๋ฌ ๋ฆฌ๋ทฐ ์์ธ ์กฐํ api ์๋ต ๊ธฐ๋ฅ ๊ตฌํ * feat: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ api ์๋ต ๊ฐ์ฒด ๊ตฌํ * refactor: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ api ์๋ต ๊ฐ์ฒด๋ช ๋ณ๊ฒฝ * feat: ์๋น์ค ๋ฆฌ๋ทฐ ์์ธ ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ * test: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ ๊ธฐ๋ฅ ํ ์คํธ ์ถ๊ฐ * style: ์คํ ๋ฐ ๊ฐํ ์์ * refactor: ๋ ์ง ์๋ต ์, ์ผ์๊น์ง๋ง ์๋ตํ๋๋ก ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ์กฐํ ๊ถํ ๊ฒ์ฆ ๋ก์ง์ repository ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝ * refactor: ๊ฒ์ฆ๋ฉ์ธ์ง ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ์๋น์ค์์ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ์ ๋ํ ์์ธ ํด๋์ค ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ ๋ฉ์๋๋ช ๋ณ๊ฒฝ * refactor: ํค๋๋ช ์์ํ * [FE] recoil์ ํตํ groupAccessCode ์ ์ญ ์ํ ๊ด๋ฆฌ (#180) * ci: recoil ์ค์น * feat: src/index.ts์ RecoilRoot ์ ์ฉ * feat: groupAccessCode ์ ๋ํ atom ์ํ ์ถ๊ฐ * feat: useGroupAccessCode ํ ์ถ๊ฐ - useGroupAccessCode : groupAccessCode์ atom ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ํ * [BE] ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ์ต์ ์์ผ๋ก ์กฐํํ๋ค. (#189) * fix: ๋ ์ง ์ ์ ๋ ฌ * refactor: ์ฌ์ฉํ์ง ์๋ ๋ณ์ ์ ๊ฑฐ --------- Co-authored-by: donghoony <[email protected]> * [BE] ์ด๊ธฐ ๋ฐ์ดํฐ ์ค์ (#187) * feat: ์ด๊ธฐ ๋ฐ์ดํฐ ์ค์ * build: CD ์ local profile ์ค์ --------- Co-authored-by: donghoony <[email protected]> * [FE] feat: Alert Modal๊ณผ Error Alert Modal ์ปดํฌ๋ํธ ๊ตฌํ ๋ฐ Button ์ปดํฌ๋ํธ ํ์ฅ (#165) * refactor: ๊ณตํต ๋ฒํผ ์ปดํฌ๋ํธ๊ฐ children๊ณผ style์ ๋ฐ๋๋ก ์์ * chore: error alert modal์์ ์ฌ์ฉํ primary ์์์ ๊ฒฝ๊ณ ์ผ๊ฐํ ์ถ๊ฐ * feat: ErrorAlertModal ์ปดํฌ๋ํธ ๊ตฌํ * feat: AlertModal ์ปดํฌ๋ํธ ๊ตฌํ * chore: ๋ณ๊ฒฝ๋ Button ์ปดํฌ๋ํธ์ ๊ตฌ์กฐ์ ๋ง๊ฒ ์ฝ๋ ์์ * fix: AlertModal์ด Esc ๋๋ background์ ํด๋ฆญ์ผ๋ก ๋ซํ์ง ์๋๋ก ์์ * chore: AlertModal๊ณผ ErrorAlertModal export * refactor: Button ์ปดํฌ๋ํธ๊ฐ type์ ๋ณ๋๋ก ๋ฐ๋๋ก ์์ ๋ฐ ๊ธฐ์กด์ buttonType์ styleType์ผ๋ก ๋ณ๊ฒฝ * refactor: background ํด๋ฆญ ๋๋ Esc ํค๋ฅผ ํตํด ๋ชจ๋ฌ์ ๋ซ๋ ๊ฒ์ ๋ถ๋ฆฌ * refactor: AlertModal์ ๋ชจ๋ฌ ๋ซ๋ ์ ์ฑ ์ props๋ก ์ ํ ๊ฐ๋ฅํ๋๋ก ์์ * refactor: ErrorAlertModal์ AlertModal์ ์ฌ์ฉํด ๊ตฌํ * refactor: ๋ซ๊ธฐ ๋ฒํผ ์ด์ธ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋ฌ์ ๋ซ์ ์ ์๋์ง ์ฌ๋ถ์ handler๋ฅผ props๋ก ์ ๋ฌ๋ฐ๋๋ก ๋ณ๊ฒฝ * refactor: ๋น์ด์๋ ์คํ์ผ ์ปดํฌ๋ํธ ์ ๊ฑฐ * [FE] ๋๋ฉ ํ์ด์ง ํผ๋ธ๋ฆฌ์ฑ ๋ฐ ๋๋ฐ์ด์ฑ ํจ์ ์ถ๊ฐ (#181) * feat: Input ๊ณตํต ์ปดํฌ๋ํธ ์ ์ * feat: LandingPage ์ ์ * fix: Input์ type์ text๋ก ์์ * feat: debounce ํจ์ ์์ฑ * docs: debounce ํจ์์ TODO ์ฃผ์ ๋ฐ TSdoc ์ถ๊ฐ ์ธ ๊ฐ๋จํ if๋ฌธ ๋ฆฌํฉํ ๋ง * chore: ์๋ชป๋ ํ์ผ ๊ตฌ์กฐ ๋ฐ ๋๋ ํ ๋ฆฌ๋ช ์์ * chore: px์ rem์ผ๋ก ์์ * refactor: ๋์ ์คํ์ผ๋ง์ css ๋์ styled ์คํ์ผ ์ ์ฉ * refactor: Input ์คํ์ผ์ ๋์ฑ ์ ์ฐํ๊ฒ ๋ฐ์ ์ ์๋๋ก ์์ , ์คํ์ผ ๋ฆฌํฐ๋ด ์ ๊ฑฐ * refactor: Input์ ์ ์ฉ๋ ์ปค์คํ ์คํ์ผ๋ง์ $style๋ก ์์ * fix: undefined ๋ฆฌํด์ null ๋ฆฌํด์ผ๋ก ์์ * refactor: flex-direction์ ๋ณ๋์ ์ปค์คํ ํ์ ์ ์ฌ์ฉํ๋ ๋์ React ๋ด์ฅ ํ์ ์์ฌ์ฉํ๋๋ก ์์ * refactor: Input ์ปดํฌ๋ํธ์์ rest props ์ ๊ฑฐ * chore: ๋ถํ์ํ import ์ ๊ฑฐ * [FE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ ๋ณ๊ฒฝ๋ API ์ฐ๋ ํ, ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ์ ์ฉ ๋ฐ ๋ฌดํ ์คํฌ๋กค ๊ตฌํ (#192) * design: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋ ๋ฐฐ๊ฒฝ์ ๋ณ๊ฒฝ ๋ฐ ์ ์ฒด ๊ฐ์ธ๋ div์ ์๋์ชฝ ์ฌ๋ฐฑ ์ถ๊ฐ * refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์ธํฐํ์ด์ค ์ถ๊ฐ ๋ฐ ์์ - ReviewPreviewList ์ธํฐํ์ด์ค ์ถ๊ฐ - size, lastReviewId, reviews ํ๋ ์ถ๊ฐ - ReviewPreview ์ธํฐํ์ด์ค ์์ - keywords ํ๋๋ฅผ Keyword[] ํ์ ์ผ๋ก ๋ณ๊ฒฝ * chore: ๋ซํ ์๋ฌผ์ ๋ก ์์ด์ฝ ๋ณ๊ฒฝ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ์ ์ฉ * refactor: ์น ์ ๊ทผ์ฑ์ ์ํ alt, aria-label ์ถ๊ฐ ๋ฐ ์ฝ๋ ์ปจ๋ฒค์ ์ ๋ง์ถฐ ์ฝ๋ ์์ * feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฆฌ์คํธ ํธ๋ค๋ฌ์ ํ์ด์ง๋ค์ด์ ๋ก์ง ์ถ๊ฐ - ๊ธฐ์กด์ ๋จ์ ๋ฐํ ํธ๋ค๋ฌ์์ ํ์ด์ง๋ค์ด์ ๊ธฐ๋ฅ์ ํฌํจํ ํธ๋ค๋ฌ๋ก ์์ * feat: `SideModal` ์ปดํฌ๋ํธ์ `closeModal` prop ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ ๋ฌดํ ์คํฌ๋กค ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: useReviewPreviewList ํ ์์ฑํ์ฌ ๋ฐ์ดํฐ ํธ์ถ ๋ก์ง ๋ถ๋ฆฌ * refactor: ๋ถํ์ํ ButtonContainer ์ ๊ฑฐ * design: px์ rem์ผ๋ก ๋ณ๊ฒฝ * refactor: Button ์ปดํฌ๋ํธ์ key ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ์ด, ํ๋ก์ ํธ๋ช ์ ๋ณด์ฌ์ฃผ๋ DescriptionSection ์ปดํฌ๋ํธ ๊ตฌํ * refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ๋ถ๋ฌ์ค๋ api ๋ณ๊ฒฝ ์ด์๋ก ์ธํด ์๋ํฌ์ธํธ, fetch ํจ์ ์์ * chore: fragment ์ ๊ฑฐ * refactor: api ๋ณ๊ฒฝ์ ๋ฐ๋ผ ReviewPreviewList, ReviewPreview ์ธํฐํ์ด์ค ์์ * refactor: ๋ณ๊ฒฝ๋ api์ ๋ฐ๋ผ props ์์ * refactor: reviewerGroup, isPublic ์ ๊ฑฐ * refactor: endPoint.gettingReviewList ํธ์ถ ์ธ์ ๋ณ๊ฒฝ * refactor: DescriptionSection์์ ReviewInfoSection์ผ๋ก ์ปดํฌ๋ํธ๋ช ๋ณ๊ฒฝ * refactor: useSuspenseQuery ์ ์ฉ ํ, ๋ฌดํ์คํฌ๋กค ๊ด๋ จ ์ฝ๋ ์ฃผ์ ์ฒ๋ฆฌ --------- Co-authored-by: badahertz52 <[email protected]> * [FE] feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ์๋ฒ ๋ฐ ๋ชจ๋ฌ ์ฐ๋ (#191) * chore: ๋ณ๊ฒฝ๋ UI ์ ์ฉ * design: ํค์๋ ๋ฌธํญ ์๋ด ๋ฌธ๊ตฌ ์์ * feat: Textarea ๊ณตํต ์ปดํฌ๋ํธ ๋ผ๋ ๊ตฌํ * chore: ์์ ๋ api ์๋ํฌ์ธํธ ๋ฐ queryparams ์ ์ฉ * design: reset.ts ์ถ๊ฐ ์ค์ * chore: ๋ณ๊ฒฝ๋ api ๋ฌธ์์ ๋ง๊ฒ ํ์ ์์ * feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ๋ชจ๋ฌ ๋ฐ ์๋ฒ ์ฐ๋ * chore: ์ฌ์ด๋๋ฐ ๋ฉ๋ด ํด๋ฆญ ์ ์ด๋ํ path ์์ * fix: ConfirmModal์์ background ํด๋ฆญ ์ ๋ชจ๋ฌ์ด ๋ซํ์ง ์๋ ํ์ ์์ * design: AlertModal ๋ฐ ErrorAlertModal ๋์์ธ ์์ * chore: ๋ฆฌ๋ทฐ ์์ฑ ๋ฐ ์์ฑ ์๋ฃ ํ์ด์ง ๋ผ์ฐํฐ ์ถ๊ฐ * chore: ๋ถํ์ํ ์ฃผ์ ์ ๊ฑฐ ๋ฐ ์ฌ์ด๋๋ฐ์์ ๋ฆฌ๋ทฐ ์์ฑ ๋ฉ๋ด ์จ๊น ์ฒ๋ฆฌ * chore: ๋ฆฌ๋ทฐ ์ ์ถ ํ์ด์ง ๋ฒํผ ํ์ ๋ช ์ * chore: svg import ์ปจ๋ฒค์ ์ ๋ง๊ฒ ์์ * [FE] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง, ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์์ ๋ก๊ทธ์ธ์ ์ฐ๋ (#193) * design: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋ ๋ฐฐ๊ฒฝ์ ๋ณ๊ฒฝ ๋ฐ ์ ์ฒด ๊ฐ์ธ๋ div์ ์๋์ชฝ ์ฌ๋ฐฑ ์ถ๊ฐ * refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์ธํฐํ์ด์ค ์ถ๊ฐ ๋ฐ ์์ - ReviewPreviewList ์ธํฐํ์ด์ค ์ถ๊ฐ - size, lastReviewId, reviews ํ๋ ์ถ๊ฐ - ReviewPreview ์ธํฐํ์ด์ค ์์ - keywords ํ๋๋ฅผ Keyword[] ํ์ ์ผ๋ก ๋ณ๊ฒฝ * chore: ๋ซํ ์๋ฌผ์ ๋ก ์์ด์ฝ ๋ณ๊ฒฝ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ์ ์ฉ * refactor: ์น ์ ๊ทผ์ฑ์ ์ํ alt, aria-label ์ถ๊ฐ ๋ฐ ์ฝ๋ ์ปจ๋ฒค์ ์ ๋ง์ถฐ ์ฝ๋ ์์ * feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฆฌ์คํธ ํธ๋ค๋ฌ์ ํ์ด์ง๋ค์ด์ ๋ก์ง ์ถ๊ฐ - ๊ธฐ์กด์ ๋จ์ ๋ฐํ ํธ๋ค๋ฌ์์ ํ์ด์ง๋ค์ด์ ๊ธฐ๋ฅ์ ํฌํจํ ํธ๋ค๋ฌ๋ก ์์ * feat: `SideModal` ์ปดํฌ๋ํธ์ `closeModal` prop ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ ๋ฌดํ ์คํฌ๋กค ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: useReviewPreviewList ํ ์์ฑํ์ฌ ๋ฐ์ดํฐ ํธ์ถ ๋ก์ง ๋ถ๋ฆฌ * refactor: ๋ถํ์ํ ButtonContainer ์ ๊ฑฐ * design: px์ rem์ผ๋ก ๋ณ๊ฒฝ * refactor: Button ์ปดํฌ๋ํธ์ key ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก,๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง api ํธ๋ค๋ฌ์์ groupAccessCode๋ฅผ header์ ์ถ๊ฐ * feat: DetailedReviewPage ์์ groupAccessCode ์ํ ์ ์ฉ * feat: LoginRedirectModal ์์ฑ * refactor: ErrorSection ๋ฆฌํฉํ ๋ง * feat: ๋ฆฌ๋ทฐ์ด, ํ๋ก์ ํธ๋ช ์ ๋ณด์ฌ์ฃผ๋ DescriptionSection ์ปดํฌ๋ํธ ๊ตฌํ * refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ๋ถ๋ฌ์ค๋ api ๋ณ๊ฒฝ ์ด์๋ก ์ธํด ์๋ํฌ์ธํธ, fetch ํจ์ ์์ * feat: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ groupAccessCode ์ํ๋ฅผ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ groupAccessCode ์ํ๊ฐ์ด ์์ผ๋ฉด api์์ฒญ์ ํ๊ณ ์์ผ๋ฉด LoginRedirectModal์ ๋์ด์ ๋ก๊ทธ์ธ ์ ๋ํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ - DetailedPage/index.tsx์ ์๋ ๋ด์ฉ์ DetailedReivewPageContents๋ก ์ด๋ - DetailedPage/index.tsx์์ ErrorSuspenseContainer ์คํํ๋ ๊ฒ์ผ๋ก ์์ * chore: fragment ์ ๊ฑฐ * refactor: api ๋ณ๊ฒฝ์ ๋ฐ๋ผ ReviewPreviewList, ReviewPreview ์ธํฐํ์ด์ค ์์ * fix: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง keyword ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ * refactor: ๋ณ๊ฒฝ๋ api์ ๋ฐ๋ผ props ์์ * refactor: reviewerGroup, isPublic ์ ๊ฑฐ * feat: ErrorFallback ์ ํ ์ด๋ ๊ฒฝ๋ก ๋ณ๊ฒฝ * refactor: endPoint.gettingReviewList ํธ์ถ ์ธ์ ๋ณ๊ฒฝ * refactor: DetailedReviewPage์์ groupAccessCode ๊ฐ์ ธ์ค๋ ๋ฐฉ์ ๋ณ๊ฒฝ - useRecoilValue๊ฐ ์๋ useGroupAccessCode์์ ๊ฐ์ ธ์ค๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝ * refactor: DescriptionSection์์ ReviewInfoSection์ผ๋ก ์ปดํฌ๋ํธ๋ช ๋ณ๊ฒฝ * refactor: ErrorPage์์ Home ์ด๋ ๋ฒํผ์ ์ ๋ํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ - route์ค๋ฅ ๋ฉ์ธ์ง์ api์ค๋ฅ ๋ฉ์ธ์ง๋ฅผ errorMessage ํ์ผ์์ ๊ด๋ฆฌํ๋๋ก ์์ - ErrorPage์์ errorMessage๊ฐ ROUTE_ERROR_MESSAGE์ด๋ฉด ํ ๋ฒํผ์ด ํ๋ฉด์์์ ๋จผ์ ๋์ค๋๋ก ์์ - ์์๋ณ ํ,refresh ์์ด์ฝ SVG ์ถ๊ฐ * refactor: useSuspenseQuery ์ ์ฉ ํ, ๋ฌดํ์คํฌ๋กค ๊ด๋ จ ์ฝ๋ ์ฃผ์ ์ฒ๋ฆฌ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง ๋ชฉ ์๋ฒ ํธ๋ค๋ฌ ๋ฐ ๋ชฉ๋ฐ์ดํฐ ์์ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ groupAccessCode ์ ์ญ ์ํ ์ ์ฉ * refactor: ๋ถํ์ํ ์ฝ๋ ์ญ์ * chore: ์คํ ์์ --------- Co-authored-by: soosoo22 <[email protected]> * [FE] feat: ๋๋ฉ ํ์ด์ง API ์ฐ๋ (#196) * feat: ๊ทธ๋ฃน ์์ฑ์ ์ํ ์๋ํฌ์ธํธ ์์ฑ ๋ฐ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์๋ํฌ์ธํธ, api ํธ์ถ ํจ์ ์์ * fix: CSSProperties ๋์ ์ปค์คํ ํ์ ์ ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค ์์ * feat: ReviewAccessForm์ ๋ชจ๋ฌ ๋ฐ API ์ฐ๊ฒฐ * fix: ๋๋ฝ๋๋ CopyIcon ํ์ผ ์ ๋ก๋ * feat: ํ์ธ ์ฝ๋ ์ ๋ ฅ API ์ฐ๋ * feat: ์์ ํ ๋ฆฌ๋ทฐ ์์ฑ URL์ ๋ฆฌํดํ๋ ํจ์ ์์ฑ * [FE] fix: ๋๋ฝ๋๋ ๋ฒํผ ๋ฆฌํฉํ ๋ง ๋ฐ ์๋ํฌ์ธํธ ๋ณต๊ตฌ (#199) * fix: ์ถฉ๋ ํด๊ฒฐ ๊ณผ์ ์์ ๋๋ฝ๋๋ ์๋ํฌ์ธํธ ๋ณต๊ตฌ * fix: ๋ฒํผ ๋ฆฌํฉํ ๋ง ๋ฐ์ * feat: textarea์ ์ต์ ์ ๋ ฅ ๊ธ์ ์๋ฅผ ๋ง์กฑํ์ง ๋ชปํ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง ํ์ ๊ธฐ๋ฅ ๊ตฌํ (#200) * feat: ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ํ์ด์ง์์ ํ ๋ฒํผ ์ถ๊ฐ (#201) * docs: ๋ฆฌ๋ทฐ๋ฏธ ์๊ฐ๊ธ ์์ฑ (#203) * [BE] refactor: ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋ ์ ๊ฑฐ, ์ปจ๋ฒค์ ๋ฐ ์์ ๋ฆฌํฉํ ๋ง (#206) * refactor: date๋ฅผ review๊ฐ ์ ๊ณตํ๋๋ก ์์ * style: ์ปจ๋ฒค์ ์ ์ฉ * refactor: ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋ ์ ๊ฑฐ * refactor: ๋ฉ์๋๋ช ํต์ผ * style: ๋ถํ์ํ ๊ฐํ ์ ๊ฑฐ * [FE] jest ์ฌ์ฉ ์ nodeํ๊ฒฝ ์ msw ํธํ์ฑ ๋ฌธ์ ์ ํ๊ฒฝ ๋ณ์ ์ค๋ฅ ํด๊ฒฐ (#215) * ci: dependencies์์ jest ์ญ์ ๋ฐ ts-jest ์ค์น * ci: jest์์ ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉํ ์ ์๋๋ก jest.config.js ์ถ๊ฐ * chore: eslint์ ์ฉ ์ ์ธ ํ์ผ์ jest.config.js, tsconfig.json ์ถ๊ฐ * ci: jest์ testEnvioronment๋ฅผ jsdom์ผ๋ก ์ค์ * fix: jest์์ msw ver2๋ฅผ ๋ชฉ์๋ฒ๋ก ์ฌ์ฉ ์ ์๊ธฐ๋ ์ค๋ฅ ์์ 1. msw/node ๋ฅผ ์ฝ์ง ๋ชปํจ - jest.config.js์ testEnvironment ๋น๋ฌธ์์ด 2. ReferentError: TextEnCoder is not defined - ํด๊ฒฐ : jest.polyfills.js ์ถ๊ฐ ๋ฐ undici ์ค์น 3. ReferenceError: ReadableStream is not defined - ํด๊ฒฐ : undici ๋ค์ด ๊ทธ๋ ์ด๋ undici": "^6.19.5", -> "^5.0.0" * ci : jest์์ env ํ์ผ ์ฝ์ ์ ์๋๋ก dotenv ์ค์น ๋ฐ jest์ ์ ์ฉ * [FE] ๊ฐ๋ฐํ๊ฒฝ๊ณผ ๋น๋ํ๊ฒฝ์ ๋ฐ๋ผ msw ์คํ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋๋ก msw ์คํ ์กฐ๊ฑด๋ฌธ ๊ฐ์ (#221) * ci: ๋น๋ ํ์ผ์ ์คํํ ์ ์๋ http-server ํจํค์ง ์ค์น ๋ฐ ์คํ ๋ช ๋ น์ด ์ถ๊ฐ * fix:๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ๋น๋/๋ฐฐํฌ ํ๊ฒฝ์ ๊ตฌ๋ถํด ๋ชฉ ์๋ฒ๋ฅผ ์คํํ๋๋ก ์กฐ๊ฑด๋ฌธ ๊ฐ์ * fix: ๋จธ์ง ์ถฉ๋ ์ yarn.lock ์ญ์ ํ ๊ฑฐ ๋ณต๊ตฌ * [FE] ๋ฆฌ๋ทฐ ์์ธํ์ด์ง query ํ ๋ถ๋ฆฌ ๋ฐ HTTP ์์ฒญ ํ ์คํธ ์งํ (#216) * refactor: DetailedPage/index.tsx ๋ฆฌํฉํ ๋ง - early return๋ฅผ ์ฌ์ฉํด ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ * feat: useGetDetailedReview ํ ์์ฑ ๋ฐ DetailedReviewPageContents์ ์ ์ฉ * feat: useSearchParamAndQuery ํ ์์ฑ ๋ฐ DetailedPageContent์ ์ ์ฉ * refactor: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์์ id๋ผ๊ณ ์ฌ์ฉํ๋ key๊ฐ, params์ key๋ฅผ reviewId๋ก ๋ณ๊ฒฝ - DetailedReview์ router param์ id์์ reviewId๋ก ๋ณ๊ฒฝ * ci: dependencies์์ jest ์ญ์ ๋ฐ ts-jest ์ค์น * ci: jest์์ ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉํ ์ ์๋๋ก jest.config.js ์ถ๊ฐ * chore: eslint์ ์ฉ ์ ์ธ ํ์ผ์ jest.config.js, tsconfig.json ์ถ๊ฐ * ci: jest์ testEnvioronment๋ฅผ jsdom์ผ๋ก ์ค์ * refactor: useGetDetailedReview์์ query ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ ๋ฐํํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * fix: jest์์ msw ver2๋ฅผ ๋ชฉ์๋ฒ๋ก ์ฌ์ฉ ์ ์๊ธฐ๋ ์ค๋ฅ ์์ 1. msw/node ๋ฅผ ์ฝ์ง ๋ชปํจ - jest.config.js์ testEnvironment ๋น๋ฌธ์์ด 2. ReferentError: TextEnCoder is not defined - ํด๊ฒฐ : jest.polyfills.js ์ถ๊ฐ ๋ฐ undici ์ค์น 3. ReferenceError: ReadableStream is not defined - ํด๊ฒฐ : undici ๋ค์ด ๊ทธ๋ ์ด๋ undici": "^6.19.5", -> "^5.0.0" * ci : jest์์ env ํ์ผ ์ฝ์ ์ ์๋๋ก dotenv ์ค์น ๋ฐ jest์ ์ ์ฉ * fix: mock ํธ๋ค๋ฌ์ธ getDetailedReview ์์ ์ค๋ณต๋ ์ฟผ๋ฆฌ ๋งค๊ฐ ๋ณ์ ์ฌ์ฉ ์์ - ์ค๋ฅ ์ํฉ: jest์์ msw ์ฌ์ฉ ์, get์ url์ ํ๋ผ๋ฏธํฐ ์ฌ์ฉ ์ ์ค๋ณต๋ ์ฟผ๋ฆฌ ๋งค๊ฐ ๋ณ์ ์ค๋ฅ๊ฐ ๋จ - ์ค๋ฅ ๋ฉ์ธ์ง ::Found a redundant usage of query parameters in the request handler - ํด๊ฒฐ: ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ ํ์ด์ง์ reviews๊น์ง์ url ์์๋ฅผ ๋ง๋ค๊ณ , get์์๋ ์ด ์์๋ฅผ ํ์ฉํ ์ ๊ทํํ์์ผ๋ก ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ ํ์ด์ง๋ก ์ค๋ ๋ชจ๋ ์์ฒญ์ ๊ฐ๋ก์ฑ ์ ์๋๋ก ํจ * refactor: getWrongDetailedReview ๋ชฉ์๋ฒ ํธ๋ค๋ฌ ๋ฐ ๊ด๋ จ ์์ ์ญ์ - getDetailedReview์์ request๋ฅผ ๋ถ์ํด http์ค๋ฅ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํจ * feat: queryClientWrapper ์์ฑ - queryClientWrapper : msw๋ฅผ ์ฌ์ฉํ jest ํ ์คํธ์ queryWrapper๋ก ์ฌ์ฉ * test:๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง api ์์ฒญ ์ฑ๊ณต์ ๋ํ ํ ์คํธ ์ถ๊ฐ * fix: groupAccessCodeAtom์ ๊ธฐ๋ณธ๊ฐ ์๋๋๋ก ๋ณต๊ตฌ * chore:queryClientWrapper ๋ค์ด๋ฐ ํ๊ธฐ๋ฒ์ ํ์ค์นผ ์ผ์ด์ค๋ก ๋ณ๊ฒฝ * fix: ๋จธ์ง ์ถฉ๋ ๋ฐฉ์ง๋ฅผ ์ํด yarn.lock ์ญ์ * fix: ๋จธ์ง ์ yarn.lock ์ถฉ๋ ํด๊ฒฐ * [FE] test: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ API ์ฐ๋ ํ ์คํธ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง (#217) * chore: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง ๊ด๋ จ ์ปดํฌ๋ํธ ๋ฐ ์ธํฐํ์ด์ค, ํ์ผ ์ด๋ฆ ๋ณ๊ฒฝ * refactor: api ์๋ํฌ์ธํธ ์์ ์ ์ฉ * refactor: useGetReviewList ํ ์ผ๋ก ๋ถ๋ฆฌ * test: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง api ์ฐ๋ ํ ์คํธ ์ถ๊ฐ * chore: msw ๋ชจํน ์ฝ๋ ์ ๊ฑฐ * chore: ๊ฒฝ๋ก index ์ ๊ฑฐ * fix: ์ค๋ณต๋ import ๋ฐ ๋ถํ์ํ ํธ๋ค๋ฌ ์ ๊ฑฐ * chore: ์๋ํฌ์ธํธ ์์ ์ ๊ฑฐ * [FE] refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ๋ฆฌํฉํ ๋ง (#219) * refactor: ๊ฐ ๋ชจ๋ฌ๋ณ๋ก ์ํ์ ๋์์ ๊ด๋ฆฌํ๋ ํ ๋ถ๋ฆฌ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํผ์ ๋ก์ง์ ํ ์ผ๋ก ๋ถ๋ฆฌ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ๋ถ๋ฆฌํ ํ ์ ์ฉ * refactor: URL์์ reviewRequestCode๋ฅผ ์ถ์ถํ๋ ๋ก์ง์ ํ ์ผ๋ก ๋ถ๋ฆฌ * chore: ๋ถํ์ํ ํ ์คํธ์ฉ ์ฝ๋ ์ ๊ฑฐ * chore: ErrorModal์ ๋ซ์ ๋ errorMessage ์ํ๋ ์ด๊ธฐ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋๋ก ์์ * [BE] feat: ํค๋ ์กด์ฌ ์ฌ๋ถ ๊ฒ์ฆ (#207) * fix: ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด ์ด๋ ธํ ์ด์ ์ผ์น * feat: ํค๋ ๊ฒ์ฌ ์ด๋ ธํ ์ด์ * feat: ํค๋ ๋ฐธ๋ฆฌ๋ฐ์ดํฐ * feat: ์ปจํธ๋กค๋ฌ์ ํค๋ ๊ฒ์ฌ * feat: ํค๋ ๊ฒ์ฆ ๋ฉ์์ง ํด๋ผ์ด์ธํธ์ ์ ๋ฌ * fix: ๋๋ฝ๋ `@Valid` ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: ์์ฒญ์ด null์ธ ๊ฒฝ์ฐ ํธ๋ค๋ง * chore: ํ ์คํธ ์ด๋ฆ ๊ฐ๊ฒฐํ๊ฒ ๋ณ๊ฒฝ * chore: ์๋ฌธ์ ์ปจ๋ฒค์ * feat: ArgumentResolver๋ฅผ ํ์ฉํ ํค๋ ๊ฒ์ฆ * feat: ๊ณต์ฉ ํจํค์ง๋ก ์ด๋ ๋ฐ ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์์ * chore: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ * feat: ArgumentResolver ์ ์ฉ, Validator ์ญ์ * chore: ์ฌ์ฉํ์ง ์๋ ์ปค์คํ ์์ธ ์๋ณต * refactor: ํค๋ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ๋ฉ์์ง ์์ * chore: ๋ถํ์ํ `@Valid` ์ด๋ ธํ ์ด์ ์ญ์ * refactor: ๋ณ์ ์ถ์ถ Co-authored-by: Yeongseo Na <[email protected]> * fix: ์ปดํ์ผ ์๋ฌ ํด๊ฒฐ --------- Co-authored-by: Yeongseo Na <[email protected]> * ci: index.html์ ๊ตฌ๊ธ ์ ๋๋ฆฌํฑ์ค ์ ์ฉ (#226) * [FE] ci: sentry ์ด๊ธฐ ์ค์ (#223) * ci: sentry ์ด๊ธฐ ์ค์ * chore: gitignore์ env.sentry-build-plugin ์ถ๊ฐ * ci: sentry ์ ์ฉ ํ๋ก์ ํธ๋ฅผ woowacoure-review-me๋ก ๋ณ๊ฒฝ, ๋ก์ปฌ ํ๊ฒฝ ์ถ์ ํ๋๋ก ๋ณ๊ฒฝ * ci: sentry ์ ์ฉ ํ๊ฒฝ์ ๋ฐฐํฌ ํ๊ฒฝ์ผ๋ก ๋ค์ ๋ณ๊ฒฝ * ci: sentry์์ replay ๊ด๋ จ ์ค์ ์ญ์ --------- Co-authored-by: badahertz52 <[email protected]> * [FE] refactor: LandingPage์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ์ ์ฉ ๋ฐ ๋ฆฌํฉํ ๋ง (#218) * chore: LandingPage์ styles ํ์ผ ๋ถ๋ฆฌ * fix: POST ์์ฒญ์ ํ๋ ํจ์์ ์ด๋ฆ์ post~๋ก ์์ * feat: ๊ทธ๋ฃน ๋ฐ์ดํฐ ์์ฑ ์์ฒญ์ ๋ํ MSW ํธ๋ค๋ฌ ์ถ๊ฐ * refactor: ๋ชจํน ๋ฐ์ดํฐ ๊ฐ์ ๋ ์ง๊ด์ ์ผ๋ก ์์ * refactor: LandingPage๋ฅผ ErrorSuspenseContainer๊ฐ ๊ฐ์ธ๋๋ก ์์ * refactor: URL์ ์ป์ด์ค๋ API์ react-query ์ ์ฉ ๋ฐ API ํธ์ถ ํจ์ ์ด๋ฆ ์์ * chore: LandingPage ํ์ ์ปดํฌ๋ํธ๋ค์ index ํ์ผ ์ถ๊ฐ ๋ฐ ์ ์ฉ * refactor: groupAccessCode ๊ด๋ จ msw ํธ๋ค๋ฌ ์ถ๊ฐ ๋ฐ ์๋ฌ ์ํ(์๋ ์ฝ๋ ์ ๋ ฅ, ์๋ฒ ์๋ฌ)์ ๋ฐ๋ฅธ ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ๋๋ก ์์ * refactor: groupAccessCode์ ์ํ๋ฒณ ๋์๋ฌธ์์ ์ซ์๋ง ์ฌ ์ ์๋๋ก ์์ * refactor: LandingPage์์ ErrorSuspenseContainer๋ฅผ ์ ๊ฑฐํ๊ณ ๋์ URLGeneratorForm๋ง์ ๊ฐ์ธ๋๋ก ์์ * refactor: Input ์ปดํฌ๋ํธ์ onChange ์ด๋ฒคํธ ํ์ ์์ * refactor: Input ์ปดํฌ๋ํธ์ name ์์ฑ ์ถ๊ฐ * refactor: ์์ ๋ ๊ฒฝ๋ก ๋ฐ์ * refactor: usePostDataForUrl ์ฟผ๋ฆฌ์์ mutation์ ๋ฆฌํดํ๋๋ก ์์ * refactor: URL์ ์ฑ๊ณต์ ์ผ๋ก ์์ฑํ ์ดํ Input์ ๋ฆฌ์ ํ๋ ํจ์ ์ถ๊ฐ * chore: NOTE ์ฃผ์ ์ถ๊ฐ * refactor: getIsValidGroupAccessCodeApi์์ 400 ์ธ์ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ๊ธฐ์กด์ createApiErrorMessage๋ฅผ ์ฌ์ฉํ๋๋ก ์์ * chore: ๋๋ฝ๋๋ -Api suffix ๋ฐ์ * [BE] Actuator ์ ์ฉ๊ณผ logback ์ค์ (#228) * build: actuator ์์กด์ฑ ์ถ๊ฐ * feat: ๋ก๊ทธ๋ฐฑ ์ค์ * feat: submodule ์ ์ฉ - actuator ์ค์ ์ ์๋ธ ๋ชจ๋์ ์ ์ฅ * style: ๊ฐํ ๋ฐ ์ฃผ์ ์ ๊ฑฐ * test: logback ์ค์ ์ถ๊ฐ * [FE] CD test (#233) * ci: sentry ์ด๊ธฐ ์ค์ * chore: ์๋น์ค ํ์ดํ ๋๋ฌธ์๋ก ๋ณ๊ฒฝ * chore: merge * [BE] ํ๋กํ์ผ ๋ถ๋ฆฌ, CD ์คํฌ๋ฆฝํธ ์์ (#235) * feat: ํ๋กํ์ผ ๋ถ๋ฆฌ * feat: ํ๋กํ์ผ ๋ถ๋ฆฌ * cd: ํ๋กํ์ผ ๋ถ๋ฆฌ cd ์คํฌ๋ฆฝํธ ์์ * fix: CD ์คํฌ๋ฆฝํธ ์คํ ์์ (#236) * [FE] CD test 2 (#237) * ci: sentry ์ด๊ธฐ ์ค์ * chore: ์๋น์ค ํ์ดํ ๋๋ฌธ์๋ก ๋ณ๊ฒฝ * chore: merge * fix: sentry ์ฌ์ค์ * fix: sentry ์ค์ ๋ณต๊ตฌ * fix: cd ์คํฌ๋ฆฝํธ ์คํ ์์ (#238) * [FE] CD TEST 3 (#239) * ci: sentry ์ด๊ธฐ ์ค์ * chore: ์๋น์ค ํ์ดํ ๋๋ฌธ์๋ก ๋ณ๊ฒฝ * chore: merge * fix: sentry ์ฌ์ค์ * fix: sentry ์ค์ ๋ณต๊ตฌ * chore: ์๋น์ค ํ์ดํ ๋ณ๊ฒฝ * [BE] build: Micrometer ์์กด์ฑ ์ถ๊ฐ (#244) * build: ๋ง์ดํฌ๋ก๋ฏธํฐ ์์กด์ฑ ์ถ๊ฐ Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> * chore: ์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> --------- Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> * [FE] feat: ๊ณตํต ์ปดํฌ๋ํธ์ธ ์ฒดํฌ๋ฐ์ค์ ์ฒดํฌ๋ฐ์ค ์์ดํ ์ ์ (#240) * feat: ๊ณตํต ์ฒดํฌ๋ฐ์ค ์ปดํฌ๋ํธ ์์ฑ * feat: ์ฒดํฌ๋ฐ์ค์ ๋ ์ด๋ธ์ ๋ฌ ์ ์๋ CheckboxItem ์ปดํฌ๋ํธ ์์ฑ * fix: style์ ์๋ชป ์ ๋ฌํ๋ ๋ฌธ์ ํด๊ฒฐ * [BE] fix: CD ์คํฌ๋ฆฝํธ ์์ (#246) * fix: CD ์คํฌ๋ฆฝํธ ์์ * chore: ์ ์ฅ ๋ฐ์ดํฐ dev์์ ํ์ฉํ ์ ์๋๋ก ์์ * [FE] refactor: LandingPage ๊ฒฝ๋ก ๋ณ๊ฒฝ (#249) * refactor: LandingPage์ ๊ฒฝ๋ก ๋ณ๊ฒฝ * refactor: App ์์ ์ฌ์ด๋๋ฐ ์ฃผ์ ์ฒ๋ฆฌ * [BE] Swagger API ๋ฌธ์ ์ ๋ฐ์ดํธ (#254) * docs: ๋ฆฌ๋ทฐ api ๋ฌธ์๋ฅผ ์ํ swagger ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: ์ฌ์ฉํ์ง ์๋ dto ์ญ์ * docs: api ๋ฌธ์์ ์ต์ ๋ฐ ์ต๋ ์ค์ ์๋ด ์ถ๊ฐ * docs: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน api๋ฅผ ์ํ swagger ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: Spring์์ ์ ๊ณตํ๋ APPLICATION_JSON_VALUE ์ฌ์ฉ * [BE] feat: ์์ธ์ ๋ํ ๋ก๊ทธ ์์ฑ (#255) * feat: Controller advice ์ ๋ก๊น ์ถ๊ฐ * refactor: ์คํ ํธ๋ ์ด์ค ๋ก๊น ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน ์์ฑ์ ๊ธธ์ด ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ๋ต๋ณ ๊ธธ์ด ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ฝ๋ ๊ฒ์ฆ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ์กฐํ ๊ฒ์ฆ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ ํ๋ ํค์๋ ์กด์ฌํ์ง ์๋ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ค๋ณต ์ ํ๋ ํค์๋ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ํค์๋ ์กฐํ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ ํ ํค์๋ ๊ฐฏ์ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ ํ๋ ์ง๋ฌธ ์ค๋ณต ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ง๋ฌธ ์กฐํ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ค๋ณต ์ง๋ฌธ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์คํ๋ง ๋ฐ์ ์์ธ ๋ก๊น ์ ๋ฉ์ธ์ง ์ถ๊ฐ * feat: ์ธ์ฝ๋ฉ ์ค์ * style: ๊ฐํ ์์ Co-authored-by: Donghoon Lee <[email protected]> * style: ๊ฐํ ๋ฐ ๊ณต๋ฐฑ ์์ * refactor: ๋ถํ์ํ ๊ฒ์ฆ ์ ๊ฑฐ - ์ ํ๋ ํค์๋์ ์ง๋ฌธ์ด DB์ ์๋์ง๋ฅผ validator ์์ ๊ฒ์ฆํ ํ์๋, repository.getById ๋ฅผ ํ ๋ ํ๋ฒ ๋ ๊ฒ์ฆ์ด ๋ค์ด๊ฐ๋ค. ๋ฐ๋ผ์ 'DB์ ์๋์ง'์ ๋ํ ๊ฒ์ฆ์ validator ์์ ํ ํ์๋ ์๋ค๋ ํ๋จ ํ์ ํด๋น ๋ก์ง์ ์ญ์ ํ๋ค. --------- Co-authored-by: Donghoon Lee <[email protected]> * [FE] refactor: Textarea๋ฅผ ์ฌ์ฉํ๋ ๊ณตํต ์ฅ๋ฌธํ ๋ต๋ณ ์ ๋ ฅ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ (#252) * feat: ๊ณตํต textarea ์ปดํฌ๋ํธ ์์ฑ * refactor: longReviewItem์ ๋ก์ง์ ์ปค์คํ ํ ์ผ๋ก ๋ถ๋ฆฌ * refactor: longReviewItem์ผ๋ก ์ด๋ฆ ๋ณ๊ฒฝ ๋ฐ ์ปดํฌ๋ํธ ๊ตฌํ * chore: ๊ธฐ์กด์ ReviewItem ์ ๊ฑฐ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ LongReviewItem ์ ์ฉ * [FE] refactor: ๊ณต์ฉ ๋ชจ๋ฌ ํ ์ถ๊ฐ ๋ฐ LongReviewItem ๋ฆฌํฉํ ๋ง (#258) * feat: ๋ชจ๋ฌ ์ํ ๊ด๋ฆฌ ํ ์ถ๊ฐ * refactor: LongReviewItem ์ปดํฌ๋ํธ๊ฐ ์ธ๋ถ์ event๋ฅผ props๋ก ๋ฐ์ ์ ์๋๋ก ๋ณ๊ฒฝ * [FE] test: LandingPage์์ ์ฌ์ฉํ๋ API์ ๋ํ ํ ์คํธ ์์ฑ (#251) * chore: ๋ถํ์ํ Fragment ์ ๊ฑฐ * test: LandingPage์์ ์ฌ์ฉํ๋ api ํ ์คํธ ์ถ๊ฐ * [FE] refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ react query๋ฅผ ์ ์ฉํ๊ณ API ์ฐ๋ ํ ์คํธ ์์ฑ (#256) * refactor: ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๋ก์ง์ react query ์ ์ฉ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ ๊ฒ์ ์์ฒญ ๋ก์ง์ useMutation ์ ์ฉ * refactor: query key ์์ํ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๋ก์ง์ useReviewForm์์ ์ ๊ฑฐ * chore: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ErrorSuspenseContainer ์ ์ฉ * chore: styled component๋ช ์์ * chore: ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ mock data๋ฅผ ๋ณ๊ฒฝ๋ api ํ์์ ๋ง๊ฒ ์์ * chore: useGetDataToWrite๊ฐ ๋ ๋ง์ ๋ฐํ๊ฐ์ ์ ๊ณตํ๋๋ก ์์ * test: useGetDataToWrite์ API ์์ฒญ ํ ์คํธ ์์ฑ * chore: dataToWrite๊ฐ ์๋ ๊ฒฝ์ฐ ์ํ ๊ธฐ๋ณธ๊ฐ ์ง์ * chore: msw๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ๋ทฐ ์์ฑ post ์์ฒญ mocking * chore: ๋ฆฌ๋ทฐ ์ ๋ณด mocking data ์์ฑ * chore: useMutationReview๊ฐ UseMutationResult ํ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋๋ก ์ค์ * test: useMutateReview์ API ์์ฒญ ํ ์คํธ ์์ฑ * chore: useGetDataToWrite์ ๋ฐํ๊ฐ์ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์์ * chore: LongReviewItem ์ปดํฌ๋ํธ ์ ์ฉ * [FE] fix: ์ง๋ฌธ ๋ฒํธ๊ฐ ์๋ชป ์ถ๋ ฅ๋๋ ์ค๋ฅ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ์ ์๋ชป๋ ๊ฒฝ๋ก๋ก ์ด๋ํ๋ ์ค๋ฅ ์์ (#265) * fix: ์ง๋ฌธ ๋ฒํธ๊ฐ ์๋ชป ์ถ๋ ฅ๋๋ ์ค๋ฅ ์์ * fix: ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ์ ์๋ชป๋ ๊ฒฝ๋ก๋ก ์ด๋๋๋ ๋ฌธ์ ์์ * [BE] feat: ์ง๋ฌธ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ์ผ๋ก ์นํ (#262) * chore: cd ํ ์คํธ ํ์ธ ์ฝ๋ ์์ฑ (#272) * fix: ์์ธ ๋ด์ฉ ํ์ํ ๋ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ ์นํ (#270) * [FE] feat: ํด๋ฆฝ๋ณด๋ ๋ณต์ฌ ์ปดํฌ๋ํธ ๊ตฌํ (#261) * feat: ํด๋ฆฝ๋ณด๋ ๋ณต์ฌ ์ปดํฌ๋ํธ ๊ตฌํ Co-authored-by: skylar1220 <[email protected]> * fix: ๋ถ๋ชจ ์์์ ๋๋น์ ๋ฐ๋ผ CopyTextButton์ด ์์์ง๋ ๋ฌธ์ ํด๊ฒฐ * refactor: ReviewGroupDataModal ์คํ์ผ ์กฐ์ - ์ ์ฒด ํฌ๊ธฐ ์ง์ ๋ฐ gap ์กฐ์ * chore: ๋ถํ์ํ padding ์ ๊ฑฐ * chore: index ํ์ผ์ CopyTextButton ์ถ๊ฐ --------- Co-authored-by: skylar1220 <[email protected]> * [FE] chore: front_deploy๋ฅผ develop์ ๋ฐ์ (#276) * [FE] feat: ์ง๋ฌธ ์์ฑ ํ์ด์ง QuestionCard, ReviewWritingCard ๊ณตํต ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ , ์ฌ๋ผ์ด๋ ๋ฐฉ์์ ๊ธฐ๋ฅ ์ถ๊ฐ (#247) * chore: .gitignore์์ ์ฃผ์ ์ ๊ฑฐ * feat: QuestionCard ์ปดํฌ๋ํธ ๊ตฌํ * feat: ReviewWritingCard ์ปดํฌ๋ํธ ๊ตฌํ * style: CSS ์์ฑ ์์ ์ ๋ ฌ * refactor: ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ๊ฐ๊ฐ Header์ Main ์น์ ์ผ๋ก ๋ถ๋ฆฌ * feat: ์ฌ๋ผ์ด๋ ๋ฐฉ์์ผ๋ก ์ง๋ฌธ ์นด๋๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์ ํ๋๋ ๊ธฐ๋ฅ ์ถ๊ฐ * design: pretendard ํฐํธ ์ ์ฉ * chore: ํค๋ review me ๋๋ฌธ์๋ก ๋ณ๊ฒฝ * refactor: QuestionCard, ReviewWritingCard ํด๋ ์์น ๋ณ๊ฒฝ - ReviewWritingFormPage์ components๋ก ์ด๋ * [FE] ์ง๋ฌธ ์์ ํ์ด์ง์ ํ์ํ ์ง๋ฌธ ๋ชฉ ๋ฐ์ดํฐ ๋ฐ ์นด๋์ ์ํ ์ฒ๋ฆฌ (#263) * [BE] fix: CD ์คํฌ๋ฆฝํธ ์์ (#246) * fix: CD ์คํฌ๋ฆฝํธ ์์ * chore: ์ ์ฅ ๋ฐ์ดํฐ dev์์ ํ์ฉํ ์ ์๋๋ก ์์ * [FE] refactor: LandingPage ๊ฒฝ๋ก โฆ
* [FE] ํ๋ก ํธ์๋ ์ด๊ธฐ ์ธํ (#5) * ci: webpack, react, typescript ์ค์ * ci: eslint, prettier, stylelint ์ค์ * [BE] feat: ์ด๊ธฐ ํ๊ฒฝ ์ค์ (#8) * feat: ์ด๊ธฐ ํ๊ฒฝ ์ค์ * refactor: ํด๋์ค ์ข ๋ฃ ์ ๊ฐํ ์ ๊ฑฐ * build: application.yml ์ค์ * [BE] feat: ์ด๊ธฐ ์ํฐํฐ ์์ฑ (#10) * feat: ์ด๊ธฐ ์ํฐํฐ ์์ฑ * refactor: ๋ฆฌ๋ทฐ ๋ด์ฉ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋ค๋์ผ ์ฐ๊ฒฐ * refactor: ํจํค์ง ๊ตฌ์กฐ ๊ณ ๋ คํ์ฌ ProjectGroup์ผ๋ก ์์ * refactor: Project -> Reviewer๋ก ๋ณ๊ฒฝ * refactor: ํ ์ด๋ธ๋ช ์ผ์น (reviewer_group) * [BE] feat: ๋ฆฌ๋ทฐ ์์ฑ (#15) * feat: ์ด๊ธฐ ์ํฐํฐ ์์ฑ * refactor: ๋ฆฌ๋ทฐ ๋ด์ฉ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋ค๋์ผ ์ฐ๊ฒฐ * refactor: ํจํค์ง ๊ตฌ์กฐ ๊ณ ๋ คํ์ฌ ProjectGroup์ผ๋ก ์์ * refactor: Project -> Reviewer๋ก ๋ณ๊ฒฝ * refactor: ํ ์ด๋ธ๋ช ์ผ์น (reviewer_group) * feat: ๋ฉค๋ฒ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ์ด๊ทธ๋ฃน ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ ๋ฌธํญ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ํค์๋ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ ํค์๋ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ ์์ฑ ๊ธฐ๋ฅ ๊ตฌํ * test: ๋ฆฌ๋ทฐ ์์ฑ ๊ธฐ๋ฅ ํ ์คํธ ์ถ๊ฐ --------- Co-authored-by: donghoony <[email protected]> Co-authored-by: nayonsoso <[email protected]> * [BE] feat: ํ ์คํธ ๋ฉ์๋๋ณ ๊ฒฉ๋ฆฌ (#19) * feat: ํ ์คํธ ๊ฒฉ๋ฆฌ๋ฅผ ์ํ DB Cleaner ๋ฐ Extension ๊ตฌํ * feat: Service์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์ด๋ ธํ ์ด์ ์ ๊ณต * test: ์๋น์ค ํ ์คํธ ์ด๋ ธํ ์ด์ ์ฌ์ฉํ๋๋ก ์์ * fix: ๋๋ฝ๋ ๋ฆฌ๋ทฐ ์์ฑ ๋งคํ URL ์ถ๊ฐ (#17) * [BE] feat: ๋ฆฌ๋ทฐ ์กฐํ (#22) * feat: ๋ฆฌ๋ทฐ ์กฐํ ๊ธฐ๋ฅ ์ถ๊ฐ * style: ๊ฐํ ๋ณ๊ฒฝ * test: ๋ฆฌ๋ทฐ ์กฐํ ๊ธฐ๋ฅ ํ ์คํธ ์ถ๊ฐ * refactor: ๋ฆฌ๋ทฐ ์กฐํ ๋ฉ์๋๋ช ๋ณ๊ฒฝ * refactor: id ํ์ ๋ณ๊ฒฝ * style: ๊ฐํ ์์ * fix: PostMapping ์์ --------- Co-authored-by: KIMGYUTAE <[email protected]> Co-authored-by: donghoony <[email protected]> * [BE] feat: ์ปค์คํ ์์ธ ์ฒ๋ฆฌ (#20) * feat: ์ปค์คํ ์์ธ ์์ฑ * feat: ์ปค์คํ ์์ธ ์ ์ฉ * feat: ๊ธ๋ก๋ฒ ์์ธ ์ฒ๋ฆฌ * [BE] feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ ๋ณด ๋ฐ ํค์๋ ์กฐํ API (#24) * feat: ํค์๋ ์กฐํ API * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์กฐํ API * refactor: PathVariable ๋ณ์๋ช ๋ณ๊ฒฝ * [FE] ๋ฆฌ๋ทฐ ์์ฑํ๋ฉด๊ณผ ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ๋ฉด ๊ฒฐํฉ (#26) * fix : webpack dev sever ์ด ๋ ์ค๋ฅ ์์ - package.json ์์ type :"module" ์ญ์ , stylelint ๊ด๋ จ ์ค์ ์ญ์ Co-Authored-By: ImxYJL <[email protected]> * ci : svgํ์ผ ๊ด๋ จ ํ๊ฒฝ ์ ํ Co-Authored-By: ImxYJL <[email protected]> * design : reset ์คํ์ผ, global style์์ ํฐํธ ์ ์ฉ Co-Authored-By: ImxYJL <[email protected]> * feat: ๋ฆฌ๋ทฐ ์ ๊ธ ๋ฒํผ ์ถ๊ฐ Co-Authored-By: ImxYJL <[email protected]> * feat: ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ๋ฉด์ ์ง๋ฌธ,๋ต ์ปดํฌ๋ํธ ์ถ๊ฐ Co-Authored-By: ImxYJL <[email protected]> * feat: ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ๋ฉด์ ํ๋ก์ ํธ ์ค๋ช ์ปดํฌ๋ํธ ์ถ๊ฐ Co-Authored-By: ImxYJL <[email protected]> * feat : ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ๋ฉด ํ์ด์ง ์ถ๊ฐ ๋ฐ ์์ธ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ ํ์ ์ถ๊ฐ Co-Authored-By: ImxYJL <[email protected]> * fix: webpack dev server ์ด ๋ ์ค๋ฅ ์์ Co-authored-by: soosoo22 <[email protected]> * design: reset css ์ ์ฉ Co-authored-by: soosoo22 <[email protected]> * feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ๊ตฌํ Co-authored-by: soosoo22 <[email protected]> * ci: svg ํ์ผ ๊ด๋ จ ์ค์ * fix : ๋จธ์ง์ถฉ๋ ํด๊ฒฐ ๋ฐ ์คํ ์์ * feat: react-router-dom, react-router ์ค์น ๋ฐ ์ค์ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ์ด์ง ๊ฒฐํฉ ๋ฐ ๋ฆฌํฉํ ๋ง * refactor: ๋ฆฌ๋ทฐ ํ์ ํ์ผ ๋ฆฌํฉํ ๋ง ๋ฐ ํ์ ์ถ๊ฐ * feat: api ์ค์ ์ถ๊ฐ ๋ฐ ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ์ด์ง์ api ํธ๋ค๋ฌ ์ถ๊ฐ --------- Co-authored-by: ImxYJL <[email protected]> Co-authored-by: chysis <[email protected]> Co-authored-by: soosoo22 <[email protected]> * [BE] refactor: ํจํค์ง ๊ตฌ์กฐ ๋ฆฌํฉํฐ๋ง (#30) * refactor: ํจํค์ง ๊ตฌ์กฐ ๊ตฌ์ฒดํ * refactor: ํจํค์ง ๊ตฌ์กฐ ๊ตฌ์ฒดํ(์๋น์ค, ์ปจํธ๋กค๋ฌ, ๋ ํฌ์งํ ๋ฆฌ) * [BE] feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ค๋ช ์์ฑ, ๋ง๊ฐ ๊ธฐํ ๋ฐ ๊ฒ์ฆ ๋ก์ง ์ถ๊ฐ (#34) * feat: BadRequestException ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ด๋ฆ, ์ค๋ช ๊ธธ์ด ๊ฒ์ฆ * [FE] design: theme ,์ ์ญ ์คํ์ผ์ ์ค์ (#41) * chore: ๋ถํ์ํ ํ์ผ ์ญ์ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> * design: theme ์์ฑ - ์์, ํฐํธ ์ฌ์ด์ฆ, ํฐํธ wieght ์ค์ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> * design: emotion ThemeProvider ์ ์ฉ ๋ฐ Theme ํ์ ํ์ฅ - emotion์์ ์ ๊ณตํ๋ Theme ํ์ ์ด ๋น ๊ฐ์ฒด์ฌ์ ์ฝ๋์์ ์ฌ์ฉํ๋ theme์ ๋ง๊ฒ ํ์ ์ ํ์ฅํจ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> * design : rem ์ ํ ๋ฐ reset.css๋ฅผ globalStyle์ ์ ์ฉ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: App์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: ImxYJL <[email protected]> Co-authored-by: soosoo22 <[email protected]> Co-authored-by: Fe <[email protected]> * [FE] ci: ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ๋ฐ msw ์ค์น, eslint import rule ์ถ๊ฐ ๋ฐ ์ ์ฉ (#44) * ci: eslint ์ค๋ฅ ์์ ๋ฐ import rule ์ถ๊ฐ ๋ฐ ๊ด๋ จ ํ๋ฌ๊ทธ์ธ ์ค์น - eslint-config-prettier - eslint-plugin-import Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * style: eslint ์ ์ฉ์ผ๋ก ์ธํ ์ฝ๋ ํฌ๋งทํ ๋ณ๊ฒฝ import ์์ ์ ์ฉ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * ci: msw ์ค์น Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: badahertz52 <[email protected]> Co-authored-by: ImxYJL <[email protected]> Co-authored-by: Fe <[email protected]> * [BE] docs: Swagger๋ฅผ ํ์ฉํ API ๋ฌธ์ ์๋ํ (#31) * chore: swagger-ui ์ค์ ์ถ๊ฐ * feat: swaggerConfig ์ถ๊ฐ * docs: ์ปจํธ๋กค๋ฌ์ swagger ์ด๋ ธํ ์ด์ ์ถ๊ฐ * docs: dto์ swagger ์ด๋ ธํ ์ด์ ์ถ๊ฐ * chore: api ๋ฌธ์ ์ค์ ํ์ผ ์ถ๊ฐ * refactor: SwaggerConfig info ์ค์ ํ์ผ ๋ณ์ ์ฐธ์กฐํ๋๋ก ๋ณ๊ฒฝ * docs: api ๋ฌธ์์ ์ํ์ฝ๋ ์ฌ๋ฐ๋ฅด๊ฒ ๋ ธ์ถ๋๋๋ก ๋ณ๊ฒฝ * chore: api ๋ฌธ์ ํ์ผ๋ช ๋ณ๊ฒฝ * chore: api-docs ํ๋กํผํฐ๋ช ๋ณ๊ฒฝ * refactor: ํ๋กํผํฐ ์ ๋ณด์ ์ค์ ํด๋์ค ๋ถ๋ฆฌ * refactor: ์ปจํธ๋กค๋ฌ ๋ด swagger ์ด๋ ธํ ์ด์ ๋ถ๋ฆฌ --------- Co-authored-by: KIMGYUTAE <[email protected]> * [BE] feat: ๋ฆฌ๋ทฐ ๋๋ฉ์ธ ๊ตฌ์ฒดํ, ์ ์ฑ ๊ตฌํ (#43) * feat: dto ๊ฒ์ฆ์ ์ํ ์์กด์ฑ ์ถ๊ฐ * feat: dto์ jakarta validation ์ด๋ ธํ ์ด์ ์ถ๊ฐ * feat: ์ปจํธ๋กค๋ฌ์์ ์์ฒญ์ ๊ฒ์ฆํ ์ ์๋๋ก ์ค์ * feat: FieldError ๋ด์ฉ์ ๋ณด์ฌ์ค ์๋ต ๊ฐ์ฒด ์์ฑ * feat: FieldError ํธ๋ค๋ฌ ์ถ๊ฐ * refactor: ๋ฌธ์์ด ๊ณต๋ฐฑ ๊ฒ์ฆ์ ์ํด NotBlank ์ฌ์ฉ * style: todo ์ฃผ์ ์ถ๊ฐ * feat: ๋ฐ๋๋ผ์ธ์ด ์ง๋๋ฉด ๋ฆฌ๋ทฐ๋ฅผ ์์ฑํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: ์ฌ์ด์ฆ ๊ฒ์ฆ๋ฌธ ์ ๊ฑฐ * style: ๊ฐํ ๋ณ๊ฒฝ * refactor: ์์ธ ์ด๋ฆ์ ๊ณผ๊ฑฐํ์ผ๋ก ๋ณ๊ฒฝ * refactor: RFC 9457 ํ์์ ์งํค๋ฉด์ ํ๋ ์๋ฌ ์ ๋ณด๋ฅผ ๋ฐํํ๋๋ก ์์ * chore: ์คํ ์์ * fix: conflict ํด๊ฒฐ * feat: dto์ jakarta validation ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: ๋ฌธ์์ด ๊ณต๋ฐฑ ๊ฒ์ฆ์ ์ํด NotBlank ์ฌ์ฉ * refactor: ์ฌ์ด์ฆ ๊ฒ์ฆ๋ฌธ ์ ๊ฑฐ * [BE] feat: ํค์๋ ๋๋ฉ์ธ ๊ตฌ์ฒดํ, ์ ์ฑ ๊ตฌํ (#40) * feat: ํค์๋ ์ผ๊ธ ์ปฌ๋ ์ ๋ฐ ์ ์ฝ์ฌํญ ๊ตฌํ * build: ํ ์คํธ ํ๊ฒฝ์์ Lombok ์์กด์ฑ ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ์ ์ถ๊ฐ๋ ํค์๋ ์ญ์ * feat: ๋ฆฌ๋ทฐ์ ํค์๋ ์ถ๊ฐ * feat: ์ผ๊ธ ์ปฌ๋ ์ ์ ์ด๋ฆ์ SelectedKeywords๋ก ๋ณ๊ฒฝ * refactor: ํค์๋ ๊ฐ์ ์ ์ฑ 5๊ฐ ๋ฐ์ * refactor: ์ค๋ณต ํค์๋ ๋ฉํธ ์์ * refactor: `deleteAll`๋ก ๋ฉ์๋๋ช ์์ * refactor: `duplicated` -> `duplicate`๋ก ์์ * refactor: ํค์๋ ๋๋ฑ์ฑ ๋น๊ต * test: ํค์๋ ๋ฑ๋ก ์ ๊ธฐ์กด ํค์๋ ์ญ์ ํ ์คํธ ์์ฑ * refactor: ์ฌ์ฉํ์ง ์๋ ํ๋ ์ญ์ * style: add newlines between comments * refactor: ํค์๋ ID ๊ธฐ๋ฐ ๋น๊ต * refactor: id๊ฐ ์๋ ๊ฒฝ์ฐ detail ๋น๊ต * refactor: ํค์๋ ํ ์คํธ ๋๋ฉ์ธ ๊ธฐ๋ฐ์ผ๋ก ์์ * [BE] feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ๋๋ฉ์ธ ๊ตฌ์ฒดํ, ์ ์ฑ ๊ตฌํ (#45) * feat: Member ์ํฐํฐ์ GitHub ID ์์ฑ ์ถ๊ฐ * feat: ์์ฑํ ๋ฆฌ๋ทฐ์ด๊ฐ ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน์ ์ํ๋์ง ๊ฒ์ฆ * feat: ๋ฆฌ๋ทฐ ์์ฑ ์, ์ด๋ฏธ ์์ฑํ ๋ฆฌ๋ทฐ๊ฐ ์์ง ์์์ง ๊ฒ์ฆ * refactor: Review ์ํฐํฐ์ reviewer์์ ์ฐ๊ด๊ด๊ณ ManyToOne์ผ๋ก ๋ณ๊ฒฝ * refactor: ์ปฌ๋ผ๋ช ์ค๋ฅ ์์ * refactor: gitHub ํ๊ธฐ -> github์ผ๋ก ๋ณ๊ฒฝ * refactor: GithubReviewGroup -> GithubReviewGroup ํด๋์ค๋ช ๋ณ๊ฒฝ * refactor: ๋๋ฝ๋ @Column ์ถ๊ฐ * test: ๋ฆฌ๋ทฐ ์์ฑ ํ ์คํธ ์, ๊นํ ์ฌ์ฉ์ ๊ทธ๋ฃน ๋ฐ์ดํฐ ์ ์ฅ ๋ถ๋ถ ์ถ๊ฐ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์, ์ค๋ณต ๋ฆฌ๋ทฐ ๊ฒ์ฆ ๋ก์ง ์์ * refactor: GithubReviewerGroupNotFoundException์ UnAuthorizedException ๊ตฌํํ๋๋ก ์์ * refactor: ReviewContentExistException -> ReviewAlreadySubmittedException ํด๋์ค๋ช ๋ณ๊ฒฝ * feat: UnAuthorizedException ์ถ๊ฐ * refactor: ๋ฉ์๋ ์์ ๋ณ๊ฒฝ * test: ๋ถํ์ํ given์ ์ญ์ * test: ํ ์คํธ๋ฅผ ์ํ ๋ฐ์ดํฐ ์ฝ์ repository๋ฅผ ํ์ฉํ๋๋ก ๋ณ๊ฒฝ --------- Co-authored-by: Donghoon Lee <[email protected]> * [FE] ๋ฆฌ๋ทฐ ์ฐ๊ธฐ ํ์ด์ง์ ํ์ ๋ ๋์์ธ์ ๋ฐ์ํ๊ณ , ๋ฆฌํฉํฐ๋งํ๋ค. (#53) * fix: eslint์์ ์ ๋ ๊ฒฝ๋ก๋ฅผ ์ฝ์ง ๋ชปํ๋ ์ค๋ฅ ์์ ์ ๋ ๊ฒฝ๋ก ์ง์ Co-Authored-By: ImxYJL <[email protected]> * design: ์์คํ ๊ธฐ๋ณธ ํฐํธ ํฌ๊ธฐ ์ง์ Co-Authored-By: ImxYJL <[email protected]> * chore: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ emotion.ts์์ theme ์ ๊ฑฐ Co-Authored-By: ImxYJL <[email protected]> * feat: ๊ณตํต ๋ฒํผ ์ปดํฌ๋ํธ ๊ตฌํ Co-Authored-By: ImxYJL <[email protected]> * feat: ํค์๋ ๋ฒํผ ์ปดํฌ๋ํธ ๊ตฌํ Co-Authored-By: ImxYJL <[email protected]> * feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ํผ๋ธ๋ฆฌ์ฑ ๋ฐ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ Co-Authored-By: ImxYJL <[email protected]> * feat: ๋ฆฌ๋ทฐ์ด ์ฝ๋ฉํธ ์ปดํฌ๋ํธ ๊ตฌํ Co-Authored-By: ImxYJL <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์์ ๋ฆฌ๋ทฐ ์์ดํ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ Co-Authored-By: ImxYJL <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ๋ฆฌํฉํฐ๋ง - ๋ฆฌ๋ทฐ์ด ์ฝ๋ฉํธ ์ถ๊ฐ - ๋ฆฌ๋ทฐ ์์ดํ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ - ๋ถ๊ฐ์ ์ธ ์คํ์ผ๋ง Co-Authored-By: ImxYJL <[email protected]> --------- Co-authored-by: ImxYJL <[email protected]> * [FE] feat: sidebar ๋ฆฌํฉํ ๋ง ๋ฐ ๊ธฐ๋ฅ ์ถ๊ฐ , topbar ์ถ๊ฐ, ๋ฐ์ํ ํ์ด์ง ๋ ์ด์์ ์ ์ฉ (#55) * style: globalStyles.ts์์ ๊ฒฝ๋ก ๊ณต๋ฐฑ ์ถ๊ฐ * docs: ๋ถํ์ํ import ์ญ์ Co-Authored-By: soosoo22 <[email protected]> * design : theme ์ถ๊ฐ - ์ถ๊ฐ๋ theme : breakpoints, sidebarWidth Co-Authored-By: soosoo22 <[email protected]> * chore: Header ์ปดํฌ๋ํธ ์ญ์ Co-Authored-By: soosoo22 <[email protected]> * feat : Topbar ์์ฑ, logo ์ด๋ฏธ์ง ๋ณ๊ฒฝ ๋ฐ SearchInput ์์ฑ - logo ์ด๋ฏธ์ง ๋ณ๊ฒฝ - Topbar์ ๋ค์ด๊ฐ๋ ์ปดํฌ๋ํธ๋ค (SidebarOpenButtion, Logo )์์ฑ - userProfile ์ด๋ฏธ์ง ์์ฑ - ๊ณตํต ์ปดํฌ๋ํธ : SearchInput ui ์์ฑ Co-Authored-By: soosoo22 <[email protected]> * feat : ํ์ด์ง ๋ ์ด์์ ์์ฑ - ๋ ์ด์์ ๊ด๋ จ ์ปดํฌ๋ํธ๋ค ์์ฑ Co-Authored-By: soosoo22 <[email protected]> * refactor : App์ ํ์ด์ง ๋ ์ด์์ ์ ์ฉ Co-Authored-By: soosoo22 <[email protected]> * refactor: Sidebar ๋ฆฌํฉํ ๋ง - ๋ฉ๋ด๋ช ์์์ฒ๋ฆฌ - ํผ๊ทธ๋ง ๋์์ธ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ Co-Authored-By: soosoo22 <[email protected]> * feat: sidebar ์ด๊ณ ๋ซ๋ ๊ธฐ๋ฅ ์ถ๊ฐ Co-Authored-By: soosoo22 <[email protected]> --------- Co-authored-by: soosoo22 <[email protected]> * fix: ์ปดํ์ผ ์๋ฌ ํด๊ฒฐ (#60) Co-authored-by: nayonsoso <[email protected]> * [FE] fix : stylelint ์ ์ฉ ์ค๋ฅ ์์ (#66) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * ci: CI ์คํฌ๋ฆฝํธ ์์ฑ (#70) * [BE] test: ๊นํ ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน์ ํ ์คํธ ์ถ๊ฐ ๋ฐ fixture ๋ฏธ์ ์ฉ ๋ถ๋ถ ๋ณด์ (#68) * test: GithubReviewerGroupRepository ํ ์คํธ ์ถ๊ฐ * test: ReviewServiceTest์ ํ ์คํธ fixture ์ ์ฉ * test: given, when, then์ ์ถ๊ฐ * test: given ๋ฐ์ดํฐ ์ค๋ฅ ์์ * [BE] chore: workflow ๋๋ ํฐ๋ฆฌ ์ด๋ (#74) * chore: workflow ๋๋ ํฐ๋ฆฌ ์ด๋ * fix: ๋ฐฑ์๋ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ * fix: ๋ฐฑ์๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ * fix: checkout actions์ ๋๋ ํ ๋ฆฌ ์ค์ * fix: ๋๋ ํ ๋ฆฌ ์ค์ ... * infra: CD ํ์ดํ๋ผ์ธ ์์ฑ (#76) * fix: cd gradle ๋๋ ํ ๋ฆฌ ์ด๋ (#77) * [BE] refactor: ๋จ๊ฑด ๋ฆฌ๋ทฐ ์กฐํ ์ ๋ฆฌ๋ทฐ์ด ์ ๋ณด ์ญ์ , ๋ฆฌ๋ทฐ ์์ฑ ์์ ์ถ๊ฐ (#65) * refactor: ๋ฆฌ๋ทฐ ์กฐํ ์ ๋ฆฌ๋ทฐ ์์ฑ ์๊ฐ ์ถ๊ฐ, ๋ฆฌ๋ทฐ์ด ์ ๋ณด ์ญ์ * fix: ํ ์คํธ ์ด๋ ธํ ์ด์ ํ์ฑํ ๋ฐ ์์ * chore: ํ ์คํธ ํด๋์ค ํจํค์ง ์ด๋ * refactor: ๋ถํ์ํ given์ ์ ๊ฑฐ * [FE] ๋ฆฌ๋ทฐ ์์ฑ, ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ์ด์ง์ ๋ฐฑ์๋ API ์ฐ๋ ๋ฐ dotenv-webpack ์ค์น, BASE_URL์ .env๋ก ์ด๋ (#78) * chore: gitignore์ yarn-error.log ์ถ๊ฐ * ci: env ํ์ผ ์ฌ์ฉ์ ์ํ dotenv-webpack ์ค์น * refactor: ์๋ํฌ์ธํธ์ env ํ์ผ์ ํตํ API_BASE_URL ๊ฒฝ๋ก ์ ์ฉ * fix: ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ ๋ฐ์ดํฐ์์ ๋ฐฑ์๋ ์๋ต๊ณผ ์์ฑ ์ด๋ฆ์ด ๋ฌ๋๋ ๋ถ๋ถ ์์ * refactor: ๋ฐฑ์๋ ์๋ต ๋ฐ ๋ฆฌํฉํ ๋ง๋ ๋ฆฌ๋ทฐ ์ฐ๊ธฐ ํ์์ ๋ง๊ฒ ๋ฆฌ๋ทฐ ์ฐ๊ธฐ ๋ชจํน ๋ฐ์ดํฐ ์์ * chore: ๋ถํ์ํ console.log ์ญ์ * [Fe] ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ๋ฐ์ํ๋ eslint ์ค๋ฅ๋ฅผ ์์ ํ์ต๋๋ค. (#81) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * [FE] ci: Jest, RTL ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ถ (#84) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * ci: jest ๋ฐ RTL ์ค์น * ci: jest ํ์ ์ค์ ์ถ๊ฐ * ci: CI๋ฅผ ์ํ yml ํ์ผ ํ ์คํธ * fix: ์๋ชป ์ฌ๋ผ๊ฐ ํ์ผ ์ญ์ --------- Co-authored-by: badahertz52 <[email protected]> * [BE] refactor: ๋ฐ์ํ๋ ๋ชจ๋ ์์ธ์ ํ์ ํต์ผ (#69) * refactor: ์ปค์คํ ์์ธ๋ฅผ ๋ฐ์์ํค๋๋ก ์์ * refactor: ๋ชจ๋ ์์ธ๋ฅผ ์ก์ ์ ์๋๋ก ์์ * refactor: ExceptionHandler๊ฐ ๋ฐํํ๋ ์์ธ ์๋ต ํ์ ๋ณ๊ฒฝ - ProblemDetail๋ก ๋ณ๊ฒฝ * refactor: ResponseEntityExceptionHandler๋ฅผ ์์ํ์ง ์๋๋ก ๋ณ๊ฒฝ * feat: ResponseEntityExceptionHandler์์ ์ฒ๋ฆฌํ๋ ์์ธ๋ฅผ ์ง์ ํธ๋ค๋ง * feat: CORS ์ค์ ์ถ๊ฐ (#88) * fix: ci PR ๋ธ๋์น ์ค์ (#92) * refactor: ์์ธ ํธ๋ค๋ฌ ์ธ์ ๋ณ๊ฒฝ (#87) * [BE] ๋๋ฉ์ธ ์ฐ๊ด๊ด๊ณ ์ฌ์ค์ (#97) * feat: ๊นํ๋ธ ์์ด๋ ์์๊ฐ ํฌ์ฅ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ํ์ `GithubId` ์ฌ์ฉ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ํค์๋ ๋ด ์ปฌ๋ผ ์์ (content) Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ์ผ๊ธ ์ปฌ๋ ์ ์ด๋ฆ ๋ณ๊ฒฝ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ์ง๋ฌธ ์ํฐํฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ๋ต๋ณ ๊ตฌ์กฐ ๋ณ๊ฒฝ, ๊ธธ์ด ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ํค์๋ ์ฐ๊ด๊ด๊ณ ์์ด ์ฐธ์กฐํ๋๋ก ์ค์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * test: ๋ต๋ณ ๊ธธ์ด ํ ์คํธ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ ์์ฑ ์ ํค์๋ ๋ฐ์์ ์์ฑ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * test: ๋ฆฌ๋ทฐ์ด์ ๋ฆฌ๋ทฐ์ด ๊ฐ์ ๊ฒฝ์ฐ์ ์์ธ ํ ์คํธ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: ๋ฆฌ๋ทฐ-ํค์๋ ๋งคํ ํ ์ด๋ธ ์ญ์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * fix: Fixture ์ฌ์ฉํด ์ปดํ์ผ ์๋ฌ ํด๊ฒฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ์ผ๋๋ค ํธ์ ๋ฉ์๋ ์์ฑ, Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๊นํ๋ธ ์์ด๋ ๊ทธ๋ฃน, ๋ฆฌ๋ทฐ์ด ์ฐ๊ด๊ด๊ณ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน - ๋ฆฌ๋ทฐ ์ผ๋๋ค ๋จ๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ ์ ์ฉ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน - ๋ฆฌ๋ทฐ ์ผ๋๋ค ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ ์ ์ฉ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ๊นํ๋ธ ์์ด๋ ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ์ ํ๋ฆฌ๋ทฐ ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: ์ฌ์ฉํ์ง ์๋ ํ์ผ ์ญ์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ ์ถ๊ฐ ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * fix: ์ํ ์ฐธ์กฐ NPE ํด๊ฒฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: Github ID ํจํค์ง ์ด๋ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ - ๋ฆฌ๋ทฐ ๋ต๋ณ ์ฐ๊ด๊ด๊ณ ์ค์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: ์ฌ์ฉํ์ง ์๋ ์ฝ๋ ์ ๊ฑฐ * refactor: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ์์ธ ๋ณด๊ธฐ ๊ตฌํ --------- Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * [FE] feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ๊ธฐ๋ฅ ๊ตฌํ (#89) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * chore: ํ์ฌ ์ฌ์ฉ๋์ง ์๋ ์ ์ฅ ๋ฒํผ ์จ๊น ์ฒ๋ฆฌ * design: ๊ธฐ๋ณธ ํฐํธ ์ฌ์ด์ฆ ๋ณ๊ฒฝ - 15px -> 16px๋ก ์์ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * design: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ์์ ๋ ๋์์ธ ์ ์ฉ - ์์ ์ฝ๋ ์์ - ๋ฒํผ ํธ๋ฒ ์ ์คํ์ผ๋ง ์์ - ๋ฆฌ๋ทฐ ๋ง๊ฐ์ผ ๋ ์ง ํ์ ๋ณ๊ฒฝ * design: ๋ฆฌ๋ทฐ ์ง๋ฌธ์ ์๋ด ๋ฌธ๊ตฌ ๋ฐ placeholder ์ถ๊ฐ - ๊ฐ ์ง๋ฌธ์ ' (20์ ์ด์)' ๋ฌธ๊ตฌ ํ๋์ฝ๋ฉ - ์ต๋ 1000์ ์ ๋ ฅ ๊ฐ๋ฅํ๋ค๋ ๋ฌธ๊ตฌ๋ฅผ textarea์ placeholder๋ก ์ถ๊ฐ * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * chore: api๋ช ๋ฐ endpoint๋ช ์์ * chore: ๋ฆฌ๋ทฐ ์ง๋ฌธ ๋ชฉ๋ก์ ์๋ฒ์์ ๋ฐ์์ค๊ธฐ ์ํด ์์ ์ ๊ฑฐ * chore: api ๋ฌธ์ ํ์์ ๋ง๊ฒ ๋ฐ์ดํฐ ํ์ ์์ * fix: ํค์๋ ๋ฒํผ์ ๋๋ ์ ๋ ํผ์ด ์ ์ถ๋๋ ๋ฌธ์ ํด๊ฒฐ * feat: ์์ฑํ ๋ฆฌ๋ทฐ ๋ด์ฉ์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ์ํ์ ๋๊ธฐํํ๋๋ก ์ค์ * design: textarea์ ํฌ๊ธฐ๋ฅผ ๊ณ ์ ์ํค๊ณ , ๋์ด๊ฐ ๊ฒฝ์ฐ ์คํฌ๋กค ๋๋๋ก ๋ณ๊ฒฝ * design: ๊ณตํต ๋ฒํผ ์ปดํฌ๋ํธ์ ์กฐ๊ฑด๋ถ ์คํ์ผ๋ง ๊ตฌํ * design: disabled ๊ด๋ จ ์์ ๋ณ์ ์ถ๊ฐ * feat: ๋ชจ๋ ํผ์ ์์ฑํ์ ๋ ์ ์ถ ๋ฒํผ์ด ํ์ฑํ๋๋๋ก ๊ตฌํ, ํค์๋ ์ ํ ๋ก์ง ๊ตฌํ * feat: ์ ์ถ ๋ฒํผ ํด๋ฆญ ์ confirm ๋ฐ์, ํ ๋ฒ ๋ ํ์ธ ์ ์ ์ถ๋๋๋ก ๊ตฌํ * feat: ํค์๋ ๋ฒํผ์ 5๊ฐ ์ด๊ณผํด์ ์ ํํ ์ ์๋๋ก ๊ตฌํ * feat: textarea์ 1000์๋ฅผ ์ด๊ณผํด์ ์ ๋ ฅํ ์ ์๋๋ก ๊ตฌํ ๋ฐ ํ์ฌ ๊ธ์์ ํ์ * fix: ์ด๋ฏธ ์ ํ๋ ํค์๋๋ฅผ ํด์ ํ๋ ค ํด๋ ๊ฐ์ ์ ํ๋๋ ์ค๋ฅ ์์ * refactor: ํผ ์ ํจ์ฑ ๊ฒ์ฌ ์กฐ๊ฑด๋ค์ ๋ณ์๋ก ๋ถ๋ฆฌ * design: ํค์๋ ๋ฒํผ๋ค์ ํฌ๊ธฐ๋ฅผ fit-content๋ก ๋ณ๊ฒฝ ๋ฐ ๊ฐ๋ก๋ก ๋์ดํ๋๋ก ์์ * chore: api ์ฐ๊ฒฐ ์ด์ , ์์๋ก ํผ ์ ๋ณด๋ฅผ ์ฝ์์ ์ถ๋ ฅํ๋๋ก ์ค์ * chore: ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ํ์ด์ง ๋ผ์ฐํฐ ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ํ์ด์ง ๋ฐ ์์ฑ ์๋ฃ ์ ํ์ด์ง ์ด๋ ๊ธฐ๋ฅ ๊ตฌํ * refactor: ๋ฆฌ๋ทฐ ์์ดํ ์ปดํฌ๋ํธ ๋งค์ง๋๋ฒ ์์ํ * chore: ์๊ณ ์์ด์ฝ ์คํ์ผ ์ปดํฌ๋ํธํ * refactor: ๋ฆฌ๋ทฐ ๊ด๋ จ ๋ฉ์์ง ์์ ๋ถ๋ฆฌ * design: ๋ฆฌ๋ทฐ ์์ฑ๋ placeholder ๋ฐ ๋ณธ๋ฌธ font weight ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ๋ฌธํญ ๋ฒํธ ๋์ ์ผ๋ก ๋ถ์ฌํ๋๋ก ๋ณ๊ฒฝ ๋ฐ ์์ํ ์ ์ฉ * refactor: on-, handle- prefix ๊ด๋ จ ์ปจ๋ฒค์ ์ ์ฉ ๋ฐ ํค์๋ ๋ฒํผ ์ธํฐํ์ด์ค ํ์ฅ * chore: ๋ฆฌ๋ทฐ ๋ต๋ณ์ ๊ธธ์ด๊ฐ ์ ํจํ์ง ์ฒดํฌํ๋ ๋ณ์์ ์ด๋ฆ์ ์๋ฏธ๋ฅผ ์ ๋๋ฌ๋ด๋๋ก ์์ * refactor: ๊ณตํต ๋ฒํผ์ ํ์ ๋ณ ์คํ์ผ์ ํจ์๋ก ๋ถ๋ฆฌ * style: api ํธ์ถ ํจ์๋ช ์ปจ๋ฒค์ ์ ๋ง๊ฒ ์์ * chore: ๋ถํ์ํ PropsWithChildren import ์ ๊ฑฐ --------- Co-authored-by: badahertz52 <[email protected]> * [FE] MSW๋ฅผ mock server๋ก ์ ํ (#95) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * style: eslint ์ ์ฉ์ ๋ฐ๋ฅธ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง import ์์ ์ ๋ฆฌ * refactor: formatDate๋ฅผ utils/date ํ์ผ๋ก ์ด๋ * design: theme์ colors,, fontSize ๋ณ๊ฒฝ ๋ฐ borderRadius ์ถ๊ฐ * feat: MultilineTextViewer ์ปดํฌ๋ํธ ์์ฑ - ๊ฐํ์ด ํฌํจ๋ string์ ๊ฐํ์ ์ ์ฉํด์ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ * feat: ๊นํ๋ธ ์ ์ฅ์ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ ์์ฑ * feat: ๋ฆฌ๋ทฐ์ ๊ด๋ จ๋ ๋ ์ง UI ์ปดํฌ๋ํธ ์์ฑ * featr: LockButton ์ญ์ LockToggle ์ถ๊ฐ * refactor: ํผ๊ทธ๋ง ๋์์ธ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ReviewDescription ๋ณ๊ฒฝ * feat: ReviewComment ์ปดํฌ๋ํธ ์์ฑ * refactor: ReviewViewSection -> ReviewSection ์ผ๋ก ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ๋ถํ์ํ ์ปดํฌ๋ํธ ์ญ์ : RevieAnswer , ReviewQuestion * refactor: DetailedReviewPage ๋ฆฌํฉํ ๋ง - ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ - ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ์ปดํฌ๋ํธ(DetailedReviewPage) ๋ฆฌํฉํ ๋ง - DetailedReviewPage ํด๋์ styles.ts ์ญ์ * refactor: review์ ๋ํ ํ์ ๋ณ๊ฒฝ * design : ReviewDate์ ํด๋ก ์คํ์ผ ์ ์ฉ * feat: KeywordSection ์ปดํฌ๋ํธ ์์ฑ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ํค์๋ ๋ถ๋ถ ์ปดํฌ๋ํธ ์์ฑ * feat: ReviewSectionHeader ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ์์ ๋ฐ๋ณต๋๋ ์ง๋ฌธ,ํค์๋ ํค๋๋ถ๋ถ์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌ * design : ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ width ๋ณ๊ฒฝ * refactor: DetailedReview์ ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํฐ ๋ณ๊ฒฝ - KeywordSection ์ ์ฉ * design : formWidth๋ฅผ theme์ ์ถ๊ฐ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ/๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ์ ์ฉ * fix: Layout์์ ๊ฐ๋ก ์คํฌ๋กค ์๊ธฐ๋ ์ค๋ฅ ์์ - 100vw๋ ์คํฌ๋กค์ ํฌํจํ ๋ทฐํฌํธ ๋๋น๋ผ์ 100%์ผ๋ก ์์ * feat: ๋ฆฌ๋ทฐ ์ํ์ด์ง router์ ๋ผ์ฐํฐ ํ๋ผ๋ฏธํฐ ์ ์ฉ ๋ฐ ๊ด๋ จ ์ค์ ๋ณ๊ฒฝ - ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์ํด ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง id๋ฅผ sidebar์ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ๋ฉ๋ด link์ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธํ์ด์ง(DetailedReviewPage)์ api ํธ๋ค๋ฌ ์์ * docs: ๋ณ์๋ช ๋ณ๊ฒฝ (isLock -> isPublic) * refactor: ๊นํ ์ ์ฅ์ ๋ก๊ณ ์ฃผ์ ๋ณ์๋ช ๋ณ๊ฒฝ - projectImgSrc -> thumbnailUrl * ci: msw ๊ด๋ จ ํจํค์ง ์ค์น * ci: msw ๊ด๋ จ ์ค์ ํ์ผ ์ถ๊ฐ - ๋ธ๋ผ์ฐ์ ํ๊ฒฝ, node ํ๊ฒฝ์์ msw๋ก ๋ชฉ์๋ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ด๋ จ ํ์ผ ์ถ๊ฐ * feat: mock ํธ๋ค๋ฌ ์ถ๊ฐ ๋ฐ ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง ๋ชฉ ๋ฐ์ดํฐ ์ถ๊ฐ * feat: root์์ ๋ชฉ์๋ฒ ์ฌ์ฉํ ์ ์๋๋กํจ * refactor: endpoint ์์ - env ์์ ์๋ฒ ์ฃผ์ ๋์ ์ฌ๋์ ๋ฃ๋ ๊ฒ์ผ๋ก ํต์ผ * feat: ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง(detailedReviewPage)์ ๋ชฉ์๋ฒ ์ฐ๊ฒฐ ๋ฐ ๊ด๋ จ ์ฝ๋ ์์ - ์ํ๋ช ๋ณ๊ฒฝ: detailReview -> detailedReview - detailedReview ํ์ ์ null ์ถ๊ฐ ๋ฐ ๊ทธ์ ๋ฐ๋ฅธ ์ค๋ฅ ํธ๋ค๋ง ์ถ๊ฐ - deadline์ string ํ์ ์ผ๋ก response๋ก ์ ๋ฌ๋์ด์ new Date๋ก ๊ฐ์ธ์ props๋ก ์ ๋ฌ * docs: indexhtml์ title ๋ณ๊ฒฝ * style: apis/review.ts ์ import ๊ด๋ จ eslint rule ์ ์ฉ์ ๋ฐ๋ฅธ ์์ * fix: ts์์ process ์ฝ์ง ๋ชปํ๋ ์ค๋ฅ ์์ * fix: webpack dev server script ๋ณต์ * [FE] ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง : url router ์ฐ๋, ๋ณ๊ฒฝ๋ ๋์์ธ ๋ฐ์ ๋ฐ ์๋ฒ์์ api๋ฅผ ์ฐ๋ (#91) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * style: eslint ์ ์ฉ์ ๋ฐ๋ฅธ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง import ์์ ์ ๋ฆฌ * refactor: formatDate๋ฅผ utils/date ํ์ผ๋ก ์ด๋ * design: theme์ colors,, fontSize ๋ณ๊ฒฝ ๋ฐ borderRadius ์ถ๊ฐ * feat: MultilineTextViewer ์ปดํฌ๋ํธ ์์ฑ - ๊ฐํ์ด ํฌํจ๋ string์ ๊ฐํ์ ์ ์ฉํด์ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ * feat: ๊นํ๋ธ ์ ์ฅ์ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ ์์ฑ * feat: ๋ฆฌ๋ทฐ์ ๊ด๋ จ๋ ๋ ์ง UI ์ปดํฌ๋ํธ ์์ฑ * featr: LockButton ์ญ์ LockToggle ์ถ๊ฐ * refactor: ํผ๊ทธ๋ง ๋์์ธ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ReviewDescription ๋ณ๊ฒฝ * feat: ReviewComment ์ปดํฌ๋ํธ ์์ฑ * refactor: ReviewViewSection -> ReviewSection ์ผ๋ก ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ๋ถํ์ํ ์ปดํฌ๋ํธ ์ญ์ : RevieAnswer , ReviewQuestion * refactor: DetailedReviewPage ๋ฆฌํฉํ ๋ง - ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ - ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ์ปดํฌ๋ํธ(DetailedReviewPage) ๋ฆฌํฉํ ๋ง - DetailedReviewPage ํด๋์ styles.ts ์ญ์ * refactor: review์ ๋ํ ํ์ ๋ณ๊ฒฝ * design : ReviewDate์ ํด๋ก ์คํ์ผ ์ ์ฉ * feat: KeywordSection ์ปดํฌ๋ํธ ์์ฑ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ํค์๋ ๋ถ๋ถ ์ปดํฌ๋ํธ ์์ฑ * feat: ReviewSectionHeader ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ์์ ๋ฐ๋ณต๋๋ ์ง๋ฌธ,ํค์๋ ํค๋๋ถ๋ถ์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌ * design : ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ width ๋ณ๊ฒฝ * refactor: DetailedReview์ ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํฐ ๋ณ๊ฒฝ - KeywordSection ์ ์ฉ * design : formWidth๋ฅผ theme์ ์ถ๊ฐ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ/๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ์ ์ฉ * fix: Layout์์ ๊ฐ๋ก ์คํฌ๋กค ์๊ธฐ๋ ์ค๋ฅ ์์ - 100vw๋ ์คํฌ๋กค์ ํฌํจํ ๋ทฐํฌํธ ๋๋น๋ผ์ 100%์ผ๋ก ์์ * feat: ๋ฆฌ๋ทฐ ์ํ์ด์ง router์ ๋ผ์ฐํฐ ํ๋ผ๋ฏธํฐ ์ ์ฉ ๋ฐ ๊ด๋ จ ์ค์ ๋ณ๊ฒฝ - ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์ํด ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง id๋ฅผ sidebar์ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ๋ฉ๋ด link์ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธํ์ด์ง(DetailedReviewPage)์ api ํธ๋ค๋ฌ ์์ * docs: ๋ณ์๋ช ๋ณ๊ฒฝ (isLock -> isPublic) * refactor: ๊นํ ์ ์ฅ์ ๋ก๊ณ ์ฃผ์ ๋ณ์๋ช ๋ณ๊ฒฝ - projectImgSrc -> thumbnailUrl * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง api ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง keyword ํ์ ๋ณ๊ฒฝ - api endpoint ๋ณ๊ฒฝ , router ๋ณ๊ฒฝ, sidebar ์์ธ๋ณด๊ธฐ ๊ฒฝ๋ก ๋ณ๊ฒฝ - useState์ ๋น ๊ฐ์ ๋ํ ํ์ ์ถ๋ก ์ฌ์ฉ * [BE] test: ๋๋ฉ์ธ ์ฐ๊ด๊ด๊ณ ์ฌ์ค์ ํ ํ ์คํธ ์์ฑ (#101) * test: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ํ ์คํธ ์์ฑ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ ์คํธ๋ฅผ `ReviewTest`๋ก ์ด๋ * test: ๋ฆฌ๋ทฐ์ด ์ค๋ณต ์ถ๊ฐ ํ ์คํธ * refactor: Test Fixture ์ฌ์ฉํ๋๋ก ์์ * refactor: ์์ธ ํด๋์ค๋ช ํต์ผ * style: ํ ์คํธ ๊ฐํ * refactor: ํ ์คํธ๋ช ๋ช ํํ๊ฒ ์์ * refactor: ํ์ ๋๋ฉ์ธ์์์ ๋น๊ต๋ฅผ GithubId๋ก ์งํํ๋๋ก ์์ * refactor: createdAt ์ฌ์ฉํ์ง ์๊ณ , deadline์ผ๋ก ์์ * refactor: ํ๋๋ช reviewerGithubIds๋ก ํต์ผ * test: ๋ฆฌ๋ทฐ์ด ์ค๋ณต ์์ฑ ๊ฒ์ฆ * refactor: reviewer/reviewee ํต์ผ * refactor: ๋ฆฌ๋ทฐ์ด-๋ฆฌ๋ทฐ์ด github id๋ฅผ ๋ช ์ * refactor: ํ ์คํธ์ ํ๋์ ๊ฒ์ฆ๋ง ์งํ๋๋๋ก ์์ * [FE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง ๊ธฐ๋ฅ ๊ตฌํ (#90) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * feat: DropDown ์ปดํฌ๋ํธ ๊ตฌํ - ์ฌ์ฉ์ ์ ํ์ ์ํ `DropDown` ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํ - `onChange` ์ด๋ฒคํธ ํธ๋ค๋ฌ์ `options` ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ์ต์ ์ ๋์ ์ผ๋ก ํ์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: svg ์์ด์ฝ ํฌ๊ธฐ ์์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * design: Topbar UI ์์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * design: ๋ฒํผ, ๊ฒ์์ฐฝ UI ์์ ํ export Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * feat: ReviewPreviewCard ์ปดํฌ๋ํธ ๊ตฌํ - ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋ ์ปดํฌ๋ํธ ๊ตฌํ - ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ด๋ฆ, ์์ฑ์ผ, ๋ฆฌ๋ทฐ ๋ด์ฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ํค์๋, ๊ณต๊ฐ ์ฌ๋ถ๋ฅผ ํ์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: ReviewPreview ์ธํฐํ์ด์ค ์ถ๊ฐ - ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ `ReviewPreview` ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํ์ต๋๋ค. Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * feat: SearchSection ์ปดํฌ๋ํธ ๊ตฌํ - ๊ฒ์ ์ ๋ ฅ์ฐฝ, ๊ฒ์ ๋ฒํผ, ๋๋กญ๋ค์ด์ ํฌํจํ์ฌ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * feat: ReviewPreviewListPage ๊ตฌํ ๋ฐ ๋ชจ์ ๋ฐ์ดํฐ ์ถ๊ฐ - `ReviewPreviewListPage` ์ปดํฌ๋ํธ ๊ตฌํ - `SearchSection`์ ํฌํจํ์ฌ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํ - `ReviewPreviewCard`๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ํ์ - ๋ชจ์ ๋ฐ์ดํฐ(`mockReviewPreviews`) ์ถ๊ฐ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: import ์ค๋ณต ๋ฐ ์์ ์ ๋ฆฌ, ReviewPreviewListPage ๋ผ์ฐํธ ์ถ๊ฐ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: ์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ๊ฐ์ธ๊ธฐ ๋๋ฌธ์ Container๋ก ๋ณ๊ฒฝ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ๊ฐ์ ธ์ค๊ธฐ ์ํด getReviewListApi ํจ์ ์ถ๊ฐ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * refactor: ์์ธ ๋ฆฌ๋ทฐ ๋ถ๋ฌ์ค๊ธฐ api ์๋ํฌ์ธํธ ์์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * refactor: ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง API ์ฐ๋ ๋ถ๋ถ ์์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: badahertz52 <[email protected]> Co-authored-by: ImxYJL <[email protected]> Co-authored-by: Fe <[email protected]> * [BE] feat: ๋ฆฌ๋ทฐ ์์ฑ API ๊ตฌํ (#102) * refactor: ๋ฆฌ๋ทฐ ์์ฒญ dto ์์ * refactor: ๋ฆฌ๋ทฐ ์ฝํ ์ธ ์์ฑ ์, ๋ฆฌ๋ทฐ์ ์์ ์ ์ถ๊ฐํ๋๋ก ๋ณ๊ฒฝ * feat: QuestionRepository ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ์์ฑ ๊ธฐ๋ฅ ์ถ๊ฐ * test: ๋ฆฌ๋ทฐ ์์ฑ ํ ์คํธ ์ถ๊ฐ * refactor: ReviewGroup ์์ฑ ์, GithubIdReviewerGroup๋ ๊ฐ์ด ์ ์ฅ๋๋๋ก ๋ณ๊ฒฝ * refactor: GithubId equals ๋ฐ hashcode ์ฌ์ ์ * refactor: review ์์ฑ ์, reviewGroup์ด null์ด ์๋๋๋ก ๋ณ๊ฒฝ * refactor: EqualsAndHashCode์ id ๋ช ์ * refactor: reviewee๋ฅผ reviewerGroup ํตํด์ ๋ฐ์์ค๋๋ก ๋ณ๊ฒฝ * refactor: ํ๋ผ๋ฏธํฐ long ํ์ ์ผ๋ก ๋ณ๊ฒฝ * test: ์ฌ์ฉํ์ง ์๋ ๋ณ์ ์ ๊ฑฐ * test: ํ๋ผ๋ฏธํฐ๋ณ๋ก ๊ฐํํ๋๋ก ๋ณ๊ฒฝ * refactor: ReviewerGroupGithubIds์ reviewerGithubIds๋ฅผ CascadeType.PERSIST๋ก ๋ณ๊ฒฝ * chore: ๋ค๋ฅธ ์์ ์์ ์งํ๋ ์ฌํญ์ผ๋ก ์ฌ์ฉํ์ง ์๋ ํ ์คํธ ์ญ์ * [FE] Github Actions๋ก CI ๊ตฌ์ถ (#96) * ci: CI๋ฅผ ์ํ yml ํ์ผ ์์ฑ * ci: yarn.lock ๊ฒฝ๋ก ์ถ๊ฐ * ci: working-directory ์ถ๊ฐ * cI: ๋์ ํ ์คํธ๋ฅผ ์ํด push ๋ธ๋์น ๊ฒฝ๋ก ์กฐ๊ฑด์์ frontend ์์ ์ ๊ฑฐ * ci: ํ ์คํธ๋ฅผ ์ํด ํ์ฌ ๋ธ๋์น๋ ์กฐ๊ฑด์ ์ถ๊ฐ * ci: package์ test ๋ช ๋ น์ด ์ถ๊ฐ * ci: yarn.lock ํ์ผ ์ ๋ฐ์ดํธ * ci: ํ ์คํธ ํ์ผ ํ์ ์์ * chore: ํ์์๋ ํ์ผ ์ญ์ * chore: svg ํ์ผ์ ๋๋ฌธ์๋ก importํ ๊ฒ๋ค ์๋ฌธ์๋ก ์์ * ci: ์นํฉ env ์ค์ ์ ๋ฐ์ดํธ * ci: process.env ์ฌ์ฉ์ ์ํ ํ์ ์ค์ * ci: env ์นํฉ ์ค์ ๊ฒฝ๋ก๋ฅผ ์ ๋ ๊ฒฝ๋ก๋ก ๋ณ๊ฒฝ * ci: env ์นํฉ ์ค์ ๊ฒฝ๋ก ์์ * ci: env ์ ๋๊ฒฝ๋ก ์์ * ci: ์ ๋๊ฒฝ๋ก ์์ 2 * ci: ์ฝ๊ธฐ ๊ถํ์ ๋ช ์์ ์ผ๋ก ์ฃผ๊ณ ํ ์คํธ * ci: dist ํ์ผ ํ ์คํธ * ci: CI ํ๊ฒฝ์์๋ env ํ์ผ ์์ฑ * ci: ๋ฐฐํฌ ์ ์ ๋์ ํ์ธ์ ์ํ github pages ์์ ๋ฐฐํฌ ์ค์ * ci: ์์ ๋ฐฐํฌ ์ฝ๋ ์ญ์ * ci: develop ๋ธ๋์น๋ก frontend ์ดํ ๊ฒฝ๋ก์์ PR์ด ์ฌ๋ผ์ฌ ๋ CI๊ฐ ์คํ๋๋๋ก ์์ * ci: node ์ค์น ์๋ฌ ํด๊ฒฐ * [BE] feat: ๋ฆฌ๋ทฐ์ ํ์ํ ์ ๋ณด ์กฐํ ๊ธฐ๋ฅ ์ถ๊ฐ (#103) * test: QuestionTestFixture ์์ฑ * feat: ๋ชจ๋ ๋ฆฌ๋ทฐ ๋ฌธํญ์ ์กฐํํ๋ ๊ธฐ๋ฅ ๊ตฌํ * feat: ๋ชจ๋ ํค์๋๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ ๊ตฌํ * test: ReviewerGroupFixture ์์ฑ * feat: ๋ฆฌ๋ทฐ ์์ฑ ์ ํ์ํ ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ ๋ณด๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ ๊ตฌํ * feat: ๋ฆฌ๋ทฐ ์์ฑ ์ ํ์ํ ์ ๋ณด๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ ๊ตฌํ * refactor: @ServiceTest ์ ์ฉ * refactor: swagger ์ ์ฉ * refactor: ํ๋๋ช ๋ณ๊ฒฝ * style: ๊ฐํ ์ถ๊ฐ * refactor: ๋ ์ง ํ์ ๋ณ๊ฒฝ * test: import๋ฌธ ์ ๊ฑฐ * refactor: ReviewCreationResponse ํจํค์ง ๋ณ๊ฒฝ * refactor: readOnly ํธ๋์ญ์ ์ ์ฉ * fix: ๋ฆฌ๋ทฐ์ด ์ค๋ณต ๊ฒ์ฆ ์์ ์ ๊ฑฐ --------- Co-authored-by: donghoony <[email protected]> * [FE] ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์์ MSW๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ mocking (#111) * chore: ์ค๋ณต๋ ์ธํฐํ์ด์ค ์ ๊ฑฐ * feat: MSW ํธ๋ค๋ฌ ๋ฐ mock data ์ถ๊ฐ * chore: ๋ฆฌ๋ทฐ ์ฐ๊ธฐ ํ์ด์ง ๋ฐ์ดํฐ endpoint ์์ * feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ msw๋ฅผ ์ ์ฉํ์ฌ ์๋ฒ mocking * merge * [FE] ๊ณตํต ์ปดํฌ๋ํธ์ธ ๋ชจ๋ฌ์ ๋ง๋ ๋ค. (#110) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * style: eslint ์ ์ฉ์ ๋ฐ๋ฅธ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง import ์์ ์ ๋ฆฌ * refactor: formatDate๋ฅผ utils/date ํ์ผ๋ก ์ด๋ * design: theme์ colors,, fontSize ๋ณ๊ฒฝ ๋ฐ borderRadius ์ถ๊ฐ * feat: MultilineTextViewer ์ปดํฌ๋ํธ ์์ฑ - ๊ฐํ์ด ํฌํจ๋ string์ ๊ฐํ์ ์ ์ฉํด์ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ * feat: ๊นํ๋ธ ์ ์ฅ์ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ ์์ฑ * feat: ๋ฆฌ๋ทฐ์ ๊ด๋ จ๋ ๋ ์ง UI ์ปดํฌ๋ํธ ์์ฑ * featr: LockButton ์ญ์ LockToggle ์ถ๊ฐ * refactor: ํผ๊ทธ๋ง ๋์์ธ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ReviewDescription ๋ณ๊ฒฝ * feat: ReviewComment ์ปดํฌ๋ํธ ์์ฑ * refactor: ReviewViewSection -> ReviewSection ์ผ๋ก ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ๋ถํ์ํ ์ปดํฌ๋ํธ ์ญ์ : RevieAnswer , ReviewQuestion * refactor: DetailedReviewPage ๋ฆฌํฉํ ๋ง - ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ - ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ์ปดํฌ๋ํธ(DetailedReviewPage) ๋ฆฌํฉํ ๋ง - DetailedReviewPage ํด๋์ styles.ts ์ญ์ * refactor: review์ ๋ํ ํ์ ๋ณ๊ฒฝ * design : ReviewDate์ ํด๋ก ์คํ์ผ ์ ์ฉ * feat: KeywordSection ์ปดํฌ๋ํธ ์์ฑ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ํค์๋ ๋ถ๋ถ ์ปดํฌ๋ํธ ์์ฑ * feat: ReviewSectionHeader ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ์์ ๋ฐ๋ณต๋๋ ์ง๋ฌธ,ํค์๋ ํค๋๋ถ๋ถ์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌ * design : ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ width ๋ณ๊ฒฝ * refactor: DetailedReview์ ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํฐ ๋ณ๊ฒฝ - KeywordSection ์ ์ฉ * design : formWidth๋ฅผ theme์ ์ถ๊ฐ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ/๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ์ ์ฉ * fix: Layout์์ ๊ฐ๋ก ์คํฌ๋กค ์๊ธฐ๋ ์ค๋ฅ ์์ - 100vw๋ ์คํฌ๋กค์ ํฌํจํ ๋ทฐํฌํธ ๋๋น๋ผ์ 100%์ผ๋ก ์์ * feat: ๋ฆฌ๋ทฐ ์ํ์ด์ง router์ ๋ผ์ฐํฐ ํ๋ผ๋ฏธํฐ ์ ์ฉ ๋ฐ ๊ด๋ จ ์ค์ ๋ณ๊ฒฝ - ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์ํด ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง id๋ฅผ sidebar์ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ๋ฉ๋ด link์ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธํ์ด์ง(DetailedReviewPage)์ api ํธ๋ค๋ฌ ์์ * docs: ๋ณ์๋ช ๋ณ๊ฒฝ (isLock -> isPublic) * refactor: ๊นํ ์ ์ฅ์ ๋ก๊ณ ์ฃผ์ ๋ณ์๋ช ๋ณ๊ฒฝ - projectImgSrc -> thumbnailUrl * ci: msw ๊ด๋ จ ํจํค์ง ์ค์น * ci: msw ๊ด๋ จ ์ค์ ํ์ผ ์ถ๊ฐ - ๋ธ๋ผ์ฐ์ ํ๊ฒฝ, node ํ๊ฒฝ์์ msw๋ก ๋ชฉ์๋ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ด๋ จ ํ์ผ ์ถ๊ฐ * feat: mock ํธ๋ค๋ฌ ์ถ๊ฐ ๋ฐ ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง ๋ชฉ ๋ฐ์ดํฐ ์ถ๊ฐ * feat: root์์ ๋ชฉ์๋ฒ ์ฌ์ฉํ ์ ์๋๋กํจ * refactor: endpoint ์์ - env ์์ ์๋ฒ ์ฃผ์ ๋์ ์ฌ๋์ ๋ฃ๋ ๊ฒ์ผ๋ก ํต์ผ * feat: ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง(detailedReviewPage)์ ๋ชฉ์๋ฒ ์ฐ๊ฒฐ ๋ฐ ๊ด๋ จ ์ฝ๋ ์์ - ์ํ๋ช ๋ณ๊ฒฝ: detailReview -> detailedReview - detailedReview ํ์ ์ null ์ถ๊ฐ ๋ฐ ๊ทธ์ ๋ฐ๋ฅธ ์ค๋ฅ ํธ๋ค๋ง ์ถ๊ฐ - deadline์ string ํ์ ์ผ๋ก response๋ก ์ ๋ฌ๋์ด์ new Date๋ก ๊ฐ์ธ์ props๋ก ์ ๋ฌ * docs: indexhtml์ title ๋ณ๊ฒฝ * style: apis/review.ts ์ import ๊ด๋ จ eslint rule ์ ์ฉ์ ๋ฐ๋ฅธ ์์ * fix: ts์์ process ์ฝ์ง ๋ชปํ๋ ์ค๋ฅ ์์ * fix: webpack dev server script ๋ณต์ * feat: ModalPortal ์ ์ฑ * feat: SideModal ์ปดํฌ๋ํธ, useSide ์ ์ฑ ๋ฐ Sidebar์ ์ ์ฉ * feat: ModalBackground ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ ์ฉ * fix: ๋ชจ๋ฌ ์ด๋ฆด ๋ ์คํฌ๋กค๋ฐ ๋ง๋ ๊ธฐ๋ฅ ์ค๋ฅ ์์ * design : ModalPortal ์ฌ์ด์ฆ ๋จ์ ๋ณ๊ฒฝ (% -> vw, vh) * feat: Button ์ปดํฌ๋ํธ๊ฐ button ์์ฑ์ props๋ก ๋ฐ์ ์ ์๋๋ก ์์ * feat: ConfirmModal ์์ฑ * refactor: index.tsx์์ ๋ชจ๋ฌ์ ๊บผ๋ผ ์ ์๋๋ก ๋ฆฌํฉํ ๋ง * refactor: PropsWithChildren ์์ - PropsWithChildren๋ฅผ import ํ์ง ์๊ณ React์์ ๋ฐ๋ก ์ธ ์ ์๋๋ก React.PropsWithChildren๋ก ์์ * [FE] msw๊ด๋ จ env ์ค๋ฅ ํด๊ฒฐ (#114) * chore: fe/feat/105-review-writing-msw ์ endpoint ๊ด๋ จ ๋ณ๊ฒฝ์ฌํญ ๋ฐ์ * fix: NODE_ENV ๊ด๋ จ ์ค๋ฅ ์์ - ์ค๋ฅ : env ํ์ผ์ NODE_ENV๊ฐ ์์์๋ ์ด๋ฅผ ์ธ์ํ๋ ์ค๋ฅ ๋ฐ์ - ์์ธ: ํ๋ ์์ํฌ์์ NODE_ENV๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ๋ ์๋ค๊ณ ํจ - ํด๊ฒฐ: NODE_ENV๋ฅผ ์ญ์ ํ๊ณ MSW๋ฅผ ์ฌ์ฉ * [BE] feat: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ (#109) * refactor: contains ์๋์ ์ํ EqualsAndHashcode ์ถ๊ฐ * fix: lazyInitialization ํด๊ฒฐ * feat: ์ง๋ฌธ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ์๋ต ์์ฑ * refactor: ๋ฆฌ๋ทฐ ํญ๋ชฉ๊ณผ ์ง๋ฌธ์ ์ฐ๊ด๊ด๊ณ ๋ณ๊ฒฝ ๋ฐ ๋ต๋ณ ์ต๋ ๊ธ์์ DB์ ๋ฐ์ * refactor: ๋ฆฌ๋ทฐ์ ๋ฆฌ๋ทฐ๊ทธ๋ฃน ์ด๊ธฐํ ๋ถ๋ถ ์ถ๊ฐ * feat: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ * feat: ๋ฐ์ ๋ฆฌ๋ทฐ๊ฐ ์์ ๋์ ์๋ต ์ถ๊ฐ * refactor: dto ์ค๋ช ์ถ๊ฐ * refactor: dto ์ค๋ช ์์ * refactor: ์ธ์ ํ์ ์์ , ๊ฐํ ์์ * refactor: transactional ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ์กฐํํ ๋Page๊ฐ์ฒด ๋ง๊ณ List๋ก ๋ฐ์์ค๋๋ก ์์ * refactor: ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ง๋๋ ๊ธฐ๋ฅ ๋๋ฉ์ธ ์์ผ๋ก ์ด๋ * test: ํ ์คํธ ์ฝ๋ ๊ฐ์ - ๋ณ์๋ช ์์ , save ์ฌ๋ฌ๊ฐ ๋์ saveAll ์ฌ์ฉ ๋ฑ * refactor: ๋ง์ง๋ง์ผ๋ก ๋ณธ ๋ฆฌ๋ทฐID๊ฐ ์๋ ๋ก์ง์ ๋ํด ์์ - lastViewedReviewId๋ฅผ ์ ๋ ฅํ์ง ์์ผ๋ฉด 999๊ฐ์ด ์ด์ํ๊ฒ ํฐ ์๋ฅผ ๋ฃ์ด์ฃผ๋๊ฒ ์๋๋ผ, ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฃ์ด์ฃผ๋๋ก ์์ * docs: ์ค์จ๊ฑฐ ๋ฐ์ฝ๋ ์ด์ ์ ์ฉ * refactor: lastReviewId๊ฐ null ์ด์ด๋ ๊ฐ์ฅ ์ต์ ๋ฆฌ๋ทฐ๋ฅผ ์ฐพ์ ์ ์๋๋ก ์์ * refactor: eqaulsAndHashCode ์ฌ์ ์ * refactor: eqaulsAndHashCode ์ฌ์ฌ์ ์ * refactor: API Docs ๋ฐ์ --------- Co-authored-by: donghoony <[email protected]> * fix: ์๋ชป ์ ์๋ endpoint ์์ (#118) * [FE] ๋จธ์ง๋ก ์ธํด ์ฌ๋ผ์ง ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ณ๊ฒฝ ์ฌํญ ๋ณต๊ตฌ ๋ฐ ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ (#121) * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ ๋ฐ Keyword ํ์ ๋ณต๊ตฌ * fix: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ path ๋ณต๊ตฌ * fix: ์ฌ์ด๋๋ฐ์ ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๊ฒฝ๋ก ๋ณต๊ตฌ * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํฐ ๋ณ๊ฒฝ * fix: DetailedReviewPage ๋ณต๊ตฌ ๋ฐ ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ * [BE] ๋๋ฏธ ๋ฐ์ดํฐ ์ถ๊ฐ, local ํ๋กํ์ผ ๊ด๋ฆฌ (#123) * refactor: Unauthorized ์์ธ ์ฒ๋ฆฌ * chore: ๋๋ฏธ ๋ฐ์ดํฐ ์ถ๊ฐ ๋ฐ Profile ์ฒ๋ฆฌ * chore: ํ ์คํธ yml ์์ฑ * fix: Long notblank -> notnull (#126) * [FE] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์์ msw๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจํน (#124) * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์์ msw๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจํน Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: ์๋ํฌ์ธํธ baseurl์ '/' ์ถ๊ฐ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: badahertz52 <[email protected]> Co-authored-by: ImxYJL <[email protected]> Co-authored-by: Fe <[email protected]> * fix: ๋ฆฌ๋ทฐ ๋ชฉ๋ก DTO ํ๋ ์์ (#129) * [FE] msw ๋ชจํน์ ์ํ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ ํ๋์ฝ๋ฉ (#130) * refactor: msw ๋ชจํน์ ์ํ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ ํ๋์ฝ๋ฉ Co-Authored-By: ImxYJL <[email protected]> * refactor: 2์ฐจ ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์ํ ๋ฉค๋ฒ ์์ด๋ ์์ํ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: ๋ถํ์ํ ์ฝ์ ๋ก๊ทธ ์ ๊ฑฐ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: ImxYJL <[email protected]> Co-authored-by: badahertz52 <[email protected]> Co-authored-by: Fe <[email protected]> * [FE] endPoint ์ค๋ฅ์ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ด๋ ์์ (#132) * fix: endpoint ์ค๋ฅ ์์ * fix: ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ ๋ฐ์ดํฐ ๋ฐ์ ๋์ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ด๋๋ฅผ 1๋ก ์์ * [BE] fix: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์์ฑ ๊ธฐ๋ฅ ์์ (#134) * fix: src/index.tsx์์ enableMocking ์ ๊ฑฐ (#136) * [FE] Children ์์ฑ์ด ํ์์ธ ํ์ ์ ์ (#147) * feat: children ์์ฑ์ด ํ์์ธ EssentialPropsWithChildren ํ์ ์์ฑ * chore: types ํด๋์ index ํ์ผ์ ๋๋ฝ๋๋ export๋ค ์ถ๊ฐ ๋ฐ ๊ทธ์ ๋ฐ๋ฅธ types import๋ฌธ ๊ฒฝ๋ก ์์ * [FE] ์ฌ์ด๋๋ฐ ๋ฐ ๋ชจ๋ฌ ์ฌ์ฉ์ฑ ๊ฐ์ (#139) * refactor: ์ฌ์ด๋๋ฐ๋ฅผ ๋ซ๋ ์ ๋๋ฉ์ด์ ์ ๊ฑฐ * refactor: ์ฌ์ด๋๋ฐ๊ฐ ๋ ๋นจ๋ฆฌ ์ด๋ฆฌ๋๋ก ์์ * feat: ๋ชจ๋ฌ์ ๋ฐฐ๊ฒฝ ํด๋ฆญ ๋ฐ esc ํค๋ฅผ ๋๋ ์ ๋ ๋ชจ๋ฌ์ด ๋ซํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ * chore: hooks index์ useModalClose ์ถ๊ฐ * feat: ์ฌ์ด๋๋ฐ ๋ฆฌ์คํธ ์์ดํ ์ ํด๋ฆญํ์ ๋ ์ฌ์ด๋๋ฐ๊ฐ ๋ซํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: useModalClose ํ ์ ๋ชจ๋ ๋ชจ๋ฌ์ ๊ณตํต ์ต์์ ์ปดํฌ๋ํธ์ธ ModalBackground์์ ์ฒ๋ฆฌํ๋๋ก ์์ * refactor: ModalBackground๋ฅผ ํด๋ฆญํ์ ๋ ๋ชจ๋ฌ์ด ๋ซํ๊ฒ ํ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ document ๋์ Background์ ์ถ๊ฐ * fix: esc๋ฅผ ์ฌ์ฉํด ๋ชจ๋ฌ์ ๋ซ์์ ๋ ํ๋ฒ๊ฑฐ ๋ฒํผ์ ํฌ์ปค์ค๊ฐ ์๊ธฐ๋ ๋ฌธ์ ํด๊ฒฐ ๋ฐ ๋ณ์๋ช ๋์๋ฌธ์ ์์ * refactor: useEffect ๋ด๋ถ ํจ์๋ค์ ํ ์ธ๋ถ๋ก ์ด๋ ๋ฐ ์ฃผ์ ์ถ๊ฐ * [FE] ์กด์ฌํ์ง ์๋ element์ ๋ํ ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋ ์ ํธ๋ฆฌํฐ ํจ์ ์ ์ (#150) * feat: ์กด์ฌํ์ง ์๋ element์ ๋ํ ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋ ํ ์ ์ * chore: hooks ํด๋ index์ useExistentElement ์ถ๊ฐ * refactor: useExistentElement ํ ์ ๋์ฑ ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์์ * refactor: ์กด์ฌํ์ง ์๋ ์์๋ฅผ ํ๋ณํ๋ ๋์์ ์ปค์คํ ํ ๋์ ์ ํธ๋ฆฌํฐ ํจ์๋ก ์ ์ * chore: ๊ธฐ์กด์ ์กด์ฌํ์ง ์๋ ์์๋ฅผ ํ์งํ๋ ์ปค์คํ ํ ์ญ์ * [FE] HTTP ์์ฒญ ์ค๋ฅ ์ status code๋ณ ์ค๋ฅ ์ํฉ์ ๋์ํ๋ ํจ์ ์์ฑ (#151) * feat: api ์๋ฌ ์ ํ์ํ ๋ฉ์ธ์ง ์์ฑ ํจ์ ์ถ๊ฐ * refactor: api/review.ts์ api ์ค๋ฅ ์ ๋ฉ์ธ์ง๋ฅผ ๋ฐํํ๋ createApiErrorMessage ํจ์ ์ ์ฉ * docs: http ์์ฒญ ์คํจ ๋ฉ์ธ์ง ์์ * fix: ์คํ ์์ * [FE] ํ์ด์ง ์๋จ ์ด๋ ๋ฒํผ ๊ตฌํ (#153) * feat: top button ๋ก์ง ํ ์ผ๋ก ๊ตฌํ * design: top button UI ๊ตฌํ * chore: ๊ฐ ํ์ด์ง๋ง๋ค top button์ด ๋ณด์ฌ์ง๋๋ก ์ค์ * chore: ์ปดํฌ๋ํธ default๋ก exportํ๋๋ก ์ค์ * refactor: handler๋ฅผ useEffect ์ธ๋ถ๋ก ๋ถ๋ฆฌ * chore: svg import ์ปจ๋ฒค์ ์ ๋ง์ถ์ด ์ด๋ฆ ์์ * [FE] feat: ์๋ฌ, ๋ก๋ฉ ํ์ด์ง ๊ตฌํ ๋ฐ ์ ์ฉ (#155) * feat: ๋ฒํผ ์ปดํฌ๋ํธ์ ์์ด์ฝ์ ์ ํ์ ์ผ๋ก ์ถ๊ฐํ ์ ์๋๋ก ๋ณ๊ฒฝ - `icon` prop์ ํตํด ๋ฒํผ์ ์์ด์ฝ์ ์ถ๊ฐํ ์ ์๋๋ก ๋ณ๊ฒฝ * feat: ์๋ฌ ํ์ด์ง๋ฅผ ์ํ ErrorSection ์ปดํฌ๋ํธ ๊ตฌํ - ์๋ฌ ๋ก๊ณ , ๋ฉ์์ง, ์๋ก๊ณ ์นจ ๋ฐ ํ ์ด๋ ๋ฒํผ ์ ๊ณต * feat: ๋ผ์ฐํฐ ์ค์ ์์ `errorElement`์ `ErrorPage` ์ปดํฌ๋ํธ๋ฅผ ์ถ๊ฐ * feat: ๋ฒํผ ํด๋ฆญ ์ ์๋ก๊ณ ์นจ ๋ฐ ํ ์ด๋ ๊ธฐ๋ฅ ์ถ๊ฐ * feat: LoadingBar ์ปดํฌ๋ํธ ๊ตฌํ * feat: ๋ก๋ฉ ํ์ด์ง ์ถ๊ฐ ๋ฐ ์ ์ฉ - ๋ก๋ฉ ๋ฉ์์ง ์ถ๊ฐ - ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง, ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง, ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ๋ก๋ฉ ํ์ด์ง ์ ์ฉ * refactor: buttons ๋ฐฐ์ด์ ํตํด ๋ฒํผ ์์ฑ * refactor: ์ฝ๋์ปจ๋ฒค์ ์ ๋ง๊ฒ ์ฝ๋ ์์ ๋ฐ imageDescription์ ๋ฒํผ props์ ์ถ๊ฐ * refactor: boolean ํ์ ์ถ๋ก ์ ๊ฑฐ * design: ์๋ฌ ์ปดํฌ๋ํธ ํ๋ฉด ๊ฐ์ด๋ฐ ๋ฐฐ์น * design: ๋ก๋ฉ ์ปดํฌ๋ํธ ํ๋ฉด ๊ฐ์ด๋ฐ ๋ฐฐ์น * [BE] refactor: ๋๋ฉ์ธ ์ฐ๊ด ๊ด๊ณ ์ฌ์ ์ (#156) * refactor: ๋๋ฉ์ธ ์ฐ๊ด๊ด๊ณ ์ฌ์ ์ ๋ฐ ์ฌ์ฉํ์ง ์๋ ๋๋ฉ์ธ ์ญ์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * test: ์ฌ์ฉํ์ง ์๋ ํ ์คํธ ์ญ์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * fix: ์์ฝ์ด ์ฌ์ฉํ์ง ์๋๋ก ์์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: Review ๋๋ฉ์ธ์์ reviewee ํ๋ ์ ๊ฑฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์ ์ฅ ๊ธฐ๋ฅ ๊ตฌํ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ํค์๋ ์ ์ฅ ๊ธฐ๋ฅ ๊ตฌํ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์์ฒญ ๊ฐ์ฒด ๊ตฌํ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * test: ๋ฆฌ๋ทฐ, ๋ฆฌ๋ทฐ ๋ด์ฉ ๋๋ฉ์ธ ํ ์คํธ ์ถ๊ฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์ ์ง๋ฌธ ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * fix: Review์ reviewGroupId ์ปฌ๋ผ๋ช ์์ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์, ํค์๋ ๊ฒ์ฆ์ ๊ฐ์ฒด ๋ถ๋ฆฌ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์, ์ง๋ฌธ ๊ฒ์ฆ์ ๊ฐ์ฒด ๋ถ๋ฆฌ * style: ์ฝ๋ ์ฌ์ ๋ ฌ * test: ๋ฆฌ๋ทฐ ์์ฑ ๊ฒ์ฆ ํ ์คํธ ์ถ๊ฐ * refactor: ์ฌ์ฉํ์ง ์๋ ํด๋์ค ์ญ์ * refactor: keyword ๊ด๋ จ ์ฌ์ฉํ์ง ์๋ ํด๋์ค ์ญ์ * refactor: review ๊ด๋ จ ์ฌ์ฉํ์ง ์๋ ํด๋์ค ์ญ์ * refactor: ๋ฐ์ดํฐ ์ด๊ธฐํ ๊ฐ์ฒด ์์ * test: ์ฌ์ฉํ์ง ์๋ ํ ์คํธ ์ญ์ * refactor: ์์ธ ๋ฉ์ธ์ง ๋งํฌ ํต์ผ * refactor: ์ฌ์ฉํ์ง ์๋ ์์ธ ์ ๊ฑฐ * refactor: ์์ธ ํด๋์ค ํจํค์ง ๋ณ๊ฒฝ * refactor: NOT NULL ์ ์ฝ์กฐ๊ฑด ์ถ๊ฐ * refactor: ํ ์คํธ์์๋ง ์ฌ์ฉ๋๋ ํจ์ ์ ๊ฑฐ * refactor: ํ ์คํธ ์คํ ์ ๋ฐ์ํ๋ LazyInitializationException ํด๊ฒฐ * refactor: ํค์๋ ๊ฒ์ฆ ํจ์ ์์ ๋ณ๊ฒฝ * chore: ํ ์คํธ ์ฝ๋ ์ปจ๋ฒค์ ํต์ผ * refactor: reviewRequestCode ๊ฒ์ฆ ๋ก์ง ์ด๋ * refactor: ํ๋์ธ questionRepository๋ฅผ ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ์ด, ํ๋ก์ ํธ ์ด๋ฆ ๊ธธ์ด ๊ฒ์ฆ ํจ์ ๋ถ๋ฆฌ * test: ๋ฆฌ๋ทฐ ์ ์ฅ ์ reviewKeywor ์ ์ฅ ๊ฒ์ฆ ์ถ๊ฐ --------- Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> * [All] infra: ๋์ค์ฝ๋ ์นํ ์ฌ์ฉํด PR ์์ฑ/์ฝ๋ฉํธ ์ ๋ฉ์ (#169) * feat: PR Request ์์ฑ / Comment ์ ๋์ค์ฝ๋ ๋ฉ์ * fix: Case-sensitive ID๋ก ํด๊ฒฐ, ALL webhook ์ถ๊ฐ * fix: remove whitespace * chore: rename workflow * fix: fix shell script * fix: step statement * fix: remove trailing whitespace after equals sign * [BE] feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ฑ API ๊ตฌํ (#163) * feat: ๋๋คํ ๋ฌธ์์ด ์์ฑ๊ธฐ ๊ตฌํ Co-authored-by: donghoony <[email protected]> * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ฑ ์์ฒญ, ์๋ต ํ์ Co-authored-by: donghoony <[email protected]> * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ฑ Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> * feat: ๋ฆฌ๋ทฐ ์์ฑ ์ปจํธ๋กค๋ฌ Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> --------- Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * [BE] refactor: ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ ์ ๋ณด ์์ฒญ ๊ธฐ๋ฅ ๋ฆฌํฉํฐ๋ง (#162) * refactor: ๋ถํ์ํ update ๋ฐฉ์ง * feat: controller์ ๋ฆฌ๋ทฐ ์์ฑ ์์ฒญ์ ๋ํ ์๋ต ๊ธฐ๋ฅ ๊ตฌํ * feat: controller์ ๋ฆฌ๋ทฐ ์์ฑ์ ์ํด ํ์ํ ์ ๋ณด๋ฅผ ์๋ต ๊ธฐ๋ฅ ๊ตฌํ * feat: service์ ๋ฆฌ๋ทฐ ์์ฑ์ ์ํด ํ์ํ ์ ๋ณด ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ * chore: ์ฌ์ฉํ์ง ์๋ dto ์ญ์ * test: ๋ฆฌ๋ทฐ ๋ฆฌ๋ทฐ ์์ฑ์ ์ํด ํ์ํ ์ ๋ณด ์กฐํ ๊ธฐ๋ฅ ํ ์คํธ ์์ฑ * refactor: swagger ์ค์ ์ผ๋ถ ์์ ๋ฐ ์๋ฌ ์๋ต์ฝ๋ ๋ ธ์ถ๋๋๋ก ๋ณ๊ฒฝ * refactor: service์์ ์์ํ์ long์ ๋ฐํํ๋๋ก ๋ณ๊ฒฝ * docs: api ๋ฌธ์ dto ํญ๋ชฉ์ค๋ช ๋ณ๊ฒฝ * test: ์ฌ์ฉํ์ง ์๋ ๋ณ์ ์ ์ธํ์ง ์๋๋ก ๋ณ๊ฒฝ * docs: api ๋ฌธ์ ๊ฒ์ฆ ๋ด์ฉ์ ๋ํ ์ด์ฒด ๋ณ๊ฒฝ * refactor: ํธ๋์ญ์ ์กฐํ ๋ช ์ ์ถ๊ฐ * refactor: dto ์ด๋ฆ ๋ณ๊ฒฝ * [FE] ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ react-query ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง (#161) * fix: src/index.tsx์์ enableMocking ์ ๊ฑฐ * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ฑ ์ ์ฝ๋ฉํธ ์ปดํฌ๋ํธ๋ช ๋ณ๊ฒฝ ๋ฐ ๊ธฐ๋ณธ๊ฐ ์ค์ - ์ปดํฌ๋ํธ๋ช ๋ณ๊ฒฝ: RevewComment -> ReveweeComments - reviewGroup์ description์ด ๋น๋ฌธ์์ด์ด๋ฉด ๊ธฐ๋ณธ๊ฐ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝ * refactor: ์๋ฒ DB์ ์๋ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์์ํ - ํ์ฌ DB์ ์๋ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ฅผ ๋ชฉ ์๋ฒ์์๋ ์ฌ์ฉํ๊ณ , ์ฌ์ด๋๋ฐ ํ์ด์ง ์ด๋ ์์๋ ํ์ฉํ ์ ์๋๋ก ๊ด๋ จ value๋ค์ ์์ํ ํจ * feat : QueryClient, QueryClientProvider ์ ์ฉ - src/index.tsx์ QueryClient, QueryClientProvider ์ ์ฉ * fix: dependencies์ ์๋ ํ ์คํธ ํจํค์ง๋ค์ devDependencies๋ก ์ฎ๊น * feat: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ react-query ์ ์ฉ * feat : msw์ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง 404 ์ค๋ฅ ์ถ๊ฐ * ci: react-error-boundary ์ค์น * feat: Outlet์ QueryErrorResetBoundary,ErrorBoundary, Suspense ์ ์ฉ * feat: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ useSuspenseQuery ์ ์ฉ * refactor: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง resource, queryString key ์์ํ * refactor: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง react-query key ์์ํ * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ์ปดํฌ๋ํธ ์์์๋ง ์ฌ์ฉํ๋ ์์๋ค ์์ํ * refactor: DetailedReviewPage/components์ index.tsx๋ฅผ ์ถ๊ฐํด import ๊ฒฝ๋ก ๊ฐ๊ฒฐํ๊ฒ ์์ * feat: error ์ ํ๋ฅผ ์ํ QueryClient ์ต์ ์ถ๊ฐ - react-query์ query, mutation์์ error๊ฐ ์ ํ๋๋๋ก QueryClient ์ต์ ์ค์ * fix: ErrorPage์ SideModal์ closeModal props๋ก ์ค * refactor: ErrorSection ์์น ๋ณ๊ฒฝ(src/pages/ErrorPage -> src/components/error) * feat: ErrorFallback ์ปดํฌ๋ํธ ์์ฑ * feat: ErrorSuspenseContainer ์์ฑ ๋ฐ App.tsx์ ์ ์ฉ * chore: constants/index.ts export ๊ฒฝ๋ก ๋ณ๊ฒฝ - ์ค๋ณต๋๋ apiErrorMessage ์ญ์ - queryKeys ์ถ๊ฐ * chore: 3์ฐจ-1์ฃผ์ฐจ ํต์ฌ ๊ธฐ๋ฅ ์ํ ๋ ํ์ ์๋ ์ฝ๋ ์ฃผ์ ์ฒ๋ฆฌ * docs: ErrorPage์ ERROR_MESSAGE ์์ * design: formWidth ๋ณ๊ฒฝ ๋ฐ fontSize์ 1.4rem ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ ์ถ๊ฐ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ชฉ๋ฐ์ดํฐ, ๋ฐ์ดํฐ ํ์ ์ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ ์ถ๊ฐ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ์ปดํฌ๋ํธ์ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ ์ถ๊ฐ ๋ฐ ๊ด๋ จ ์คํ์ผ ์ถ๊ฐ * refactor: ๋ถํ์ํ export ์ญ์ * chore: type๋ช ์์ (RevieweeCommentProps =>RevieweeCommentsProps) * refactor: ErrorSection์ผl Button ์์ * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ * refactor: ErrorSuspenseContainer ์ ์ฉ ์์น ๋ณ๊ฒฝ - App๊ฐ ์๋ router์ element์์ ์ ์ฉํ๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ฐ์ดํฐ ํ์ ๊ฐ์ ๋ฐฉ๋ฒ ๋ณ๊ฒฝ * chore: ๋ถํ์ํ ์ฃผ์ ์ญ์ * refactor: ErrorSection์ buttons ๋ค์ด๋ฐ ๋ณ๊ฒฝ ๋ฐ ์์์ key ์ถ๊ฐ - buttons -> buttonList * chore: ์คํ์ผ ์ฃผ์์ NOTE ์ถ๊ฐ * [BE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํ (#179) * feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ Co-authored-by: nayonsoso <[email protected]> * feat: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์๋ต ์์ฑ Co-authored-by: donghoony <[email protected]> * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํ Co-authored-by: nayonsoso <[email protected]> * refactor: Cascade ์ ์ฉ์ผ๋ก ๋ถํ์ํ save ์ ๊ฑฐ Co-authored-by: nayonsoso <[email protected]> * refactor: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์์ฑ ๊ฐ์ฒด ๋์ถ Co-authored-by: nayonsoso <[email protected]> --------- Co-authored-by: nayonsoso <[email protected]> * fix: ๋ธ๋ผ์ฐ์ ํ์ดํ ์คํ ์์ (#167) * [BE] feat: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ (#182) * feat: ์ปจํธ๋กค๋ฌ ๋ฆฌ๋ทฐ ์์ธ ์กฐํ api ์๋ต ๊ธฐ๋ฅ ๊ตฌํ * feat: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ api ์๋ต ๊ฐ์ฒด ๊ตฌํ * refactor: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ api ์๋ต ๊ฐ์ฒด๋ช ๋ณ๊ฒฝ * feat: ์๋น์ค ๋ฆฌ๋ทฐ ์์ธ ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ * test: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ ๊ธฐ๋ฅ ํ ์คํธ ์ถ๊ฐ * style: ์คํ ๋ฐ ๊ฐํ ์์ * refactor: ๋ ์ง ์๋ต ์, ์ผ์๊น์ง๋ง ์๋ตํ๋๋ก ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ์กฐํ ๊ถํ ๊ฒ์ฆ ๋ก์ง์ repository ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝ * refactor: ๊ฒ์ฆ๋ฉ์ธ์ง ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ์๋น์ค์์ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ์ ๋ํ ์์ธ ํด๋์ค ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ ๋ฉ์๋๋ช ๋ณ๊ฒฝ * refactor: ํค๋๋ช ์์ํ * [FE] recoil์ ํตํ groupAccessCode ์ ์ญ ์ํ ๊ด๋ฆฌ (#180) * ci: recoil ์ค์น * feat: src/index.ts์ RecoilRoot ์ ์ฉ * feat: groupAccessCode ์ ๋ํ atom ์ํ ์ถ๊ฐ * feat: useGroupAccessCode ํ ์ถ๊ฐ - useGroupAccessCode : groupAccessCode์ atom ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ํ * [BE] ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ์ต์ ์์ผ๋ก ์กฐํํ๋ค. (#189) * fix: ๋ ์ง ์ ์ ๋ ฌ * refactor: ์ฌ์ฉํ์ง ์๋ ๋ณ์ ์ ๊ฑฐ --------- Co-authored-by: donghoony <[email protected]> * [BE] ์ด๊ธฐ ๋ฐ์ดํฐ ์ค์ (#187) * feat: ์ด๊ธฐ ๋ฐ์ดํฐ ์ค์ * build: CD ์ local profile ์ค์ --------- Co-authored-by: donghoony <[email protected]> * [FE] feat: Alert Modal๊ณผ Error Alert Modal ์ปดํฌ๋ํธ ๊ตฌํ ๋ฐ Button ์ปดํฌ๋ํธ ํ์ฅ (#165) * refactor: ๊ณตํต ๋ฒํผ ์ปดํฌ๋ํธ๊ฐ children๊ณผ style์ ๋ฐ๋๋ก ์์ * chore: error alert modal์์ ์ฌ์ฉํ primary ์์์ ๊ฒฝ๊ณ ์ผ๊ฐํ ์ถ๊ฐ * feat: ErrorAlertModal ์ปดํฌ๋ํธ ๊ตฌํ * feat: AlertModal ์ปดํฌ๋ํธ ๊ตฌํ * chore: ๋ณ๊ฒฝ๋ Button ์ปดํฌ๋ํธ์ ๊ตฌ์กฐ์ ๋ง๊ฒ ์ฝ๋ ์์ * fix: AlertModal์ด Esc ๋๋ background์ ํด๋ฆญ์ผ๋ก ๋ซํ์ง ์๋๋ก ์์ * chore: AlertModal๊ณผ ErrorAlertModal export * refactor: Button ์ปดํฌ๋ํธ๊ฐ type์ ๋ณ๋๋ก ๋ฐ๋๋ก ์์ ๋ฐ ๊ธฐ์กด์ buttonType์ styleType์ผ๋ก ๋ณ๊ฒฝ * refactor: background ํด๋ฆญ ๋๋ Esc ํค๋ฅผ ํตํด ๋ชจ๋ฌ์ ๋ซ๋ ๊ฒ์ ๋ถ๋ฆฌ * refactor: AlertModal์ ๋ชจ๋ฌ ๋ซ๋ ์ ์ฑ ์ props๋ก ์ ํ ๊ฐ๋ฅํ๋๋ก ์์ * refactor: ErrorAlertModal์ AlertModal์ ์ฌ์ฉํด ๊ตฌํ * refactor: ๋ซ๊ธฐ ๋ฒํผ ์ด์ธ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋ฌ์ ๋ซ์ ์ ์๋์ง ์ฌ๋ถ์ handler๋ฅผ props๋ก ์ ๋ฌ๋ฐ๋๋ก ๋ณ๊ฒฝ * refactor: ๋น์ด์๋ ์คํ์ผ ์ปดํฌ๋ํธ ์ ๊ฑฐ * [FE] ๋๋ฉ ํ์ด์ง ํผ๋ธ๋ฆฌ์ฑ ๋ฐ ๋๋ฐ์ด์ฑ ํจ์ ์ถ๊ฐ (#181) * feat: Input ๊ณตํต ์ปดํฌ๋ํธ ์ ์ * feat: LandingPage ์ ์ * fix: Input์ type์ text๋ก ์์ * feat: debounce ํจ์ ์์ฑ * docs: debounce ํจ์์ TODO ์ฃผ์ ๋ฐ TSdoc ์ถ๊ฐ ์ธ ๊ฐ๋จํ if๋ฌธ ๋ฆฌํฉํ ๋ง * chore: ์๋ชป๋ ํ์ผ ๊ตฌ์กฐ ๋ฐ ๋๋ ํ ๋ฆฌ๋ช ์์ * chore: px์ rem์ผ๋ก ์์ * refactor: ๋์ ์คํ์ผ๋ง์ css ๋์ styled ์คํ์ผ ์ ์ฉ * refactor: Input ์คํ์ผ์ ๋์ฑ ์ ์ฐํ๊ฒ ๋ฐ์ ์ ์๋๋ก ์์ , ์คํ์ผ ๋ฆฌํฐ๋ด ์ ๊ฑฐ * refactor: Input์ ์ ์ฉ๋ ์ปค์คํ ์คํ์ผ๋ง์ $style๋ก ์์ * fix: undefined ๋ฆฌํด์ null ๋ฆฌํด์ผ๋ก ์์ * refactor: flex-direction์ ๋ณ๋์ ์ปค์คํ ํ์ ์ ์ฌ์ฉํ๋ ๋์ React ๋ด์ฅ ํ์ ์์ฌ์ฉํ๋๋ก ์์ * refactor: Input ์ปดํฌ๋ํธ์์ rest props ์ ๊ฑฐ * chore: ๋ถํ์ํ import ์ ๊ฑฐ * [FE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ ๋ณ๊ฒฝ๋ API ์ฐ๋ ํ, ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ์ ์ฉ ๋ฐ ๋ฌดํ ์คํฌ๋กค ๊ตฌํ (#192) * design: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋ ๋ฐฐ๊ฒฝ์ ๋ณ๊ฒฝ ๋ฐ ์ ์ฒด ๊ฐ์ธ๋ div์ ์๋์ชฝ ์ฌ๋ฐฑ ์ถ๊ฐ * refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์ธํฐํ์ด์ค ์ถ๊ฐ ๋ฐ ์์ - ReviewPreviewList ์ธํฐํ์ด์ค ์ถ๊ฐ - size, lastReviewId, reviews ํ๋ ์ถ๊ฐ - ReviewPreview ์ธํฐํ์ด์ค ์์ - keywords ํ๋๋ฅผ Keyword[] ํ์ ์ผ๋ก ๋ณ๊ฒฝ * chore: ๋ซํ ์๋ฌผ์ ๋ก ์์ด์ฝ ๋ณ๊ฒฝ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ์ ์ฉ * refactor: ์น ์ ๊ทผ์ฑ์ ์ํ alt, aria-label ์ถ๊ฐ ๋ฐ ์ฝ๋ ์ปจ๋ฒค์ ์ ๋ง์ถฐ ์ฝ๋ ์์ * feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฆฌ์คํธ ํธ๋ค๋ฌ์ ํ์ด์ง๋ค์ด์ ๋ก์ง ์ถ๊ฐ - ๊ธฐ์กด์ ๋จ์ ๋ฐํ ํธ๋ค๋ฌ์์ ํ์ด์ง๋ค์ด์ ๊ธฐ๋ฅ์ ํฌํจํ ํธ๋ค๋ฌ๋ก ์์ * feat: `SideModal` ์ปดํฌ๋ํธ์ `closeModal` prop ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ ๋ฌดํ ์คํฌ๋กค ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: useReviewPreviewList ํ ์์ฑํ์ฌ ๋ฐ์ดํฐ ํธ์ถ ๋ก์ง ๋ถ๋ฆฌ * refactor: ๋ถํ์ํ ButtonContainer ์ ๊ฑฐ * design: px์ rem์ผ๋ก ๋ณ๊ฒฝ * refactor: Button ์ปดํฌ๋ํธ์ key ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ์ด, ํ๋ก์ ํธ๋ช ์ ๋ณด์ฌ์ฃผ๋ DescriptionSection ์ปดํฌ๋ํธ ๊ตฌํ * refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ๋ถ๋ฌ์ค๋ api ๋ณ๊ฒฝ ์ด์๋ก ์ธํด ์๋ํฌ์ธํธ, fetch ํจ์ ์์ * chore: fragment ์ ๊ฑฐ * refactor: api ๋ณ๊ฒฝ์ ๋ฐ๋ผ ReviewPreviewList, ReviewPreview ์ธํฐํ์ด์ค ์์ * refactor: ๋ณ๊ฒฝ๋ api์ ๋ฐ๋ผ props ์์ * refactor: reviewerGroup, isPublic ์ ๊ฑฐ * refactor: endPoint.gettingReviewList ํธ์ถ ์ธ์ ๋ณ๊ฒฝ * refactor: DescriptionSection์์ ReviewInfoSection์ผ๋ก ์ปดํฌ๋ํธ๋ช ๋ณ๊ฒฝ * refactor: useSuspenseQuery ์ ์ฉ ํ, ๋ฌดํ์คํฌ๋กค ๊ด๋ จ ์ฝ๋ ์ฃผ์ ์ฒ๋ฆฌ --------- Co-authored-by: badahertz52 <[email protected]> * [FE] feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ์๋ฒ ๋ฐ ๋ชจ๋ฌ ์ฐ๋ (#191) * chore: ๋ณ๊ฒฝ๋ UI ์ ์ฉ * design: ํค์๋ ๋ฌธํญ ์๋ด ๋ฌธ๊ตฌ ์์ * feat: Textarea ๊ณตํต ์ปดํฌ๋ํธ ๋ผ๋ ๊ตฌํ * chore: ์์ ๋ api ์๋ํฌ์ธํธ ๋ฐ queryparams ์ ์ฉ * design: reset.ts ์ถ๊ฐ ์ค์ * chore: ๋ณ๊ฒฝ๋ api ๋ฌธ์์ ๋ง๊ฒ ํ์ ์์ * feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ๋ชจ๋ฌ ๋ฐ ์๋ฒ ์ฐ๋ * chore: ์ฌ์ด๋๋ฐ ๋ฉ๋ด ํด๋ฆญ ์ ์ด๋ํ path ์์ * fix: ConfirmModal์์ background ํด๋ฆญ ์ ๋ชจ๋ฌ์ด ๋ซํ์ง ์๋ ํ์ ์์ * design: AlertModal ๋ฐ ErrorAlertModal ๋์์ธ ์์ * chore: ๋ฆฌ๋ทฐ ์์ฑ ๋ฐ ์์ฑ ์๋ฃ ํ์ด์ง ๋ผ์ฐํฐ ์ถ๊ฐ * chore: ๋ถํ์ํ ์ฃผ์ ์ ๊ฑฐ ๋ฐ ์ฌ์ด๋๋ฐ์์ ๋ฆฌ๋ทฐ ์์ฑ ๋ฉ๋ด ์จ๊น ์ฒ๋ฆฌ * chore: ๋ฆฌ๋ทฐ ์ ์ถ ํ์ด์ง ๋ฒํผ ํ์ ๋ช ์ * chore: svg import ์ปจ๋ฒค์ ์ ๋ง๊ฒ ์์ * [FE] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง, ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์์ ๋ก๊ทธ์ธ์ ์ฐ๋ (#193) * design: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋ ๋ฐฐ๊ฒฝ์ ๋ณ๊ฒฝ ๋ฐ ์ ์ฒด ๊ฐ์ธ๋ div์ ์๋์ชฝ ์ฌ๋ฐฑ ์ถ๊ฐ * refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์ธํฐํ์ด์ค ์ถ๊ฐ ๋ฐ ์์ - ReviewPreviewList ์ธํฐํ์ด์ค ์ถ๊ฐ - size, lastReviewId, reviews ํ๋ ์ถ๊ฐ - ReviewPreview ์ธํฐํ์ด์ค ์์ - keywords ํ๋๋ฅผ Keyword[] ํ์ ์ผ๋ก ๋ณ๊ฒฝ * chore: ๋ซํ ์๋ฌผ์ ๋ก ์์ด์ฝ ๋ณ๊ฒฝ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ์ ์ฉ * refactor: ์น ์ ๊ทผ์ฑ์ ์ํ alt, aria-label ์ถ๊ฐ ๋ฐ ์ฝ๋ ์ปจ๋ฒค์ ์ ๋ง์ถฐ ์ฝ๋ ์์ * feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฆฌ์คํธ ํธ๋ค๋ฌ์ ํ์ด์ง๋ค์ด์ ๋ก์ง ์ถ๊ฐ - ๊ธฐ์กด์ ๋จ์ ๋ฐํ ํธ๋ค๋ฌ์์ ํ์ด์ง๋ค์ด์ ๊ธฐ๋ฅ์ ํฌํจํ ํธ๋ค๋ฌ๋ก ์์ * feat: `SideModal` ์ปดํฌ๋ํธ์ `closeModal` prop ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ ๋ฌดํ ์คํฌ๋กค ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: useReviewPreviewList ํ ์์ฑํ์ฌ ๋ฐ์ดํฐ ํธ์ถ ๋ก์ง ๋ถ๋ฆฌ * refactor: ๋ถํ์ํ ButtonContainer ์ ๊ฑฐ * design: px์ rem์ผ๋ก ๋ณ๊ฒฝ * refactor: Button ์ปดํฌ๋ํธ์ key ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก,๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง api ํธ๋ค๋ฌ์์ groupAccessCode๋ฅผ header์ ์ถ๊ฐ * feat: DetailedReviewPage ์์ groupAccessCode ์ํ ์ ์ฉ * feat: LoginRedirectModal ์์ฑ * refactor: ErrorSection ๋ฆฌํฉํ ๋ง * feat: ๋ฆฌ๋ทฐ์ด, ํ๋ก์ ํธ๋ช ์ ๋ณด์ฌ์ฃผ๋ DescriptionSection ์ปดํฌ๋ํธ ๊ตฌํ * refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ๋ถ๋ฌ์ค๋ api ๋ณ๊ฒฝ ์ด์๋ก ์ธํด ์๋ํฌ์ธํธ, fetch ํจ์ ์์ * feat: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ groupAccessCode ์ํ๋ฅผ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ groupAccessCode ์ํ๊ฐ์ด ์์ผ๋ฉด api์์ฒญ์ ํ๊ณ ์์ผ๋ฉด LoginRedirectModal์ ๋์ด์ ๋ก๊ทธ์ธ ์ ๋ํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ - DetailedPage/index.tsx์ ์๋ ๋ด์ฉ์ DetailedReivewPageContents๋ก ์ด๋ - DetailedPage/index.tsx์์ ErrorSuspenseContainer ์คํํ๋ ๊ฒ์ผ๋ก ์์ * chore: fragment ์ ๊ฑฐ * refactor: api ๋ณ๊ฒฝ์ ๋ฐ๋ผ ReviewPreviewList, ReviewPreview ์ธํฐํ์ด์ค ์์ * fix: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง keyword ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ * refactor: ๋ณ๊ฒฝ๋ api์ ๋ฐ๋ผ props ์์ * refactor: reviewerGroup, isPublic ์ ๊ฑฐ * feat: ErrorFallback ์ ํ ์ด๋ ๊ฒฝ๋ก ๋ณ๊ฒฝ * refactor: endPoint.gettingReviewList ํธ์ถ ์ธ์ ๋ณ๊ฒฝ * refactor: DetailedReviewPage์์ groupAccessCode ๊ฐ์ ธ์ค๋ ๋ฐฉ์ ๋ณ๊ฒฝ - useRecoilValue๊ฐ ์๋ useGroupAccessCode์์ ๊ฐ์ ธ์ค๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝ * refactor: DescriptionSection์์ ReviewInfoSection์ผ๋ก ์ปดํฌ๋ํธ๋ช ๋ณ๊ฒฝ * refactor: ErrorPage์์ Home ์ด๋ ๋ฒํผ์ ์ ๋ํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ - route์ค๋ฅ ๋ฉ์ธ์ง์ api์ค๋ฅ ๋ฉ์ธ์ง๋ฅผ errorMessage ํ์ผ์์ ๊ด๋ฆฌํ๋๋ก ์์ - ErrorPage์์ errorMessage๊ฐ ROUTE_ERROR_MESSAGE์ด๋ฉด ํ ๋ฒํผ์ด ํ๋ฉด์์์ ๋จผ์ ๋์ค๋๋ก ์์ - ์์๋ณ ํ,refresh ์์ด์ฝ SVG ์ถ๊ฐ * refactor: useSuspenseQuery ์ ์ฉ ํ, ๋ฌดํ์คํฌ๋กค ๊ด๋ จ ์ฝ๋ ์ฃผ์ ์ฒ๋ฆฌ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง ๋ชฉ ์๋ฒ ํธ๋ค๋ฌ ๋ฐ ๋ชฉ๋ฐ์ดํฐ ์์ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ groupAccessCode ์ ์ญ ์ํ ์ ์ฉ * refactor: ๋ถํ์ํ ์ฝ๋ ์ญ์ * chore: ์คํ ์์ --------- Co-authored-by: soosoo22 <[email protected]> * [FE] feat: ๋๋ฉ ํ์ด์ง API ์ฐ๋ (#196) * feat: ๊ทธ๋ฃน ์์ฑ์ ์ํ ์๋ํฌ์ธํธ ์์ฑ ๋ฐ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์๋ํฌ์ธํธ, api ํธ์ถ ํจ์ ์์ * fix: CSSProperties ๋์ ์ปค์คํ ํ์ ์ ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค ์์ * feat: ReviewAccessForm์ ๋ชจ๋ฌ ๋ฐ API ์ฐ๊ฒฐ * fix: ๋๋ฝ๋๋ CopyIcon ํ์ผ ์ ๋ก๋ * feat: ํ์ธ ์ฝ๋ ์ ๋ ฅ API ์ฐ๋ * feat: ์์ ํ ๋ฆฌ๋ทฐ ์์ฑ URL์ ๋ฆฌํดํ๋ ํจ์ ์์ฑ * [FE] fix: ๋๋ฝ๋๋ ๋ฒํผ ๋ฆฌํฉํ ๋ง ๋ฐ ์๋ํฌ์ธํธ ๋ณต๊ตฌ (#199) * fix: ์ถฉ๋ ํด๊ฒฐ ๊ณผ์ ์์ ๋๋ฝ๋๋ ์๋ํฌ์ธํธ ๋ณต๊ตฌ * fix: ๋ฒํผ ๋ฆฌํฉํ ๋ง ๋ฐ์ * feat: textarea์ ์ต์ ์ ๋ ฅ ๊ธ์ ์๋ฅผ ๋ง์กฑํ์ง ๋ชปํ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง ํ์ ๊ธฐ๋ฅ ๊ตฌํ (#200) * feat: ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ํ์ด์ง์์ ํ ๋ฒํผ ์ถ๊ฐ (#201) * docs: ๋ฆฌ๋ทฐ๋ฏธ ์๊ฐ๊ธ ์์ฑ (#203) * [BE] refactor: ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋ ์ ๊ฑฐ, ์ปจ๋ฒค์ ๋ฐ ์์ ๋ฆฌํฉํ ๋ง (#206) * refactor: date๋ฅผ review๊ฐ ์ ๊ณตํ๋๋ก ์์ * style: ์ปจ๋ฒค์ ์ ์ฉ * refactor: ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋ ์ ๊ฑฐ * refactor: ๋ฉ์๋๋ช ํต์ผ * style: ๋ถํ์ํ ๊ฐํ ์ ๊ฑฐ * [FE] jest ์ฌ์ฉ ์ nodeํ๊ฒฝ ์ msw ํธํ์ฑ ๋ฌธ์ ์ ํ๊ฒฝ ๋ณ์ ์ค๋ฅ ํด๊ฒฐ (#215) * ci: dependencies์์ jest ์ญ์ ๋ฐ ts-jest ์ค์น * ci: jest์์ ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉํ ์ ์๋๋ก jest.config.js ์ถ๊ฐ * chore: eslint์ ์ฉ ์ ์ธ ํ์ผ์ jest.config.js, tsconfig.json ์ถ๊ฐ * ci: jest์ testEnvioronment๋ฅผ jsdom์ผ๋ก ์ค์ * fix: jest์์ msw ver2๋ฅผ ๋ชฉ์๋ฒ๋ก ์ฌ์ฉ ์ ์๊ธฐ๋ ์ค๋ฅ ์์ 1. msw/node ๋ฅผ ์ฝ์ง ๋ชปํจ - jest.config.js์ testEnvironment ๋น๋ฌธ์์ด 2. ReferentError: TextEnCoder is not defined - ํด๊ฒฐ : jest.polyfills.js ์ถ๊ฐ ๋ฐ undici ์ค์น 3. ReferenceError: ReadableStream is not defined - ํด๊ฒฐ : undici ๋ค์ด ๊ทธ๋ ์ด๋ undici": "^6.19.5", -> "^5.0.0" * ci : jest์์ env ํ์ผ ์ฝ์ ์ ์๋๋ก dotenv ์ค์น ๋ฐ jest์ ์ ์ฉ * [FE] ๊ฐ๋ฐํ๊ฒฝ๊ณผ ๋น๋ํ๊ฒฝ์ ๋ฐ๋ผ msw ์คํ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋๋ก msw ์คํ ์กฐ๊ฑด๋ฌธ ๊ฐ์ (#221) * ci: ๋น๋ ํ์ผ์ ์คํํ ์ ์๋ http-server ํจํค์ง ์ค์น ๋ฐ ์คํ ๋ช ๋ น์ด ์ถ๊ฐ * fix:๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ๋น๋/๋ฐฐํฌ ํ๊ฒฝ์ ๊ตฌ๋ถํด ๋ชฉ ์๋ฒ๋ฅผ ์คํํ๋๋ก ์กฐ๊ฑด๋ฌธ ๊ฐ์ * fix: ๋จธ์ง ์ถฉ๋ ์ yarn.lock ์ญ์ ํ ๊ฑฐ ๋ณต๊ตฌ * [FE] ๋ฆฌ๋ทฐ ์์ธํ์ด์ง query ํ ๋ถ๋ฆฌ ๋ฐ HTTP ์์ฒญ ํ ์คํธ ์งํ (#216) * refactor: DetailedPage/index.tsx ๋ฆฌํฉํ ๋ง - early return๋ฅผ ์ฌ์ฉํด ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ * feat: useGetDetailedReview ํ ์์ฑ ๋ฐ DetailedReviewPageContents์ ์ ์ฉ * feat: useSearchParamAndQuery ํ ์์ฑ ๋ฐ DetailedPageContent์ ์ ์ฉ * refactor: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์์ id๋ผ๊ณ ์ฌ์ฉํ๋ key๊ฐ, params์ key๋ฅผ reviewId๋ก ๋ณ๊ฒฝ - DetailedReview์ router param์ id์์ reviewId๋ก ๋ณ๊ฒฝ * ci: dependencies์์ jest ์ญ์ ๋ฐ ts-jest ์ค์น * ci: jest์์ ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉํ ์ ์๋๋ก jest.config.js ์ถ๊ฐ * chore: eslint์ ์ฉ ์ ์ธ ํ์ผ์ jest.config.js, tsconfig.json ์ถ๊ฐ * ci: jest์ testEnvioronment๋ฅผ jsdom์ผ๋ก ์ค์ * refactor: useGetDetailedReview์์ query ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ ๋ฐํํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * fix: jest์์ msw ver2๋ฅผ ๋ชฉ์๋ฒ๋ก ์ฌ์ฉ ์ ์๊ธฐ๋ ์ค๋ฅ ์์ 1. msw/node ๋ฅผ ์ฝ์ง ๋ชปํจ - jest.config.js์ testEnvironment ๋น๋ฌธ์์ด 2. ReferentError: TextEnCoder is not defined - ํด๊ฒฐ : jest.polyfills.js ์ถ๊ฐ ๋ฐ undici ์ค์น 3. ReferenceError: ReadableStream is not defined - ํด๊ฒฐ : undici ๋ค์ด ๊ทธ๋ ์ด๋ undici": "^6.19.5", -> "^5.0.0" * ci : jest์์ env ํ์ผ ์ฝ์ ์ ์๋๋ก dotenv ์ค์น ๋ฐ jest์ ์ ์ฉ * fix: mock ํธ๋ค๋ฌ์ธ getDetailedReview ์์ ์ค๋ณต๋ ์ฟผ๋ฆฌ ๋งค๊ฐ ๋ณ์ ์ฌ์ฉ ์์ - ์ค๋ฅ ์ํฉ: jest์์ msw ์ฌ์ฉ ์, get์ url์ ํ๋ผ๋ฏธํฐ ์ฌ์ฉ ์ ์ค๋ณต๋ ์ฟผ๋ฆฌ ๋งค๊ฐ ๋ณ์ ์ค๋ฅ๊ฐ ๋จ - ์ค๋ฅ ๋ฉ์ธ์ง ::Found a redundant usage of query parameters in the request handler - ํด๊ฒฐ: ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ ํ์ด์ง์ reviews๊น์ง์ url ์์๋ฅผ ๋ง๋ค๊ณ , get์์๋ ์ด ์์๋ฅผ ํ์ฉํ ์ ๊ทํํ์์ผ๋ก ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ ํ์ด์ง๋ก ์ค๋ ๋ชจ๋ ์์ฒญ์ ๊ฐ๋ก์ฑ ์ ์๋๋ก ํจ * refactor: getWrongDetailedReview ๋ชฉ์๋ฒ ํธ๋ค๋ฌ ๋ฐ ๊ด๋ จ ์์ ์ญ์ - getDetailedReview์์ request๋ฅผ ๋ถ์ํด http์ค๋ฅ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํจ * feat: queryClientWrapper ์์ฑ - queryClientWrapper : msw๋ฅผ ์ฌ์ฉํ jest ํ ์คํธ์ queryWrapper๋ก ์ฌ์ฉ * test:๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง api ์์ฒญ ์ฑ๊ณต์ ๋ํ ํ ์คํธ ์ถ๊ฐ * fix: groupAccessCodeAtom์ ๊ธฐ๋ณธ๊ฐ ์๋๋๋ก ๋ณต๊ตฌ * chore:queryClientWrapper ๋ค์ด๋ฐ ํ๊ธฐ๋ฒ์ ํ์ค์นผ ์ผ์ด์ค๋ก ๋ณ๊ฒฝ * fix: ๋จธ์ง ์ถฉ๋ ๋ฐฉ์ง๋ฅผ ์ํด yarn.lock ์ญ์ * fix: ๋จธ์ง ์ yarn.lock ์ถฉ๋ ํด๊ฒฐ * [FE] test: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ API ์ฐ๋ ํ ์คํธ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง (#217) * chore: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง ๊ด๋ จ ์ปดํฌ๋ํธ ๋ฐ ์ธํฐํ์ด์ค, ํ์ผ ์ด๋ฆ ๋ณ๊ฒฝ * refactor: api ์๋ํฌ์ธํธ ์์ ์ ์ฉ * refactor: useGetReviewList ํ ์ผ๋ก ๋ถ๋ฆฌ * test: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง api ์ฐ๋ ํ ์คํธ ์ถ๊ฐ * chore: msw ๋ชจํน ์ฝ๋ ์ ๊ฑฐ * chore: ๊ฒฝ๋ก index ์ ๊ฑฐ * fix: ์ค๋ณต๋ import ๋ฐ ๋ถํ์ํ ํธ๋ค๋ฌ ์ ๊ฑฐ * chore: ์๋ํฌ์ธํธ ์์ ์ ๊ฑฐ * [FE] refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ๋ฆฌํฉํ ๋ง (#219) * refactor: ๊ฐ ๋ชจ๋ฌ๋ณ๋ก ์ํ์ ๋์์ ๊ด๋ฆฌํ๋ ํ ๋ถ๋ฆฌ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํผ์ ๋ก์ง์ ํ ์ผ๋ก ๋ถ๋ฆฌ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ๋ถ๋ฆฌํ ํ ์ ์ฉ * refactor: URL์์ reviewRequestCode๋ฅผ ์ถ์ถํ๋ ๋ก์ง์ ํ ์ผ๋ก ๋ถ๋ฆฌ * chore: ๋ถํ์ํ ํ ์คํธ์ฉ ์ฝ๋ ์ ๊ฑฐ * chore: ErrorModal์ ๋ซ์ ๋ errorMessage ์ํ๋ ์ด๊ธฐ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋๋ก ์์ * [BE] feat: ํค๋ ์กด์ฌ ์ฌ๋ถ ๊ฒ์ฆ (#207) * fix: ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด ์ด๋ ธํ ์ด์ ์ผ์น * feat: ํค๋ ๊ฒ์ฌ ์ด๋ ธํ ์ด์ * feat: ํค๋ ๋ฐธ๋ฆฌ๋ฐ์ดํฐ * feat: ์ปจํธ๋กค๋ฌ์ ํค๋ ๊ฒ์ฌ * feat: ํค๋ ๊ฒ์ฆ ๋ฉ์์ง ํด๋ผ์ด์ธํธ์ ์ ๋ฌ * fix: ๋๋ฝ๋ `@Valid` ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: ์์ฒญ์ด null์ธ ๊ฒฝ์ฐ ํธ๋ค๋ง * chore: ํ ์คํธ ์ด๋ฆ ๊ฐ๊ฒฐํ๊ฒ ๋ณ๊ฒฝ * chore: ์๋ฌธ์ ์ปจ๋ฒค์ * feat: ArgumentResolver๋ฅผ ํ์ฉํ ํค๋ ๊ฒ์ฆ * feat: ๊ณต์ฉ ํจํค์ง๋ก ์ด๋ ๋ฐ ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์์ * chore: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ * feat: ArgumentResolver ์ ์ฉ, Validator ์ญ์ * chore: ์ฌ์ฉํ์ง ์๋ ์ปค์คํ ์์ธ ์๋ณต * refactor: ํค๋ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ๋ฉ์์ง ์์ * chore: ๋ถํ์ํ `@Valid` ์ด๋ ธํ ์ด์ ์ญ์ * refactor: ๋ณ์ ์ถ์ถ Co-authored-by: Yeongseo Na <[email protected]> * fix: ์ปดํ์ผ ์๋ฌ ํด๊ฒฐ --------- Co-authored-by: Yeongseo Na <[email protected]> * ci: index.html์ ๊ตฌ๊ธ ์ ๋๋ฆฌํฑ์ค ์ ์ฉ (#226) * [FE] ci: sentry ์ด๊ธฐ ์ค์ (#223) * ci: sentry ์ด๊ธฐ ์ค์ * chore: gitignore์ env.sentry-build-plugin ์ถ๊ฐ * ci: sentry ์ ์ฉ ํ๋ก์ ํธ๋ฅผ woowacoure-review-me๋ก ๋ณ๊ฒฝ, ๋ก์ปฌ ํ๊ฒฝ ์ถ์ ํ๋๋ก ๋ณ๊ฒฝ * ci: sentry ์ ์ฉ ํ๊ฒฝ์ ๋ฐฐํฌ ํ๊ฒฝ์ผ๋ก ๋ค์ ๋ณ๊ฒฝ * ci: sentry์์ replay ๊ด๋ จ ์ค์ ์ญ์ --------- Co-authored-by: badahertz52 <[email protected]> * [FE] refactor: LandingPage์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ์ ์ฉ ๋ฐ ๋ฆฌํฉํ ๋ง (#218) * chore: LandingPage์ styles ํ์ผ ๋ถ๋ฆฌ * fix: POST ์์ฒญ์ ํ๋ ํจ์์ ์ด๋ฆ์ post~๋ก ์์ * feat: ๊ทธ๋ฃน ๋ฐ์ดํฐ ์์ฑ ์์ฒญ์ ๋ํ MSW ํธ๋ค๋ฌ ์ถ๊ฐ * refactor: ๋ชจํน ๋ฐ์ดํฐ ๊ฐ์ ๋ ์ง๊ด์ ์ผ๋ก ์์ * refactor: LandingPage๋ฅผ ErrorSuspenseContainer๊ฐ ๊ฐ์ธ๋๋ก ์์ * refactor: URL์ ์ป์ด์ค๋ API์ react-query ์ ์ฉ ๋ฐ API ํธ์ถ ํจ์ ์ด๋ฆ ์์ * chore: LandingPage ํ์ ์ปดํฌ๋ํธ๋ค์ index ํ์ผ ์ถ๊ฐ ๋ฐ ์ ์ฉ * refactor: groupAccessCode ๊ด๋ จ msw ํธ๋ค๋ฌ ์ถ๊ฐ ๋ฐ ์๋ฌ ์ํ(์๋ ์ฝ๋ ์ ๋ ฅ, ์๋ฒ ์๋ฌ)์ ๋ฐ๋ฅธ ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ๋๋ก ์์ * refactor: groupAccessCode์ ์ํ๋ฒณ ๋์๋ฌธ์์ ์ซ์๋ง ์ฌ ์ ์๋๋ก ์์ * refactor: LandingPage์์ ErrorSuspenseContainer๋ฅผ ์ ๊ฑฐํ๊ณ ๋์ URLGeneratorForm๋ง์ ๊ฐ์ธ๋๋ก ์์ * refactor: Input ์ปดํฌ๋ํธ์ onChange ์ด๋ฒคํธ ํ์ ์์ * refactor: Input ์ปดํฌ๋ํธ์ name ์์ฑ ์ถ๊ฐ * refactor: ์์ ๋ ๊ฒฝ๋ก ๋ฐ์ * refactor: usePostDataForUrl ์ฟผ๋ฆฌ์์ mutation์ ๋ฆฌํดํ๋๋ก ์์ * refactor: URL์ ์ฑ๊ณต์ ์ผ๋ก ์์ฑํ ์ดํ Input์ ๋ฆฌ์ ํ๋ ํจ์ ์ถ๊ฐ * chore: NOTE ์ฃผ์ ์ถ๊ฐ * refactor: getIsValidGroupAccessCodeApi์์ 400 ์ธ์ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ๊ธฐ์กด์ createApiErrorMessage๋ฅผ ์ฌ์ฉํ๋๋ก ์์ * chore: ๋๋ฝ๋๋ -Api suffix ๋ฐ์ * [BE] Actuator ์ ์ฉ๊ณผ logback ์ค์ (#228) * build: actuator ์์กด์ฑ ์ถ๊ฐ * feat: ๋ก๊ทธ๋ฐฑ ์ค์ * feat: submodule ์ ์ฉ - actuator ์ค์ ์ ์๋ธ ๋ชจ๋์ ์ ์ฅ * style: ๊ฐํ ๋ฐ ์ฃผ์ ์ ๊ฑฐ * test: logback ์ค์ ์ถ๊ฐ * [FE] CD test (#233) * ci: sentry ์ด๊ธฐ ์ค์ * chore: ์๋น์ค ํ์ดํ ๋๋ฌธ์๋ก ๋ณ๊ฒฝ * chore: merge * [BE] ํ๋กํ์ผ ๋ถ๋ฆฌ, CD ์คํฌ๋ฆฝํธ ์์ (#235) * feat: ํ๋กํ์ผ ๋ถ๋ฆฌ * feat: ํ๋กํ์ผ ๋ถ๋ฆฌ * cd: ํ๋กํ์ผ ๋ถ๋ฆฌ cd ์คํฌ๋ฆฝํธ ์์ * fix: CD ์คํฌ๋ฆฝํธ ์คํ ์์ (#236) * [FE] CD test 2 (#237) * ci: sentry ์ด๊ธฐ ์ค์ * chore: ์๋น์ค ํ์ดํ ๋๋ฌธ์๋ก ๋ณ๊ฒฝ * chore: merge * fix: sentry ์ฌ์ค์ * fix: sentry ์ค์ ๋ณต๊ตฌ * fix: cd ์คํฌ๋ฆฝํธ ์คํ ์์ (#238) * [FE] CD TEST 3 (#239) * ci: sentry ์ด๊ธฐ ์ค์ * chore: ์๋น์ค ํ์ดํ ๋๋ฌธ์๋ก ๋ณ๊ฒฝ * chore: merge * fix: sentry ์ฌ์ค์ * fix: sentry ์ค์ ๋ณต๊ตฌ * chore: ์๋น์ค ํ์ดํ ๋ณ๊ฒฝ * [BE] build: Micrometer ์์กด์ฑ ์ถ๊ฐ (#244) * build: ๋ง์ดํฌ๋ก๋ฏธํฐ ์์กด์ฑ ์ถ๊ฐ Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> * chore: ์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> --------- Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> * [FE] feat: ๊ณตํต ์ปดํฌ๋ํธ์ธ ์ฒดํฌ๋ฐ์ค์ ์ฒดํฌ๋ฐ์ค ์์ดํ ์ ์ (#240) * feat: ๊ณตํต ์ฒดํฌ๋ฐ์ค ์ปดํฌ๋ํธ ์์ฑ * feat: ์ฒดํฌ๋ฐ์ค์ ๋ ์ด๋ธ์ ๋ฌ ์ ์๋ CheckboxItem ์ปดํฌ๋ํธ ์์ฑ * fix: style์ ์๋ชป ์ ๋ฌํ๋ ๋ฌธ์ ํด๊ฒฐ * [BE] fix: CD ์คํฌ๋ฆฝํธ ์์ (#246) * fix: CD ์คํฌ๋ฆฝํธ ์์ * chore: ์ ์ฅ ๋ฐ์ดํฐ dev์์ ํ์ฉํ ์ ์๋๋ก ์์ * [FE] refactor: LandingPage ๊ฒฝ๋ก ๋ณ๊ฒฝ (#249) * refactor: LandingPage์ ๊ฒฝ๋ก ๋ณ๊ฒฝ * refactor: App ์์ ์ฌ์ด๋๋ฐ ์ฃผ์ ์ฒ๋ฆฌ * [BE] Swagger API ๋ฌธ์ ์ ๋ฐ์ดํธ (#254) * docs: ๋ฆฌ๋ทฐ api ๋ฌธ์๋ฅผ ์ํ swagger ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: ์ฌ์ฉํ์ง ์๋ dto ์ญ์ * docs: api ๋ฌธ์์ ์ต์ ๋ฐ ์ต๋ ์ค์ ์๋ด ์ถ๊ฐ * docs: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน api๋ฅผ ์ํ swagger ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: Spring์์ ์ ๊ณตํ๋ APPLICATION_JSON_VALUE ์ฌ์ฉ * [BE] feat: ์์ธ์ ๋ํ ๋ก๊ทธ ์์ฑ (#255) * feat: Controller advice ์ ๋ก๊น ์ถ๊ฐ * refactor: ์คํ ํธ๋ ์ด์ค ๋ก๊น ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน ์์ฑ์ ๊ธธ์ด ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ๋ต๋ณ ๊ธธ์ด ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ฝ๋ ๊ฒ์ฆ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ์กฐํ ๊ฒ์ฆ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ ํ๋ ํค์๋ ์กด์ฌํ์ง ์๋ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ค๋ณต ์ ํ๋ ํค์๋ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ํค์๋ ์กฐํ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ ํ ํค์๋ ๊ฐฏ์ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ ํ๋ ์ง๋ฌธ ์ค๋ณต ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ง๋ฌธ ์กฐํ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ค๋ณต ์ง๋ฌธ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์คํ๋ง ๋ฐ์ ์์ธ ๋ก๊น ์ ๋ฉ์ธ์ง ์ถ๊ฐ * feat: ์ธ์ฝ๋ฉ ์ค์ * style: ๊ฐํ ์์ Co-authored-by: Donghoon Lee <[email protected]> * style: ๊ฐํ ๋ฐ ๊ณต๋ฐฑ ์์ * refactor: ๋ถํ์ํ ๊ฒ์ฆ ์ ๊ฑฐ - ์ ํ๋ ํค์๋์ ์ง๋ฌธ์ด DB์ ์๋์ง๋ฅผ validator ์์ ๊ฒ์ฆํ ํ์๋, repository.getById ๋ฅผ ํ ๋ ํ๋ฒ ๋ ๊ฒ์ฆ์ด ๋ค์ด๊ฐ๋ค. ๋ฐ๋ผ์ 'DB์ ์๋์ง'์ ๋ํ ๊ฒ์ฆ์ validator ์์ ํ ํ์๋ ์๋ค๋ ํ๋จ ํ์ ํด๋น ๋ก์ง์ ์ญ์ ํ๋ค. --------- Co-authored-by: Donghoon Lee <[email protected]> * [FE] refactor: Textarea๋ฅผ ์ฌ์ฉํ๋ ๊ณตํต ์ฅ๋ฌธํ ๋ต๋ณ ์ ๋ ฅ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ (#252) * feat: ๊ณตํต textarea ์ปดํฌ๋ํธ ์์ฑ * refactor: longReviewItem์ ๋ก์ง์ ์ปค์คํ ํ ์ผ๋ก ๋ถ๋ฆฌ * refactor: longReviewItem์ผ๋ก ์ด๋ฆ ๋ณ๊ฒฝ ๋ฐ ์ปดํฌ๋ํธ ๊ตฌํ * chore: ๊ธฐ์กด์ ReviewItem ์ ๊ฑฐ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ LongReviewItem ์ ์ฉ * [FE] refactor: ๊ณต์ฉ ๋ชจ๋ฌ ํ ์ถ๊ฐ ๋ฐ LongReviewItem ๋ฆฌํฉํ ๋ง (#258) * feat: ๋ชจ๋ฌ ์ํ ๊ด๋ฆฌ ํ ์ถ๊ฐ * refactor: LongReviewItem ์ปดํฌ๋ํธ๊ฐ ์ธ๋ถ์ event๋ฅผ props๋ก ๋ฐ์ ์ ์๋๋ก ๋ณ๊ฒฝ * [FE] test: LandingPage์์ ์ฌ์ฉํ๋ API์ ๋ํ ํ ์คํธ ์์ฑ (#251) * chore: ๋ถํ์ํ Fragment ์ ๊ฑฐ * test: LandingPage์์ ์ฌ์ฉํ๋ api ํ ์คํธ ์ถ๊ฐ * [FE] refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ react query๋ฅผ ์ ์ฉํ๊ณ API ์ฐ๋ ํ ์คํธ ์์ฑ (#256) * refactor: ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๋ก์ง์ react query ์ ์ฉ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ ๊ฒ์ ์์ฒญ ๋ก์ง์ useMutation ์ ์ฉ * refactor: query key ์์ํ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๋ก์ง์ useReviewForm์์ ์ ๊ฑฐ * chore: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ErrorSuspenseContainer ์ ์ฉ * chore: styled component๋ช ์์ * chore: ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ mock data๋ฅผ ๋ณ๊ฒฝ๋ api ํ์์ ๋ง๊ฒ ์์ * chore: useGetDataToWrite๊ฐ ๋ ๋ง์ ๋ฐํ๊ฐ์ ์ ๊ณตํ๋๋ก ์์ * test: useGetDataToWrite์ API ์์ฒญ ํ ์คํธ ์์ฑ * chore: dataToWrite๊ฐ ์๋ ๊ฒฝ์ฐ ์ํ ๊ธฐ๋ณธ๊ฐ ์ง์ * chore: msw๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ๋ทฐ ์์ฑ post ์์ฒญ mocking * chore: ๋ฆฌ๋ทฐ ์ ๋ณด mocking data ์์ฑ * chore: useMutationReview๊ฐ UseMutationResult ํ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋๋ก ์ค์ * test: useMutateReview์ API ์์ฒญ ํ ์คํธ ์์ฑ * chore: useGetDataToWrite์ ๋ฐํ๊ฐ์ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์์ * chore: LongReviewItem ์ปดํฌ๋ํธ ์ ์ฉ * [FE] fix: ์ง๋ฌธ ๋ฒํธ๊ฐ ์๋ชป ์ถ๋ ฅ๋๋ ์ค๋ฅ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ์ ์๋ชป๋ ๊ฒฝ๋ก๋ก ์ด๋ํ๋ ์ค๋ฅ ์์ (#265) * fix: ์ง๋ฌธ ๋ฒํธ๊ฐ ์๋ชป ์ถ๋ ฅ๋๋ ์ค๋ฅ ์์ * fix: ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ์ ์๋ชป๋ ๊ฒฝ๋ก๋ก ์ด๋๋๋ ๋ฌธ์ ์์ * [BE] feat: ์ง๋ฌธ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ์ผ๋ก ์นํ (#262) * chore: cd ํ ์คํธ ํ์ธ ์ฝ๋ ์์ฑ (#272) * fix: ์์ธ ๋ด์ฉ ํ์ํ ๋ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ ์นํ (#270) * [FE] feat: ํด๋ฆฝ๋ณด๋ ๋ณต์ฌ ์ปดํฌ๋ํธ ๊ตฌํ (#261) * feat: ํด๋ฆฝ๋ณด๋ ๋ณต์ฌ ์ปดํฌ๋ํธ ๊ตฌํ Co-authored-by: skylar1220 <[email protected]> * fix: ๋ถ๋ชจ ์์์ ๋๋น์ ๋ฐ๋ผ CopyTextButton์ด ์์์ง๋ ๋ฌธ์ ํด๊ฒฐ * refactor: ReviewGroupDataModal ์คํ์ผ ์กฐ์ - ์ ์ฒด ํฌ๊ธฐ ์ง์ ๋ฐ gap ์กฐ์ * chore: ๋ถํ์ํ padding ์ ๊ฑฐ * chore: index ํ์ผ์ CopyTextButton ์ถ๊ฐ --------- Co-authored-by: skylar1220 <[email protected]> * [FE] chore: front_deploy๋ฅผ develop์ ๋ฐ์ (#276) * [FE] feat: ์ง๋ฌธ ์์ฑ ํ์ด์ง QuestionCard, ReviewWritingCard ๊ณตํต ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ , ์ฌ๋ผ์ด๋ ๋ฐฉ์์ ๊ธฐ๋ฅ ์ถ๊ฐ (#247) * chore: .gitignore์์ ์ฃผ์ ์ ๊ฑฐ * feat: QuestionCard ์ปดํฌ๋ํธ ๊ตฌํ * feat: ReviewWritingCard ์ปดํฌ๋ํธ ๊ตฌํ * style: CSS ์์ฑ ์์ ์ ๋ ฌ * refactor: ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ๊ฐ๊ฐ Header์ Main ์น์ ์ผ๋ก ๋ถ๋ฆฌ * feat: ์ฌ๋ผ์ด๋ ๋ฐฉ์์ผ๋ก ์ง๋ฌธ ์นด๋๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์ ํ๋๋ ๊ธฐ๋ฅ ์ถ๊ฐ * design: pretendard ํฐํธ ์ ์ฉ * chore: ํค๋ review me ๋๋ฌธ์๋ก ๋ณ๊ฒฝ * refactor: QuestionCard, ReviewWritingCard ํด๋ ์์น ๋ณ๊ฒฝ - ReviewWritingFormPage์ components๋ก ์ด๋ * [FE] ์ง๋ฌธ ์์ ํ์ด์ง์ ํ์ํ ์ง๋ฌธ ๋ชฉ ๋ฐ์ดํฐ ๋ฐ ์นด๋์ ์ํ ์ฒ๋ฆฌ (#263) * [BE] fix: CD ์คํฌ๋ฆฝํธ ์์ (#246) * fix: CD ์คํฌ๋ฆฝํธ ์์ * chore: ์ ์ฅ ๋ฐ์ดํฐ dev์์ ํ์ฉํ ์ ์๋๋ก ์์ * [FE] refactor: Landiโฆ
* [All] ์ด์ ์๋ฒ ๋ฐฐํฌ (v1.0.0) (#509) * [FE] ํ๋ก ํธ์๋ ์ด๊ธฐ ์ธํ (#5) * ci: webpack, react, typescript ์ค์ * ci: eslint, prettier, stylelint ์ค์ * [BE] feat: ์ด๊ธฐ ํ๊ฒฝ ์ค์ (#8) * feat: ์ด๊ธฐ ํ๊ฒฝ ์ค์ * refactor: ํด๋์ค ์ข ๋ฃ ์ ๊ฐํ ์ ๊ฑฐ * build: application.yml ์ค์ * [BE] feat: ์ด๊ธฐ ์ํฐํฐ ์์ฑ (#10) * feat: ์ด๊ธฐ ์ํฐํฐ ์์ฑ * refactor: ๋ฆฌ๋ทฐ ๋ด์ฉ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋ค๋์ผ ์ฐ๊ฒฐ * refactor: ํจํค์ง ๊ตฌ์กฐ ๊ณ ๋ คํ์ฌ ProjectGroup์ผ๋ก ์์ * refactor: Project -> Reviewer๋ก ๋ณ๊ฒฝ * refactor: ํ ์ด๋ธ๋ช ์ผ์น (reviewer_group) * [BE] feat: ๋ฆฌ๋ทฐ ์์ฑ (#15) * feat: ์ด๊ธฐ ์ํฐํฐ ์์ฑ * refactor: ๋ฆฌ๋ทฐ ๋ด์ฉ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋ค๋์ผ ์ฐ๊ฒฐ * refactor: ํจํค์ง ๊ตฌ์กฐ ๊ณ ๋ คํ์ฌ ProjectGroup์ผ๋ก ์์ * refactor: Project -> Reviewer๋ก ๋ณ๊ฒฝ * refactor: ํ ์ด๋ธ๋ช ์ผ์น (reviewer_group) * feat: ๋ฉค๋ฒ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ์ด๊ทธ๋ฃน ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ ๋ฌธํญ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ํค์๋ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ ํค์๋ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ฆฌ๋ทฐ ์์ฑ ๊ธฐ๋ฅ ๊ตฌํ * test: ๋ฆฌ๋ทฐ ์์ฑ ๊ธฐ๋ฅ ํ ์คํธ ์ถ๊ฐ --------- Co-authored-by: donghoony <[email protected]> Co-authored-by: nayonsoso <[email protected]> * [BE] feat: ํ ์คํธ ๋ฉ์๋๋ณ ๊ฒฉ๋ฆฌ (#19) * feat: ํ ์คํธ ๊ฒฉ๋ฆฌ๋ฅผ ์ํ DB Cleaner ๋ฐ Extension ๊ตฌํ * feat: Service์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์ด๋ ธํ ์ด์ ์ ๊ณต * test: ์๋น์ค ํ ์คํธ ์ด๋ ธํ ์ด์ ์ฌ์ฉํ๋๋ก ์์ * fix: ๋๋ฝ๋ ๋ฆฌ๋ทฐ ์์ฑ ๋งคํ URL ์ถ๊ฐ (#17) * [BE] feat: ๋ฆฌ๋ทฐ ์กฐํ (#22) * feat: ๋ฆฌ๋ทฐ ์กฐํ ๊ธฐ๋ฅ ์ถ๊ฐ * style: ๊ฐํ ๋ณ๊ฒฝ * test: ๋ฆฌ๋ทฐ ์กฐํ ๊ธฐ๋ฅ ํ ์คํธ ์ถ๊ฐ * refactor: ๋ฆฌ๋ทฐ ์กฐํ ๋ฉ์๋๋ช ๋ณ๊ฒฝ * refactor: id ํ์ ๋ณ๊ฒฝ * style: ๊ฐํ ์์ * fix: PostMapping ์์ --------- Co-authored-by: KIMGYUTAE <[email protected]> Co-authored-by: donghoony <[email protected]> * [BE] feat: ์ปค์คํ ์์ธ ์ฒ๋ฆฌ (#20) * feat: ์ปค์คํ ์์ธ ์์ฑ * feat: ์ปค์คํ ์์ธ ์ ์ฉ * feat: ๊ธ๋ก๋ฒ ์์ธ ์ฒ๋ฆฌ * [BE] feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ ๋ณด ๋ฐ ํค์๋ ์กฐํ API (#24) * feat: ํค์๋ ์กฐํ API * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์กฐํ API * refactor: PathVariable ๋ณ์๋ช ๋ณ๊ฒฝ * [FE] ๋ฆฌ๋ทฐ ์์ฑํ๋ฉด๊ณผ ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ๋ฉด ๊ฒฐํฉ (#26) * fix : webpack dev sever ์ด ๋ ์ค๋ฅ ์์ - package.json ์์ type :"module" ์ญ์ , stylelint ๊ด๋ จ ์ค์ ์ญ์ Co-Authored-By: ImxYJL <[email protected]> * ci : svgํ์ผ ๊ด๋ จ ํ๊ฒฝ ์ ํ Co-Authored-By: ImxYJL <[email protected]> * design : reset ์คํ์ผ, global style์์ ํฐํธ ์ ์ฉ Co-Authored-By: ImxYJL <[email protected]> * feat: ๋ฆฌ๋ทฐ ์ ๊ธ ๋ฒํผ ์ถ๊ฐ Co-Authored-By: ImxYJL <[email protected]> * feat: ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ๋ฉด์ ์ง๋ฌธ,๋ต ์ปดํฌ๋ํธ ์ถ๊ฐ Co-Authored-By: ImxYJL <[email protected]> * feat: ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ๋ฉด์ ํ๋ก์ ํธ ์ค๋ช ์ปดํฌ๋ํธ ์ถ๊ฐ Co-Authored-By: ImxYJL <[email protected]> * feat : ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ๋ฉด ํ์ด์ง ์ถ๊ฐ ๋ฐ ์์ธ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ ํ์ ์ถ๊ฐ Co-Authored-By: ImxYJL <[email protected]> * fix: webpack dev server ์ด ๋ ์ค๋ฅ ์์ Co-authored-by: soosoo22 <[email protected]> * design: reset css ์ ์ฉ Co-authored-by: soosoo22 <[email protected]> * feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ๊ตฌํ Co-authored-by: soosoo22 <[email protected]> * ci: svg ํ์ผ ๊ด๋ จ ์ค์ * fix : ๋จธ์ง์ถฉ๋ ํด๊ฒฐ ๋ฐ ์คํ ์์ * feat: react-router-dom, react-router ์ค์น ๋ฐ ์ค์ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ์ด์ง ๊ฒฐํฉ ๋ฐ ๋ฆฌํฉํ ๋ง * refactor: ๋ฆฌ๋ทฐ ํ์ ํ์ผ ๋ฆฌํฉํ ๋ง ๋ฐ ํ์ ์ถ๊ฐ * feat: api ์ค์ ์ถ๊ฐ ๋ฐ ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ์ด์ง์ api ํธ๋ค๋ฌ ์ถ๊ฐ --------- Co-authored-by: ImxYJL <[email protected]> Co-authored-by: chysis <[email protected]> Co-authored-by: soosoo22 <[email protected]> * [BE] refactor: ํจํค์ง ๊ตฌ์กฐ ๋ฆฌํฉํฐ๋ง (#30) * refactor: ํจํค์ง ๊ตฌ์กฐ ๊ตฌ์ฒดํ * refactor: ํจํค์ง ๊ตฌ์กฐ ๊ตฌ์ฒดํ(์๋น์ค, ์ปจํธ๋กค๋ฌ, ๋ ํฌ์งํ ๋ฆฌ) * [BE] feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ค๋ช ์์ฑ, ๋ง๊ฐ ๊ธฐํ ๋ฐ ๊ฒ์ฆ ๋ก์ง ์ถ๊ฐ (#34) * feat: BadRequestException ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ด๋ฆ, ์ค๋ช ๊ธธ์ด ๊ฒ์ฆ * [FE] design: theme ,์ ์ญ ์คํ์ผ์ ์ค์ (#41) * chore: ๋ถํ์ํ ํ์ผ ์ญ์ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> * design: theme ์์ฑ - ์์, ํฐํธ ์ฌ์ด์ฆ, ํฐํธ wieght ์ค์ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> * design: emotion ThemeProvider ์ ์ฉ ๋ฐ Theme ํ์ ํ์ฅ - emotion์์ ์ ๊ณตํ๋ Theme ํ์ ์ด ๋น ๊ฐ์ฒด์ฌ์ ์ฝ๋์์ ์ฌ์ฉํ๋ theme์ ๋ง๊ฒ ํ์ ์ ํ์ฅํจ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> * design : rem ์ ํ ๋ฐ reset.css๋ฅผ globalStyle์ ์ ์ฉ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: App์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: soosoo22 <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: ImxYJL <[email protected]> Co-authored-by: soosoo22 <[email protected]> Co-authored-by: Fe <[email protected]> * [FE] ci: ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ๋ฐ msw ์ค์น, eslint import rule ์ถ๊ฐ ๋ฐ ์ ์ฉ (#44) * ci: eslint ์ค๋ฅ ์์ ๋ฐ import rule ์ถ๊ฐ ๋ฐ ๊ด๋ จ ํ๋ฌ๊ทธ์ธ ์ค์น - eslint-config-prettier - eslint-plugin-import Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * style: eslint ์ ์ฉ์ผ๋ก ์ธํ ์ฝ๋ ํฌ๋งทํ ๋ณ๊ฒฝ import ์์ ์ ์ฉ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * ci: msw ์ค์น Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: badahertz52 <[email protected]> Co-authored-by: ImxYJL <[email protected]> Co-authored-by: Fe <[email protected]> * [BE] docs: Swagger๋ฅผ ํ์ฉํ API ๋ฌธ์ ์๋ํ (#31) * chore: swagger-ui ์ค์ ์ถ๊ฐ * feat: swaggerConfig ์ถ๊ฐ * docs: ์ปจํธ๋กค๋ฌ์ swagger ์ด๋ ธํ ์ด์ ์ถ๊ฐ * docs: dto์ swagger ์ด๋ ธํ ์ด์ ์ถ๊ฐ * chore: api ๋ฌธ์ ์ค์ ํ์ผ ์ถ๊ฐ * refactor: SwaggerConfig info ์ค์ ํ์ผ ๋ณ์ ์ฐธ์กฐํ๋๋ก ๋ณ๊ฒฝ * docs: api ๋ฌธ์์ ์ํ์ฝ๋ ์ฌ๋ฐ๋ฅด๊ฒ ๋ ธ์ถ๋๋๋ก ๋ณ๊ฒฝ * chore: api ๋ฌธ์ ํ์ผ๋ช ๋ณ๊ฒฝ * chore: api-docs ํ๋กํผํฐ๋ช ๋ณ๊ฒฝ * refactor: ํ๋กํผํฐ ์ ๋ณด์ ์ค์ ํด๋์ค ๋ถ๋ฆฌ * refactor: ์ปจํธ๋กค๋ฌ ๋ด swagger ์ด๋ ธํ ์ด์ ๋ถ๋ฆฌ --------- Co-authored-by: KIMGYUTAE <[email protected]> * [BE] feat: ๋ฆฌ๋ทฐ ๋๋ฉ์ธ ๊ตฌ์ฒดํ, ์ ์ฑ ๊ตฌํ (#43) * feat: dto ๊ฒ์ฆ์ ์ํ ์์กด์ฑ ์ถ๊ฐ * feat: dto์ jakarta validation ์ด๋ ธํ ์ด์ ์ถ๊ฐ * feat: ์ปจํธ๋กค๋ฌ์์ ์์ฒญ์ ๊ฒ์ฆํ ์ ์๋๋ก ์ค์ * feat: FieldError ๋ด์ฉ์ ๋ณด์ฌ์ค ์๋ต ๊ฐ์ฒด ์์ฑ * feat: FieldError ํธ๋ค๋ฌ ์ถ๊ฐ * refactor: ๋ฌธ์์ด ๊ณต๋ฐฑ ๊ฒ์ฆ์ ์ํด NotBlank ์ฌ์ฉ * style: todo ์ฃผ์ ์ถ๊ฐ * feat: ๋ฐ๋๋ผ์ธ์ด ์ง๋๋ฉด ๋ฆฌ๋ทฐ๋ฅผ ์์ฑํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: ์ฌ์ด์ฆ ๊ฒ์ฆ๋ฌธ ์ ๊ฑฐ * style: ๊ฐํ ๋ณ๊ฒฝ * refactor: ์์ธ ์ด๋ฆ์ ๊ณผ๊ฑฐํ์ผ๋ก ๋ณ๊ฒฝ * refactor: RFC 9457 ํ์์ ์งํค๋ฉด์ ํ๋ ์๋ฌ ์ ๋ณด๋ฅผ ๋ฐํํ๋๋ก ์์ * chore: ์คํ ์์ * fix: conflict ํด๊ฒฐ * feat: dto์ jakarta validation ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: ๋ฌธ์์ด ๊ณต๋ฐฑ ๊ฒ์ฆ์ ์ํด NotBlank ์ฌ์ฉ * refactor: ์ฌ์ด์ฆ ๊ฒ์ฆ๋ฌธ ์ ๊ฑฐ * [BE] feat: ํค์๋ ๋๋ฉ์ธ ๊ตฌ์ฒดํ, ์ ์ฑ ๊ตฌํ (#40) * feat: ํค์๋ ์ผ๊ธ ์ปฌ๋ ์ ๋ฐ ์ ์ฝ์ฌํญ ๊ตฌํ * build: ํ ์คํธ ํ๊ฒฝ์์ Lombok ์์กด์ฑ ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ์ ์ถ๊ฐ๋ ํค์๋ ์ญ์ * feat: ๋ฆฌ๋ทฐ์ ํค์๋ ์ถ๊ฐ * feat: ์ผ๊ธ ์ปฌ๋ ์ ์ ์ด๋ฆ์ SelectedKeywords๋ก ๋ณ๊ฒฝ * refactor: ํค์๋ ๊ฐ์ ์ ์ฑ 5๊ฐ ๋ฐ์ * refactor: ์ค๋ณต ํค์๋ ๋ฉํธ ์์ * refactor: `deleteAll`๋ก ๋ฉ์๋๋ช ์์ * refactor: `duplicated` -> `duplicate`๋ก ์์ * refactor: ํค์๋ ๋๋ฑ์ฑ ๋น๊ต * test: ํค์๋ ๋ฑ๋ก ์ ๊ธฐ์กด ํค์๋ ์ญ์ ํ ์คํธ ์์ฑ * refactor: ์ฌ์ฉํ์ง ์๋ ํ๋ ์ญ์ * style: add newlines between comments * refactor: ํค์๋ ID ๊ธฐ๋ฐ ๋น๊ต * refactor: id๊ฐ ์๋ ๊ฒฝ์ฐ detail ๋น๊ต * refactor: ํค์๋ ํ ์คํธ ๋๋ฉ์ธ ๊ธฐ๋ฐ์ผ๋ก ์์ * [BE] feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ๋๋ฉ์ธ ๊ตฌ์ฒดํ, ์ ์ฑ ๊ตฌํ (#45) * feat: Member ์ํฐํฐ์ GitHub ID ์์ฑ ์ถ๊ฐ * feat: ์์ฑํ ๋ฆฌ๋ทฐ์ด๊ฐ ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน์ ์ํ๋์ง ๊ฒ์ฆ * feat: ๋ฆฌ๋ทฐ ์์ฑ ์, ์ด๋ฏธ ์์ฑํ ๋ฆฌ๋ทฐ๊ฐ ์์ง ์์์ง ๊ฒ์ฆ * refactor: Review ์ํฐํฐ์ reviewer์์ ์ฐ๊ด๊ด๊ณ ManyToOne์ผ๋ก ๋ณ๊ฒฝ * refactor: ์ปฌ๋ผ๋ช ์ค๋ฅ ์์ * refactor: gitHub ํ๊ธฐ -> github์ผ๋ก ๋ณ๊ฒฝ * refactor: GithubReviewGroup -> GithubReviewGroup ํด๋์ค๋ช ๋ณ๊ฒฝ * refactor: ๋๋ฝ๋ @Column ์ถ๊ฐ * test: ๋ฆฌ๋ทฐ ์์ฑ ํ ์คํธ ์, ๊นํ ์ฌ์ฉ์ ๊ทธ๋ฃน ๋ฐ์ดํฐ ์ ์ฅ ๋ถ๋ถ ์ถ๊ฐ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์, ์ค๋ณต ๋ฆฌ๋ทฐ ๊ฒ์ฆ ๋ก์ง ์์ * refactor: GithubReviewerGroupNotFoundException์ UnAuthorizedException ๊ตฌํํ๋๋ก ์์ * refactor: ReviewContentExistException -> ReviewAlreadySubmittedException ํด๋์ค๋ช ๋ณ๊ฒฝ * feat: UnAuthorizedException ์ถ๊ฐ * refactor: ๋ฉ์๋ ์์ ๋ณ๊ฒฝ * test: ๋ถํ์ํ given์ ์ญ์ * test: ํ ์คํธ๋ฅผ ์ํ ๋ฐ์ดํฐ ์ฝ์ repository๋ฅผ ํ์ฉํ๋๋ก ๋ณ๊ฒฝ --------- Co-authored-by: Donghoon Lee <[email protected]> * [FE] ๋ฆฌ๋ทฐ ์ฐ๊ธฐ ํ์ด์ง์ ํ์ ๋ ๋์์ธ์ ๋ฐ์ํ๊ณ , ๋ฆฌํฉํฐ๋งํ๋ค. (#53) * fix: eslint์์ ์ ๋ ๊ฒฝ๋ก๋ฅผ ์ฝ์ง ๋ชปํ๋ ์ค๋ฅ ์์ ์ ๋ ๊ฒฝ๋ก ์ง์ Co-Authored-By: ImxYJL <[email protected]> * design: ์์คํ ๊ธฐ๋ณธ ํฐํธ ํฌ๊ธฐ ์ง์ Co-Authored-By: ImxYJL <[email protected]> * chore: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ emotion.ts์์ theme ์ ๊ฑฐ Co-Authored-By: ImxYJL <[email protected]> * feat: ๊ณตํต ๋ฒํผ ์ปดํฌ๋ํธ ๊ตฌํ Co-Authored-By: ImxYJL <[email protected]> * feat: ํค์๋ ๋ฒํผ ์ปดํฌ๋ํธ ๊ตฌํ Co-Authored-By: ImxYJL <[email protected]> * feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ํผ๋ธ๋ฆฌ์ฑ ๋ฐ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ Co-Authored-By: ImxYJL <[email protected]> * feat: ๋ฆฌ๋ทฐ์ด ์ฝ๋ฉํธ ์ปดํฌ๋ํธ ๊ตฌํ Co-Authored-By: ImxYJL <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์์ ๋ฆฌ๋ทฐ ์์ดํ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ Co-Authored-By: ImxYJL <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ๋ฆฌํฉํฐ๋ง - ๋ฆฌ๋ทฐ์ด ์ฝ๋ฉํธ ์ถ๊ฐ - ๋ฆฌ๋ทฐ ์์ดํ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ - ๋ถ๊ฐ์ ์ธ ์คํ์ผ๋ง Co-Authored-By: ImxYJL <[email protected]> --------- Co-authored-by: ImxYJL <[email protected]> * [FE] feat: sidebar ๋ฆฌํฉํ ๋ง ๋ฐ ๊ธฐ๋ฅ ์ถ๊ฐ , topbar ์ถ๊ฐ, ๋ฐ์ํ ํ์ด์ง ๋ ์ด์์ ์ ์ฉ (#55) * style: globalStyles.ts์์ ๊ฒฝ๋ก ๊ณต๋ฐฑ ์ถ๊ฐ * docs: ๋ถํ์ํ import ์ญ์ Co-Authored-By: soosoo22 <[email protected]> * design : theme ์ถ๊ฐ - ์ถ๊ฐ๋ theme : breakpoints, sidebarWidth Co-Authored-By: soosoo22 <[email protected]> * chore: Header ์ปดํฌ๋ํธ ์ญ์ Co-Authored-By: soosoo22 <[email protected]> * feat : Topbar ์์ฑ, logo ์ด๋ฏธ์ง ๋ณ๊ฒฝ ๋ฐ SearchInput ์์ฑ - logo ์ด๋ฏธ์ง ๋ณ๊ฒฝ - Topbar์ ๋ค์ด๊ฐ๋ ์ปดํฌ๋ํธ๋ค (SidebarOpenButtion, Logo )์์ฑ - userProfile ์ด๋ฏธ์ง ์์ฑ - ๊ณตํต ์ปดํฌ๋ํธ : SearchInput ui ์์ฑ Co-Authored-By: soosoo22 <[email protected]> * feat : ํ์ด์ง ๋ ์ด์์ ์์ฑ - ๋ ์ด์์ ๊ด๋ จ ์ปดํฌ๋ํธ๋ค ์์ฑ Co-Authored-By: soosoo22 <[email protected]> * refactor : App์ ํ์ด์ง ๋ ์ด์์ ์ ์ฉ Co-Authored-By: soosoo22 <[email protected]> * refactor: Sidebar ๋ฆฌํฉํ ๋ง - ๋ฉ๋ด๋ช ์์์ฒ๋ฆฌ - ํผ๊ทธ๋ง ๋์์ธ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ Co-Authored-By: soosoo22 <[email protected]> * feat: sidebar ์ด๊ณ ๋ซ๋ ๊ธฐ๋ฅ ์ถ๊ฐ Co-Authored-By: soosoo22 <[email protected]> --------- Co-authored-by: soosoo22 <[email protected]> * fix: ์ปดํ์ผ ์๋ฌ ํด๊ฒฐ (#60) Co-authored-by: nayonsoso <[email protected]> * [FE] fix : stylelint ์ ์ฉ ์ค๋ฅ ์์ (#66) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * ci: CI ์คํฌ๋ฆฝํธ ์์ฑ (#70) * [BE] test: ๊นํ ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน์ ํ ์คํธ ์ถ๊ฐ ๋ฐ fixture ๋ฏธ์ ์ฉ ๋ถ๋ถ ๋ณด์ (#68) * test: GithubReviewerGroupRepository ํ ์คํธ ์ถ๊ฐ * test: ReviewServiceTest์ ํ ์คํธ fixture ์ ์ฉ * test: given, when, then์ ์ถ๊ฐ * test: given ๋ฐ์ดํฐ ์ค๋ฅ ์์ * [BE] chore: workflow ๋๋ ํฐ๋ฆฌ ์ด๋ (#74) * chore: workflow ๋๋ ํฐ๋ฆฌ ์ด๋ * fix: ๋ฐฑ์๋ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ * fix: ๋ฐฑ์๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ * fix: checkout actions์ ๋๋ ํ ๋ฆฌ ์ค์ * fix: ๋๋ ํ ๋ฆฌ ์ค์ ... * infra: CD ํ์ดํ๋ผ์ธ ์์ฑ (#76) * fix: cd gradle ๋๋ ํ ๋ฆฌ ์ด๋ (#77) * [BE] refactor: ๋จ๊ฑด ๋ฆฌ๋ทฐ ์กฐํ ์ ๋ฆฌ๋ทฐ์ด ์ ๋ณด ์ญ์ , ๋ฆฌ๋ทฐ ์์ฑ ์์ ์ถ๊ฐ (#65) * refactor: ๋ฆฌ๋ทฐ ์กฐํ ์ ๋ฆฌ๋ทฐ ์์ฑ ์๊ฐ ์ถ๊ฐ, ๋ฆฌ๋ทฐ์ด ์ ๋ณด ์ญ์ * fix: ํ ์คํธ ์ด๋ ธํ ์ด์ ํ์ฑํ ๋ฐ ์์ * chore: ํ ์คํธ ํด๋์ค ํจํค์ง ์ด๋ * refactor: ๋ถํ์ํ given์ ์ ๊ฑฐ * [FE] ๋ฆฌ๋ทฐ ์์ฑ, ์์ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ์ด์ง์ ๋ฐฑ์๋ API ์ฐ๋ ๋ฐ dotenv-webpack ์ค์น, BASE_URL์ .env๋ก ์ด๋ (#78) * chore: gitignore์ yarn-error.log ์ถ๊ฐ * ci: env ํ์ผ ์ฌ์ฉ์ ์ํ dotenv-webpack ์ค์น * refactor: ์๋ํฌ์ธํธ์ env ํ์ผ์ ํตํ API_BASE_URL ๊ฒฝ๋ก ์ ์ฉ * fix: ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ ๋ฐ์ดํฐ์์ ๋ฐฑ์๋ ์๋ต๊ณผ ์์ฑ ์ด๋ฆ์ด ๋ฌ๋๋ ๋ถ๋ถ ์์ * refactor: ๋ฐฑ์๋ ์๋ต ๋ฐ ๋ฆฌํฉํ ๋ง๋ ๋ฆฌ๋ทฐ ์ฐ๊ธฐ ํ์์ ๋ง๊ฒ ๋ฆฌ๋ทฐ ์ฐ๊ธฐ ๋ชจํน ๋ฐ์ดํฐ ์์ * chore: ๋ถํ์ํ console.log ์ญ์ * [Fe] ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ๋ฐ์ํ๋ eslint ์ค๋ฅ๋ฅผ ์์ ํ์ต๋๋ค. (#81) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * [FE] ci: Jest, RTL ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ถ (#84) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * ci: jest ๋ฐ RTL ์ค์น * ci: jest ํ์ ์ค์ ์ถ๊ฐ * ci: CI๋ฅผ ์ํ yml ํ์ผ ํ ์คํธ * fix: ์๋ชป ์ฌ๋ผ๊ฐ ํ์ผ ์ญ์ --------- Co-authored-by: badahertz52 <[email protected]> * [BE] refactor: ๋ฐ์ํ๋ ๋ชจ๋ ์์ธ์ ํ์ ํต์ผ (#69) * refactor: ์ปค์คํ ์์ธ๋ฅผ ๋ฐ์์ํค๋๋ก ์์ * refactor: ๋ชจ๋ ์์ธ๋ฅผ ์ก์ ์ ์๋๋ก ์์ * refactor: ExceptionHandler๊ฐ ๋ฐํํ๋ ์์ธ ์๋ต ํ์ ๋ณ๊ฒฝ - ProblemDetail๋ก ๋ณ๊ฒฝ * refactor: ResponseEntityExceptionHandler๋ฅผ ์์ํ์ง ์๋๋ก ๋ณ๊ฒฝ * feat: ResponseEntityExceptionHandler์์ ์ฒ๋ฆฌํ๋ ์์ธ๋ฅผ ์ง์ ํธ๋ค๋ง * feat: CORS ์ค์ ์ถ๊ฐ (#88) * fix: ci PR ๋ธ๋์น ์ค์ (#92) * refactor: ์์ธ ํธ๋ค๋ฌ ์ธ์ ๋ณ๊ฒฝ (#87) * [BE] ๋๋ฉ์ธ ์ฐ๊ด๊ด๊ณ ์ฌ์ค์ (#97) * feat: ๊นํ๋ธ ์์ด๋ ์์๊ฐ ํฌ์ฅ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ํ์ `GithubId` ์ฌ์ฉ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ํค์๋ ๋ด ์ปฌ๋ผ ์์ (content) Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ์ผ๊ธ ์ปฌ๋ ์ ์ด๋ฆ ๋ณ๊ฒฝ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ์ง๋ฌธ ์ํฐํฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ๋ต๋ณ ๊ตฌ์กฐ ๋ณ๊ฒฝ, ๊ธธ์ด ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ํค์๋ ์ฐ๊ด๊ด๊ณ ์์ด ์ฐธ์กฐํ๋๋ก ์ค์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * test: ๋ต๋ณ ๊ธธ์ด ํ ์คํธ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ ์์ฑ ์ ํค์๋ ๋ฐ์์ ์์ฑ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * test: ๋ฆฌ๋ทฐ์ด์ ๋ฆฌ๋ทฐ์ด ๊ฐ์ ๊ฒฝ์ฐ์ ์์ธ ํ ์คํธ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: ๋ฆฌ๋ทฐ-ํค์๋ ๋งคํ ํ ์ด๋ธ ์ญ์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * fix: Fixture ์ฌ์ฉํด ์ปดํ์ผ ์๋ฌ ํด๊ฒฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ์ผ๋๋ค ํธ์ ๋ฉ์๋ ์์ฑ, Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๊นํ๋ธ ์์ด๋ ๊ทธ๋ฃน, ๋ฆฌ๋ทฐ์ด ์ฐ๊ด๊ด๊ณ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน - ๋ฆฌ๋ทฐ ์ผ๋๋ค ๋จ๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ ์ ์ฉ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน - ๋ฆฌ๋ทฐ ์ผ๋๋ค ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ ์ ์ฉ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ๊นํ๋ธ ์์ด๋ ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ์ ํ๋ฆฌ๋ทฐ ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: ์ฌ์ฉํ์ง ์๋ ํ์ผ ์ญ์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ ์ถ๊ฐ ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * fix: ์ํ ์ฐธ์กฐ NPE ํด๊ฒฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: Github ID ํจํค์ง ์ด๋ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * feat: ๋ฆฌ๋ทฐ - ๋ฆฌ๋ทฐ ๋ต๋ณ ์ฐ๊ด๊ด๊ณ ์ค์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * chore: ์ฌ์ฉํ์ง ์๋ ์ฝ๋ ์ ๊ฑฐ * refactor: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ์์ธ ๋ณด๊ธฐ ๊ตฌํ --------- Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * [FE] feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ๊ธฐ๋ฅ ๊ตฌํ (#89) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * chore: ํ์ฌ ์ฌ์ฉ๋์ง ์๋ ์ ์ฅ ๋ฒํผ ์จ๊น ์ฒ๋ฆฌ * design: ๊ธฐ๋ณธ ํฐํธ ์ฌ์ด์ฆ ๋ณ๊ฒฝ - 15px -> 16px๋ก ์์ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * design: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ์์ ๋ ๋์์ธ ์ ์ฉ - ์์ ์ฝ๋ ์์ - ๋ฒํผ ํธ๋ฒ ์ ์คํ์ผ๋ง ์์ - ๋ฆฌ๋ทฐ ๋ง๊ฐ์ผ ๋ ์ง ํ์ ๋ณ๊ฒฝ * design: ๋ฆฌ๋ทฐ ์ง๋ฌธ์ ์๋ด ๋ฌธ๊ตฌ ๋ฐ placeholder ์ถ๊ฐ - ๊ฐ ์ง๋ฌธ์ ' (20์ ์ด์)' ๋ฌธ๊ตฌ ํ๋์ฝ๋ฉ - ์ต๋ 1000์ ์ ๋ ฅ ๊ฐ๋ฅํ๋ค๋ ๋ฌธ๊ตฌ๋ฅผ textarea์ placeholder๋ก ์ถ๊ฐ * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * chore: api๋ช ๋ฐ endpoint๋ช ์์ * chore: ๋ฆฌ๋ทฐ ์ง๋ฌธ ๋ชฉ๋ก์ ์๋ฒ์์ ๋ฐ์์ค๊ธฐ ์ํด ์์ ์ ๊ฑฐ * chore: api ๋ฌธ์ ํ์์ ๋ง๊ฒ ๋ฐ์ดํฐ ํ์ ์์ * fix: ํค์๋ ๋ฒํผ์ ๋๋ ์ ๋ ํผ์ด ์ ์ถ๋๋ ๋ฌธ์ ํด๊ฒฐ * feat: ์์ฑํ ๋ฆฌ๋ทฐ ๋ด์ฉ์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ์ํ์ ๋๊ธฐํํ๋๋ก ์ค์ * design: textarea์ ํฌ๊ธฐ๋ฅผ ๊ณ ์ ์ํค๊ณ , ๋์ด๊ฐ ๊ฒฝ์ฐ ์คํฌ๋กค ๋๋๋ก ๋ณ๊ฒฝ * design: ๊ณตํต ๋ฒํผ ์ปดํฌ๋ํธ์ ์กฐ๊ฑด๋ถ ์คํ์ผ๋ง ๊ตฌํ * design: disabled ๊ด๋ จ ์์ ๋ณ์ ์ถ๊ฐ * feat: ๋ชจ๋ ํผ์ ์์ฑํ์ ๋ ์ ์ถ ๋ฒํผ์ด ํ์ฑํ๋๋๋ก ๊ตฌํ, ํค์๋ ์ ํ ๋ก์ง ๊ตฌํ * feat: ์ ์ถ ๋ฒํผ ํด๋ฆญ ์ confirm ๋ฐ์, ํ ๋ฒ ๋ ํ์ธ ์ ์ ์ถ๋๋๋ก ๊ตฌํ * feat: ํค์๋ ๋ฒํผ์ 5๊ฐ ์ด๊ณผํด์ ์ ํํ ์ ์๋๋ก ๊ตฌํ * feat: textarea์ 1000์๋ฅผ ์ด๊ณผํด์ ์ ๋ ฅํ ์ ์๋๋ก ๊ตฌํ ๋ฐ ํ์ฌ ๊ธ์์ ํ์ * fix: ์ด๋ฏธ ์ ํ๋ ํค์๋๋ฅผ ํด์ ํ๋ ค ํด๋ ๊ฐ์ ์ ํ๋๋ ์ค๋ฅ ์์ * refactor: ํผ ์ ํจ์ฑ ๊ฒ์ฌ ์กฐ๊ฑด๋ค์ ๋ณ์๋ก ๋ถ๋ฆฌ * design: ํค์๋ ๋ฒํผ๋ค์ ํฌ๊ธฐ๋ฅผ fit-content๋ก ๋ณ๊ฒฝ ๋ฐ ๊ฐ๋ก๋ก ๋์ดํ๋๋ก ์์ * chore: api ์ฐ๊ฒฐ ์ด์ , ์์๋ก ํผ ์ ๋ณด๋ฅผ ์ฝ์์ ์ถ๋ ฅํ๋๋ก ์ค์ * chore: ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ํ์ด์ง ๋ผ์ฐํฐ ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ํ์ด์ง ๋ฐ ์์ฑ ์๋ฃ ์ ํ์ด์ง ์ด๋ ๊ธฐ๋ฅ ๊ตฌํ * refactor: ๋ฆฌ๋ทฐ ์์ดํ ์ปดํฌ๋ํธ ๋งค์ง๋๋ฒ ์์ํ * chore: ์๊ณ ์์ด์ฝ ์คํ์ผ ์ปดํฌ๋ํธํ * refactor: ๋ฆฌ๋ทฐ ๊ด๋ จ ๋ฉ์์ง ์์ ๋ถ๋ฆฌ * design: ๋ฆฌ๋ทฐ ์์ฑ๋ placeholder ๋ฐ ๋ณธ๋ฌธ font weight ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ๋ฌธํญ ๋ฒํธ ๋์ ์ผ๋ก ๋ถ์ฌํ๋๋ก ๋ณ๊ฒฝ ๋ฐ ์์ํ ์ ์ฉ * refactor: on-, handle- prefix ๊ด๋ จ ์ปจ๋ฒค์ ์ ์ฉ ๋ฐ ํค์๋ ๋ฒํผ ์ธํฐํ์ด์ค ํ์ฅ * chore: ๋ฆฌ๋ทฐ ๋ต๋ณ์ ๊ธธ์ด๊ฐ ์ ํจํ์ง ์ฒดํฌํ๋ ๋ณ์์ ์ด๋ฆ์ ์๋ฏธ๋ฅผ ์ ๋๋ฌ๋ด๋๋ก ์์ * refactor: ๊ณตํต ๋ฒํผ์ ํ์ ๋ณ ์คํ์ผ์ ํจ์๋ก ๋ถ๋ฆฌ * style: api ํธ์ถ ํจ์๋ช ์ปจ๋ฒค์ ์ ๋ง๊ฒ ์์ * chore: ๋ถํ์ํ PropsWithChildren import ์ ๊ฑฐ --------- Co-authored-by: badahertz52 <[email protected]> * [FE] MSW๋ฅผ mock server๋ก ์ ํ (#95) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * style: eslint ์ ์ฉ์ ๋ฐ๋ฅธ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง import ์์ ์ ๋ฆฌ * refactor: formatDate๋ฅผ utils/date ํ์ผ๋ก ์ด๋ * design: theme์ colors,, fontSize ๋ณ๊ฒฝ ๋ฐ borderRadius ์ถ๊ฐ * feat: MultilineTextViewer ์ปดํฌ๋ํธ ์์ฑ - ๊ฐํ์ด ํฌํจ๋ string์ ๊ฐํ์ ์ ์ฉํด์ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ * feat: ๊นํ๋ธ ์ ์ฅ์ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ ์์ฑ * feat: ๋ฆฌ๋ทฐ์ ๊ด๋ จ๋ ๋ ์ง UI ์ปดํฌ๋ํธ ์์ฑ * featr: LockButton ์ญ์ LockToggle ์ถ๊ฐ * refactor: ํผ๊ทธ๋ง ๋์์ธ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ReviewDescription ๋ณ๊ฒฝ * feat: ReviewComment ์ปดํฌ๋ํธ ์์ฑ * refactor: ReviewViewSection -> ReviewSection ์ผ๋ก ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ๋ถํ์ํ ์ปดํฌ๋ํธ ์ญ์ : RevieAnswer , ReviewQuestion * refactor: DetailedReviewPage ๋ฆฌํฉํ ๋ง - ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ - ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ์ปดํฌ๋ํธ(DetailedReviewPage) ๋ฆฌํฉํ ๋ง - DetailedReviewPage ํด๋์ styles.ts ์ญ์ * refactor: review์ ๋ํ ํ์ ๋ณ๊ฒฝ * design : ReviewDate์ ํด๋ก ์คํ์ผ ์ ์ฉ * feat: KeywordSection ์ปดํฌ๋ํธ ์์ฑ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ํค์๋ ๋ถ๋ถ ์ปดํฌ๋ํธ ์์ฑ * feat: ReviewSectionHeader ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ์์ ๋ฐ๋ณต๋๋ ์ง๋ฌธ,ํค์๋ ํค๋๋ถ๋ถ์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌ * design : ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ width ๋ณ๊ฒฝ * refactor: DetailedReview์ ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํฐ ๋ณ๊ฒฝ - KeywordSection ์ ์ฉ * design : formWidth๋ฅผ theme์ ์ถ๊ฐ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ/๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ์ ์ฉ * fix: Layout์์ ๊ฐ๋ก ์คํฌ๋กค ์๊ธฐ๋ ์ค๋ฅ ์์ - 100vw๋ ์คํฌ๋กค์ ํฌํจํ ๋ทฐํฌํธ ๋๋น๋ผ์ 100%์ผ๋ก ์์ * feat: ๋ฆฌ๋ทฐ ์ํ์ด์ง router์ ๋ผ์ฐํฐ ํ๋ผ๋ฏธํฐ ์ ์ฉ ๋ฐ ๊ด๋ จ ์ค์ ๋ณ๊ฒฝ - ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์ํด ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง id๋ฅผ sidebar์ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ๋ฉ๋ด link์ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธํ์ด์ง(DetailedReviewPage)์ api ํธ๋ค๋ฌ ์์ * docs: ๋ณ์๋ช ๋ณ๊ฒฝ (isLock -> isPublic) * refactor: ๊นํ ์ ์ฅ์ ๋ก๊ณ ์ฃผ์ ๋ณ์๋ช ๋ณ๊ฒฝ - projectImgSrc -> thumbnailUrl * ci: msw ๊ด๋ จ ํจํค์ง ์ค์น * ci: msw ๊ด๋ จ ์ค์ ํ์ผ ์ถ๊ฐ - ๋ธ๋ผ์ฐ์ ํ๊ฒฝ, node ํ๊ฒฝ์์ msw๋ก ๋ชฉ์๋ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ด๋ จ ํ์ผ ์ถ๊ฐ * feat: mock ํธ๋ค๋ฌ ์ถ๊ฐ ๋ฐ ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง ๋ชฉ ๋ฐ์ดํฐ ์ถ๊ฐ * feat: root์์ ๋ชฉ์๋ฒ ์ฌ์ฉํ ์ ์๋๋กํจ * refactor: endpoint ์์ - env ์์ ์๋ฒ ์ฃผ์ ๋์ ์ฌ๋์ ๋ฃ๋ ๊ฒ์ผ๋ก ํต์ผ * feat: ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง(detailedReviewPage)์ ๋ชฉ์๋ฒ ์ฐ๊ฒฐ ๋ฐ ๊ด๋ จ ์ฝ๋ ์์ - ์ํ๋ช ๋ณ๊ฒฝ: detailReview -> detailedReview - detailedReview ํ์ ์ null ์ถ๊ฐ ๋ฐ ๊ทธ์ ๋ฐ๋ฅธ ์ค๋ฅ ํธ๋ค๋ง ์ถ๊ฐ - deadline์ string ํ์ ์ผ๋ก response๋ก ์ ๋ฌ๋์ด์ new Date๋ก ๊ฐ์ธ์ props๋ก ์ ๋ฌ * docs: indexhtml์ title ๋ณ๊ฒฝ * style: apis/review.ts ์ import ๊ด๋ จ eslint rule ์ ์ฉ์ ๋ฐ๋ฅธ ์์ * fix: ts์์ process ์ฝ์ง ๋ชปํ๋ ์ค๋ฅ ์์ * fix: webpack dev server script ๋ณต์ * [FE] ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง : url router ์ฐ๋, ๋ณ๊ฒฝ๋ ๋์์ธ ๋ฐ์ ๋ฐ ์๋ฒ์์ api๋ฅผ ์ฐ๋ (#91) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * style: eslint ์ ์ฉ์ ๋ฐ๋ฅธ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง import ์์ ์ ๋ฆฌ * refactor: formatDate๋ฅผ utils/date ํ์ผ๋ก ์ด๋ * design: theme์ colors,, fontSize ๋ณ๊ฒฝ ๋ฐ borderRadius ์ถ๊ฐ * feat: MultilineTextViewer ์ปดํฌ๋ํธ ์์ฑ - ๊ฐํ์ด ํฌํจ๋ string์ ๊ฐํ์ ์ ์ฉํด์ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ * feat: ๊นํ๋ธ ์ ์ฅ์ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ ์์ฑ * feat: ๋ฆฌ๋ทฐ์ ๊ด๋ จ๋ ๋ ์ง UI ์ปดํฌ๋ํธ ์์ฑ * featr: LockButton ์ญ์ LockToggle ์ถ๊ฐ * refactor: ํผ๊ทธ๋ง ๋์์ธ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ReviewDescription ๋ณ๊ฒฝ * feat: ReviewComment ์ปดํฌ๋ํธ ์์ฑ * refactor: ReviewViewSection -> ReviewSection ์ผ๋ก ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ๋ถํ์ํ ์ปดํฌ๋ํธ ์ญ์ : RevieAnswer , ReviewQuestion * refactor: DetailedReviewPage ๋ฆฌํฉํ ๋ง - ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ - ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ์ปดํฌ๋ํธ(DetailedReviewPage) ๋ฆฌํฉํ ๋ง - DetailedReviewPage ํด๋์ styles.ts ์ญ์ * refactor: review์ ๋ํ ํ์ ๋ณ๊ฒฝ * design : ReviewDate์ ํด๋ก ์คํ์ผ ์ ์ฉ * feat: KeywordSection ์ปดํฌ๋ํธ ์์ฑ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ํค์๋ ๋ถ๋ถ ์ปดํฌ๋ํธ ์์ฑ * feat: ReviewSectionHeader ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ์์ ๋ฐ๋ณต๋๋ ์ง๋ฌธ,ํค์๋ ํค๋๋ถ๋ถ์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌ * design : ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ width ๋ณ๊ฒฝ * refactor: DetailedReview์ ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํฐ ๋ณ๊ฒฝ - KeywordSection ์ ์ฉ * design : formWidth๋ฅผ theme์ ์ถ๊ฐ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ/๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ์ ์ฉ * fix: Layout์์ ๊ฐ๋ก ์คํฌ๋กค ์๊ธฐ๋ ์ค๋ฅ ์์ - 100vw๋ ์คํฌ๋กค์ ํฌํจํ ๋ทฐํฌํธ ๋๋น๋ผ์ 100%์ผ๋ก ์์ * feat: ๋ฆฌ๋ทฐ ์ํ์ด์ง router์ ๋ผ์ฐํฐ ํ๋ผ๋ฏธํฐ ์ ์ฉ ๋ฐ ๊ด๋ จ ์ค์ ๋ณ๊ฒฝ - ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์ํด ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง id๋ฅผ sidebar์ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ๋ฉ๋ด link์ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธํ์ด์ง(DetailedReviewPage)์ api ํธ๋ค๋ฌ ์์ * docs: ๋ณ์๋ช ๋ณ๊ฒฝ (isLock -> isPublic) * refactor: ๊นํ ์ ์ฅ์ ๋ก๊ณ ์ฃผ์ ๋ณ์๋ช ๋ณ๊ฒฝ - projectImgSrc -> thumbnailUrl * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง api ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง keyword ํ์ ๋ณ๊ฒฝ - api endpoint ๋ณ๊ฒฝ , router ๋ณ๊ฒฝ, sidebar ์์ธ๋ณด๊ธฐ ๊ฒฝ๋ก ๋ณ๊ฒฝ - useState์ ๋น ๊ฐ์ ๋ํ ํ์ ์ถ๋ก ์ฌ์ฉ * [BE] test: ๋๋ฉ์ธ ์ฐ๊ด๊ด๊ณ ์ฌ์ค์ ํ ํ ์คํธ ์์ฑ (#101) * test: ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ํ ์คํธ ์์ฑ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ ์คํธ๋ฅผ `ReviewTest`๋ก ์ด๋ * test: ๋ฆฌ๋ทฐ์ด ์ค๋ณต ์ถ๊ฐ ํ ์คํธ * refactor: Test Fixture ์ฌ์ฉํ๋๋ก ์์ * refactor: ์์ธ ํด๋์ค๋ช ํต์ผ * style: ํ ์คํธ ๊ฐํ * refactor: ํ ์คํธ๋ช ๋ช ํํ๊ฒ ์์ * refactor: ํ์ ๋๋ฉ์ธ์์์ ๋น๊ต๋ฅผ GithubId๋ก ์งํํ๋๋ก ์์ * refactor: createdAt ์ฌ์ฉํ์ง ์๊ณ , deadline์ผ๋ก ์์ * refactor: ํ๋๋ช reviewerGithubIds๋ก ํต์ผ * test: ๋ฆฌ๋ทฐ์ด ์ค๋ณต ์์ฑ ๊ฒ์ฆ * refactor: reviewer/reviewee ํต์ผ * refactor: ๋ฆฌ๋ทฐ์ด-๋ฆฌ๋ทฐ์ด github id๋ฅผ ๋ช ์ * refactor: ํ ์คํธ์ ํ๋์ ๊ฒ์ฆ๋ง ์งํ๋๋๋ก ์์ * [FE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง ๊ธฐ๋ฅ ๊ตฌํ (#90) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * feat: DropDown ์ปดํฌ๋ํธ ๊ตฌํ - ์ฌ์ฉ์ ์ ํ์ ์ํ `DropDown` ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํ - `onChange` ์ด๋ฒคํธ ํธ๋ค๋ฌ์ `options` ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ์ต์ ์ ๋์ ์ผ๋ก ํ์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: svg ์์ด์ฝ ํฌ๊ธฐ ์์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * design: Topbar UI ์์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * design: ๋ฒํผ, ๊ฒ์์ฐฝ UI ์์ ํ export Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * feat: ReviewPreviewCard ์ปดํฌ๋ํธ ๊ตฌํ - ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋ ์ปดํฌ๋ํธ ๊ตฌํ - ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ด๋ฆ, ์์ฑ์ผ, ๋ฆฌ๋ทฐ ๋ด์ฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ํค์๋, ๊ณต๊ฐ ์ฌ๋ถ๋ฅผ ํ์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: ReviewPreview ์ธํฐํ์ด์ค ์ถ๊ฐ - ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ `ReviewPreview` ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํ์ต๋๋ค. Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * feat: SearchSection ์ปดํฌ๋ํธ ๊ตฌํ - ๊ฒ์ ์ ๋ ฅ์ฐฝ, ๊ฒ์ ๋ฒํผ, ๋๋กญ๋ค์ด์ ํฌํจํ์ฌ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * feat: ReviewPreviewListPage ๊ตฌํ ๋ฐ ๋ชจ์ ๋ฐ์ดํฐ ์ถ๊ฐ - `ReviewPreviewListPage` ์ปดํฌ๋ํธ ๊ตฌํ - `SearchSection`์ ํฌํจํ์ฌ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํ - `ReviewPreviewCard`๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ํ์ - ๋ชจ์ ๋ฐ์ดํฐ(`mockReviewPreviews`) ์ถ๊ฐ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: import ์ค๋ณต ๋ฐ ์์ ์ ๋ฆฌ, ReviewPreviewListPage ๋ผ์ฐํธ ์ถ๊ฐ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: ์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ๊ฐ์ธ๊ธฐ ๋๋ฌธ์ Container๋ก ๋ณ๊ฒฝ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ๊ฐ์ ธ์ค๊ธฐ ์ํด getReviewListApi ํจ์ ์ถ๊ฐ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * refactor: ์์ธ ๋ฆฌ๋ทฐ ๋ถ๋ฌ์ค๊ธฐ api ์๋ํฌ์ธํธ ์์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * refactor: ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง API ์ฐ๋ ๋ถ๋ถ ์์ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: badahertz52 <[email protected]> Co-authored-by: ImxYJL <[email protected]> Co-authored-by: Fe <[email protected]> * [BE] feat: ๋ฆฌ๋ทฐ ์์ฑ API ๊ตฌํ (#102) * refactor: ๋ฆฌ๋ทฐ ์์ฒญ dto ์์ * refactor: ๋ฆฌ๋ทฐ ์ฝํ ์ธ ์์ฑ ์, ๋ฆฌ๋ทฐ์ ์์ ์ ์ถ๊ฐํ๋๋ก ๋ณ๊ฒฝ * feat: QuestionRepository ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ์์ฑ ๊ธฐ๋ฅ ์ถ๊ฐ * test: ๋ฆฌ๋ทฐ ์์ฑ ํ ์คํธ ์ถ๊ฐ * refactor: ReviewGroup ์์ฑ ์, GithubIdReviewerGroup๋ ๊ฐ์ด ์ ์ฅ๋๋๋ก ๋ณ๊ฒฝ * refactor: GithubId equals ๋ฐ hashcode ์ฌ์ ์ * refactor: review ์์ฑ ์, reviewGroup์ด null์ด ์๋๋๋ก ๋ณ๊ฒฝ * refactor: EqualsAndHashCode์ id ๋ช ์ * refactor: reviewee๋ฅผ reviewerGroup ํตํด์ ๋ฐ์์ค๋๋ก ๋ณ๊ฒฝ * refactor: ํ๋ผ๋ฏธํฐ long ํ์ ์ผ๋ก ๋ณ๊ฒฝ * test: ์ฌ์ฉํ์ง ์๋ ๋ณ์ ์ ๊ฑฐ * test: ํ๋ผ๋ฏธํฐ๋ณ๋ก ๊ฐํํ๋๋ก ๋ณ๊ฒฝ * refactor: ReviewerGroupGithubIds์ reviewerGithubIds๋ฅผ CascadeType.PERSIST๋ก ๋ณ๊ฒฝ * chore: ๋ค๋ฅธ ์์ ์์ ์งํ๋ ์ฌํญ์ผ๋ก ์ฌ์ฉํ์ง ์๋ ํ ์คํธ ์ญ์ * [FE] Github Actions๋ก CI ๊ตฌ์ถ (#96) * ci: CI๋ฅผ ์ํ yml ํ์ผ ์์ฑ * ci: yarn.lock ๊ฒฝ๋ก ์ถ๊ฐ * ci: working-directory ์ถ๊ฐ * cI: ๋์ ํ ์คํธ๋ฅผ ์ํด push ๋ธ๋์น ๊ฒฝ๋ก ์กฐ๊ฑด์์ frontend ์์ ์ ๊ฑฐ * ci: ํ ์คํธ๋ฅผ ์ํด ํ์ฌ ๋ธ๋์น๋ ์กฐ๊ฑด์ ์ถ๊ฐ * ci: package์ test ๋ช ๋ น์ด ์ถ๊ฐ * ci: yarn.lock ํ์ผ ์ ๋ฐ์ดํธ * ci: ํ ์คํธ ํ์ผ ํ์ ์์ * chore: ํ์์๋ ํ์ผ ์ญ์ * chore: svg ํ์ผ์ ๋๋ฌธ์๋ก importํ ๊ฒ๋ค ์๋ฌธ์๋ก ์์ * ci: ์นํฉ env ์ค์ ์ ๋ฐ์ดํธ * ci: process.env ์ฌ์ฉ์ ์ํ ํ์ ์ค์ * ci: env ์นํฉ ์ค์ ๊ฒฝ๋ก๋ฅผ ์ ๋ ๊ฒฝ๋ก๋ก ๋ณ๊ฒฝ * ci: env ์นํฉ ์ค์ ๊ฒฝ๋ก ์์ * ci: env ์ ๋๊ฒฝ๋ก ์์ * ci: ์ ๋๊ฒฝ๋ก ์์ 2 * ci: ์ฝ๊ธฐ ๊ถํ์ ๋ช ์์ ์ผ๋ก ์ฃผ๊ณ ํ ์คํธ * ci: dist ํ์ผ ํ ์คํธ * ci: CI ํ๊ฒฝ์์๋ env ํ์ผ ์์ฑ * ci: ๋ฐฐํฌ ์ ์ ๋์ ํ์ธ์ ์ํ github pages ์์ ๋ฐฐํฌ ์ค์ * ci: ์์ ๋ฐฐํฌ ์ฝ๋ ์ญ์ * ci: develop ๋ธ๋์น๋ก frontend ์ดํ ๊ฒฝ๋ก์์ PR์ด ์ฌ๋ผ์ฌ ๋ CI๊ฐ ์คํ๋๋๋ก ์์ * ci: node ์ค์น ์๋ฌ ํด๊ฒฐ * [BE] feat: ๋ฆฌ๋ทฐ์ ํ์ํ ์ ๋ณด ์กฐํ ๊ธฐ๋ฅ ์ถ๊ฐ (#103) * test: QuestionTestFixture ์์ฑ * feat: ๋ชจ๋ ๋ฆฌ๋ทฐ ๋ฌธํญ์ ์กฐํํ๋ ๊ธฐ๋ฅ ๊ตฌํ * feat: ๋ชจ๋ ํค์๋๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ ๊ตฌํ * test: ReviewerGroupFixture ์์ฑ * feat: ๋ฆฌ๋ทฐ ์์ฑ ์ ํ์ํ ๋ฆฌ๋ทฐ์ด ๊ทธ๋ฃน ์ ๋ณด๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ ๊ตฌํ * feat: ๋ฆฌ๋ทฐ ์์ฑ ์ ํ์ํ ์ ๋ณด๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ ๊ตฌํ * refactor: @ServiceTest ์ ์ฉ * refactor: swagger ์ ์ฉ * refactor: ํ๋๋ช ๋ณ๊ฒฝ * style: ๊ฐํ ์ถ๊ฐ * refactor: ๋ ์ง ํ์ ๋ณ๊ฒฝ * test: import๋ฌธ ์ ๊ฑฐ * refactor: ReviewCreationResponse ํจํค์ง ๋ณ๊ฒฝ * refactor: readOnly ํธ๋์ญ์ ์ ์ฉ * fix: ๋ฆฌ๋ทฐ์ด ์ค๋ณต ๊ฒ์ฆ ์์ ์ ๊ฑฐ --------- Co-authored-by: donghoony <[email protected]> * [FE] ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์์ MSW๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ mocking (#111) * chore: ์ค๋ณต๋ ์ธํฐํ์ด์ค ์ ๊ฑฐ * feat: MSW ํธ๋ค๋ฌ ๋ฐ mock data ์ถ๊ฐ * chore: ๋ฆฌ๋ทฐ ์ฐ๊ธฐ ํ์ด์ง ๋ฐ์ดํฐ endpoint ์์ * feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ msw๋ฅผ ์ ์ฉํ์ฌ ์๋ฒ mocking * merge * [FE] ๊ณตํต ์ปดํฌ๋ํธ์ธ ๋ชจ๋ฌ์ ๋ง๋ ๋ค. (#110) * fix: stylelint๋ฅผ ํตํ css ์์ฑ ์ ๋ ฌ ๊ธฐ๋ฅ ์ค๋ฅ ์์ - stylelint ๋ฒ์ 16๊ณผ ์ถฉ๋๋๋ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-prettier, stylelint-prettier - css ์ ๋ ฌ์ ํ์ํ์ง ์์ ํ๋ฌ๊ทธ์ธ ์ญ์ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin - ์ถ๊ฐ๋ก ์ค์นํ ํ๋ฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js - stylelint ์ ์ฉ script ์ถ๊ฐ - .stylelintrc.json ์์ : css ๊ด๋ จ rule ์ค์ * refactor: stylelint ์ ์ฉ์ ๋ฐ๋ฅธ css ์์ฑ ์ ๋ ฌ * fix : ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉ ์ ์ค๋ฅ ์์ ์ค๋ฅ : eslintimport/no-unresolved * chore: eslintrc.cjs ์์ ๋ถํ์ํ ์ฝ๋ ์ญ์ node ํ๊ฒฝ setting ์ญ์ * style: eslint ์ ์ฉ์ ๋ฐ๋ฅธ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง import ์์ ์ ๋ฆฌ * refactor: formatDate๋ฅผ utils/date ํ์ผ๋ก ์ด๋ * design: theme์ colors,, fontSize ๋ณ๊ฒฝ ๋ฐ borderRadius ์ถ๊ฐ * feat: MultilineTextViewer ์ปดํฌ๋ํธ ์์ฑ - ๊ฐํ์ด ํฌํจ๋ string์ ๊ฐํ์ ์ ์ฉํด์ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ * feat: ๊นํ๋ธ ์ ์ฅ์ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ ์์ฑ * feat: ๋ฆฌ๋ทฐ์ ๊ด๋ จ๋ ๋ ์ง UI ์ปดํฌ๋ํธ ์์ฑ * featr: LockButton ์ญ์ LockToggle ์ถ๊ฐ * refactor: ํผ๊ทธ๋ง ๋์์ธ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ReviewDescription ๋ณ๊ฒฝ * feat: ReviewComment ์ปดํฌ๋ํธ ์์ฑ * refactor: ReviewViewSection -> ReviewSection ์ผ๋ก ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ๋ถํ์ํ ์ปดํฌ๋ํธ ์ญ์ : RevieAnswer , ReviewQuestion * refactor: DetailedReviewPage ๋ฆฌํฉํ ๋ง - ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ - ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ์ปดํฌ๋ํธ(DetailedReviewPage) ๋ฆฌํฉํ ๋ง - DetailedReviewPage ํด๋์ styles.ts ์ญ์ * refactor: review์ ๋ํ ํ์ ๋ณ๊ฒฝ * design : ReviewDate์ ํด๋ก ์คํ์ผ ์ ์ฉ * feat: KeywordSection ์ปดํฌ๋ํธ ์์ฑ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ํค์๋ ๋ถ๋ถ ์ปดํฌ๋ํธ ์์ฑ * feat: ReviewSectionHeader ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ์์ ๋ฐ๋ณต๋๋ ์ง๋ฌธ,ํค์๋ ํค๋๋ถ๋ถ์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌ * design : ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ width ๋ณ๊ฒฝ * refactor: DetailedReview์ ๋ชฉ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ฐ ๋ฆฌํฉํ ๋ง - ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํฐ ๋ณ๊ฒฝ - KeywordSection ์ ์ฉ * design : formWidth๋ฅผ theme์ ์ถ๊ฐ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ/๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ์ ์ฉ * fix: Layout์์ ๊ฐ๋ก ์คํฌ๋กค ์๊ธฐ๋ ์ค๋ฅ ์์ - 100vw๋ ์คํฌ๋กค์ ํฌํจํ ๋ทฐํฌํธ ๋๋น๋ผ์ 100%์ผ๋ก ์์ * feat: ๋ฆฌ๋ทฐ ์ํ์ด์ง router์ ๋ผ์ฐํฐ ํ๋ผ๋ฏธํฐ ์ ์ฉ ๋ฐ ๊ด๋ จ ์ค์ ๋ณ๊ฒฝ - ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์ํด ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง id๋ฅผ sidebar์ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง ๋ฉ๋ด link์ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธํ์ด์ง(DetailedReviewPage)์ api ํธ๋ค๋ฌ ์์ * docs: ๋ณ์๋ช ๋ณ๊ฒฝ (isLock -> isPublic) * refactor: ๊นํ ์ ์ฅ์ ๋ก๊ณ ์ฃผ์ ๋ณ์๋ช ๋ณ๊ฒฝ - projectImgSrc -> thumbnailUrl * ci: msw ๊ด๋ จ ํจํค์ง ์ค์น * ci: msw ๊ด๋ จ ์ค์ ํ์ผ ์ถ๊ฐ - ๋ธ๋ผ์ฐ์ ํ๊ฒฝ, node ํ๊ฒฝ์์ msw๋ก ๋ชฉ์๋ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ด๋ จ ํ์ผ ์ถ๊ฐ * feat: mock ํธ๋ค๋ฌ ์ถ๊ฐ ๋ฐ ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง ๋ชฉ ๋ฐ์ดํฐ ์ถ๊ฐ * feat: root์์ ๋ชฉ์๋ฒ ์ฌ์ฉํ ์ ์๋๋กํจ * refactor: endpoint ์์ - env ์์ ์๋ฒ ์ฃผ์ ๋์ ์ฌ๋์ ๋ฃ๋ ๊ฒ์ผ๋ก ํต์ผ * feat: ์์ธ ๋ฆฌ๋ทฐ ํ์ด์ง(detailedReviewPage)์ ๋ชฉ์๋ฒ ์ฐ๊ฒฐ ๋ฐ ๊ด๋ จ ์ฝ๋ ์์ - ์ํ๋ช ๋ณ๊ฒฝ: detailReview -> detailedReview - detailedReview ํ์ ์ null ์ถ๊ฐ ๋ฐ ๊ทธ์ ๋ฐ๋ฅธ ์ค๋ฅ ํธ๋ค๋ง ์ถ๊ฐ - deadline์ string ํ์ ์ผ๋ก response๋ก ์ ๋ฌ๋์ด์ new Date๋ก ๊ฐ์ธ์ props๋ก ์ ๋ฌ * docs: indexhtml์ title ๋ณ๊ฒฝ * style: apis/review.ts ์ import ๊ด๋ จ eslint rule ์ ์ฉ์ ๋ฐ๋ฅธ ์์ * fix: ts์์ process ์ฝ์ง ๋ชปํ๋ ์ค๋ฅ ์์ * fix: webpack dev server script ๋ณต์ * feat: ModalPortal ์ ์ฑ * feat: SideModal ์ปดํฌ๋ํธ, useSide ์ ์ฑ ๋ฐ Sidebar์ ์ ์ฉ * feat: ModalBackground ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ ์ฉ * fix: ๋ชจ๋ฌ ์ด๋ฆด ๋ ์คํฌ๋กค๋ฐ ๋ง๋ ๊ธฐ๋ฅ ์ค๋ฅ ์์ * design : ModalPortal ์ฌ์ด์ฆ ๋จ์ ๋ณ๊ฒฝ (% -> vw, vh) * feat: Button ์ปดํฌ๋ํธ๊ฐ button ์์ฑ์ props๋ก ๋ฐ์ ์ ์๋๋ก ์์ * feat: ConfirmModal ์์ฑ * refactor: index.tsx์์ ๋ชจ๋ฌ์ ๊บผ๋ผ ์ ์๋๋ก ๋ฆฌํฉํ ๋ง * refactor: PropsWithChildren ์์ - PropsWithChildren๋ฅผ import ํ์ง ์๊ณ React์์ ๋ฐ๋ก ์ธ ์ ์๋๋ก React.PropsWithChildren๋ก ์์ * [FE] msw๊ด๋ จ env ์ค๋ฅ ํด๊ฒฐ (#114) * chore: fe/feat/105-review-writing-msw ์ endpoint ๊ด๋ จ ๋ณ๊ฒฝ์ฌํญ ๋ฐ์ * fix: NODE_ENV ๊ด๋ จ ์ค๋ฅ ์์ - ์ค๋ฅ : env ํ์ผ์ NODE_ENV๊ฐ ์์์๋ ์ด๋ฅผ ์ธ์ํ๋ ์ค๋ฅ ๋ฐ์ - ์์ธ: ํ๋ ์์ํฌ์์ NODE_ENV๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ๋ ์๋ค๊ณ ํจ - ํด๊ฒฐ: NODE_ENV๋ฅผ ์ญ์ ํ๊ณ MSW๋ฅผ ์ฌ์ฉ * [BE] feat: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ (#109) * refactor: contains ์๋์ ์ํ EqualsAndHashcode ์ถ๊ฐ * fix: lazyInitialization ํด๊ฒฐ * feat: ์ง๋ฌธ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ * feat: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ์๋ต ์์ฑ * refactor: ๋ฆฌ๋ทฐ ํญ๋ชฉ๊ณผ ์ง๋ฌธ์ ์ฐ๊ด๊ด๊ณ ๋ณ๊ฒฝ ๋ฐ ๋ต๋ณ ์ต๋ ๊ธ์์ DB์ ๋ฐ์ * refactor: ๋ฆฌ๋ทฐ์ ๋ฆฌ๋ทฐ๊ทธ๋ฃน ์ด๊ธฐํ ๋ถ๋ถ ์ถ๊ฐ * feat: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ * feat: ๋ฐ์ ๋ฆฌ๋ทฐ๊ฐ ์์ ๋์ ์๋ต ์ถ๊ฐ * refactor: dto ์ค๋ช ์ถ๊ฐ * refactor: dto ์ค๋ช ์์ * refactor: ์ธ์ ํ์ ์์ , ๊ฐํ ์์ * refactor: transactional ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ์กฐํํ ๋Page๊ฐ์ฒด ๋ง๊ณ List๋ก ๋ฐ์์ค๋๋ก ์์ * refactor: ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ง๋๋ ๊ธฐ๋ฅ ๋๋ฉ์ธ ์์ผ๋ก ์ด๋ * test: ํ ์คํธ ์ฝ๋ ๊ฐ์ - ๋ณ์๋ช ์์ , save ์ฌ๋ฌ๊ฐ ๋์ saveAll ์ฌ์ฉ ๋ฑ * refactor: ๋ง์ง๋ง์ผ๋ก ๋ณธ ๋ฆฌ๋ทฐID๊ฐ ์๋ ๋ก์ง์ ๋ํด ์์ - lastViewedReviewId๋ฅผ ์ ๋ ฅํ์ง ์์ผ๋ฉด 999๊ฐ์ด ์ด์ํ๊ฒ ํฐ ์๋ฅผ ๋ฃ์ด์ฃผ๋๊ฒ ์๋๋ผ, ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฃ์ด์ฃผ๋๋ก ์์ * docs: ์ค์จ๊ฑฐ ๋ฐ์ฝ๋ ์ด์ ์ ์ฉ * refactor: lastReviewId๊ฐ null ์ด์ด๋ ๊ฐ์ฅ ์ต์ ๋ฆฌ๋ทฐ๋ฅผ ์ฐพ์ ์ ์๋๋ก ์์ * refactor: eqaulsAndHashCode ์ฌ์ ์ * refactor: eqaulsAndHashCode ์ฌ์ฌ์ ์ * refactor: API Docs ๋ฐ์ --------- Co-authored-by: donghoony <[email protected]> * fix: ์๋ชป ์ ์๋ endpoint ์์ (#118) * [FE] ๋จธ์ง๋ก ์ธํด ์ฌ๋ผ์ง ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ณ๊ฒฝ ์ฌํญ ๋ณต๊ตฌ ๋ฐ ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ (#121) * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ ๋ฐ Keyword ํ์ ๋ณต๊ตฌ * fix: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ path ๋ณต๊ตฌ * fix: ์ฌ์ด๋๋ฐ์ ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๊ฒฝ๋ก ๋ณต๊ตฌ * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํฐ ๋ณ๊ฒฝ * fix: DetailedReviewPage ๋ณต๊ตฌ ๋ฐ ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ * [BE] ๋๋ฏธ ๋ฐ์ดํฐ ์ถ๊ฐ, local ํ๋กํ์ผ ๊ด๋ฆฌ (#123) * refactor: Unauthorized ์์ธ ์ฒ๋ฆฌ * chore: ๋๋ฏธ ๋ฐ์ดํฐ ์ถ๊ฐ ๋ฐ Profile ์ฒ๋ฆฌ * chore: ํ ์คํธ yml ์์ฑ * fix: Long notblank -> notnull (#126) * [FE] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์์ msw๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจํน (#124) * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์์ msw๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจํน Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: ์๋ํฌ์ธํธ baseurl์ '/' ์ถ๊ฐ Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: badahertz52 <[email protected]> Co-authored-by: ImxYJL <[email protected]> Co-authored-by: Fe <[email protected]> * fix: ๋ฆฌ๋ทฐ ๋ชฉ๋ก DTO ํ๋ ์์ (#129) * [FE] msw ๋ชจํน์ ์ํ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ ํ๋์ฝ๋ฉ (#130) * refactor: msw ๋ชจํน์ ์ํ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ ํ๋์ฝ๋ฉ Co-Authored-By: ImxYJL <[email protected]> * refactor: 2์ฐจ ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์ํ ๋ฉค๋ฒ ์์ด๋ ์์ํ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: Fe <[email protected]> * chore: ๋ถํ์ํ ์ฝ์ ๋ก๊ทธ ์ ๊ฑฐ Co-Authored-By: ImxYJL <[email protected]> Co-Authored-By: badahertz52 <[email protected]> Co-Authored-By: Fe <[email protected]> --------- Co-authored-by: ImxYJL <[email protected]> Co-authored-by: badahertz52 <[email protected]> Co-authored-by: Fe <[email protected]> * [FE] endPoint ์ค๋ฅ์ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ด๋ ์์ (#132) * fix: endpoint ์ค๋ฅ ์์ * fix: ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ ๋ฐ์ดํฐ ๋ฐ์ ๋์ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ด๋๋ฅผ 1๋ก ์์ * [BE] fix: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์์ฑ ๊ธฐ๋ฅ ์์ (#134) * fix: src/index.tsx์์ enableMocking ์ ๊ฑฐ (#136) * [FE] Children ์์ฑ์ด ํ์์ธ ํ์ ์ ์ (#147) * feat: children ์์ฑ์ด ํ์์ธ EssentialPropsWithChildren ํ์ ์์ฑ * chore: types ํด๋์ index ํ์ผ์ ๋๋ฝ๋๋ export๋ค ์ถ๊ฐ ๋ฐ ๊ทธ์ ๋ฐ๋ฅธ types import๋ฌธ ๊ฒฝ๋ก ์์ * [FE] ์ฌ์ด๋๋ฐ ๋ฐ ๋ชจ๋ฌ ์ฌ์ฉ์ฑ ๊ฐ์ (#139) * refactor: ์ฌ์ด๋๋ฐ๋ฅผ ๋ซ๋ ์ ๋๋ฉ์ด์ ์ ๊ฑฐ * refactor: ์ฌ์ด๋๋ฐ๊ฐ ๋ ๋นจ๋ฆฌ ์ด๋ฆฌ๋๋ก ์์ * feat: ๋ชจ๋ฌ์ ๋ฐฐ๊ฒฝ ํด๋ฆญ ๋ฐ esc ํค๋ฅผ ๋๋ ์ ๋ ๋ชจ๋ฌ์ด ๋ซํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ * chore: hooks index์ useModalClose ์ถ๊ฐ * feat: ์ฌ์ด๋๋ฐ ๋ฆฌ์คํธ ์์ดํ ์ ํด๋ฆญํ์ ๋ ์ฌ์ด๋๋ฐ๊ฐ ๋ซํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: useModalClose ํ ์ ๋ชจ๋ ๋ชจ๋ฌ์ ๊ณตํต ์ต์์ ์ปดํฌ๋ํธ์ธ ModalBackground์์ ์ฒ๋ฆฌํ๋๋ก ์์ * refactor: ModalBackground๋ฅผ ํด๋ฆญํ์ ๋ ๋ชจ๋ฌ์ด ๋ซํ๊ฒ ํ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ document ๋์ Background์ ์ถ๊ฐ * fix: esc๋ฅผ ์ฌ์ฉํด ๋ชจ๋ฌ์ ๋ซ์์ ๋ ํ๋ฒ๊ฑฐ ๋ฒํผ์ ํฌ์ปค์ค๊ฐ ์๊ธฐ๋ ๋ฌธ์ ํด๊ฒฐ ๋ฐ ๋ณ์๋ช ๋์๋ฌธ์ ์์ * refactor: useEffect ๋ด๋ถ ํจ์๋ค์ ํ ์ธ๋ถ๋ก ์ด๋ ๋ฐ ์ฃผ์ ์ถ๊ฐ * [FE] ์กด์ฌํ์ง ์๋ element์ ๋ํ ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋ ์ ํธ๋ฆฌํฐ ํจ์ ์ ์ (#150) * feat: ์กด์ฌํ์ง ์๋ element์ ๋ํ ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋ ํ ์ ์ * chore: hooks ํด๋ index์ useExistentElement ์ถ๊ฐ * refactor: useExistentElement ํ ์ ๋์ฑ ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์์ * refactor: ์กด์ฌํ์ง ์๋ ์์๋ฅผ ํ๋ณํ๋ ๋์์ ์ปค์คํ ํ ๋์ ์ ํธ๋ฆฌํฐ ํจ์๋ก ์ ์ * chore: ๊ธฐ์กด์ ์กด์ฌํ์ง ์๋ ์์๋ฅผ ํ์งํ๋ ์ปค์คํ ํ ์ญ์ * [FE] HTTP ์์ฒญ ์ค๋ฅ ์ status code๋ณ ์ค๋ฅ ์ํฉ์ ๋์ํ๋ ํจ์ ์์ฑ (#151) * feat: api ์๋ฌ ์ ํ์ํ ๋ฉ์ธ์ง ์์ฑ ํจ์ ์ถ๊ฐ * refactor: api/review.ts์ api ์ค๋ฅ ์ ๋ฉ์ธ์ง๋ฅผ ๋ฐํํ๋ createApiErrorMessage ํจ์ ์ ์ฉ * docs: http ์์ฒญ ์คํจ ๋ฉ์ธ์ง ์์ * fix: ์คํ ์์ * [FE] ํ์ด์ง ์๋จ ์ด๋ ๋ฒํผ ๊ตฌํ (#153) * feat: top button ๋ก์ง ํ ์ผ๋ก ๊ตฌํ * design: top button UI ๊ตฌํ * chore: ๊ฐ ํ์ด์ง๋ง๋ค top button์ด ๋ณด์ฌ์ง๋๋ก ์ค์ * chore: ์ปดํฌ๋ํธ default๋ก exportํ๋๋ก ์ค์ * refactor: handler๋ฅผ useEffect ์ธ๋ถ๋ก ๋ถ๋ฆฌ * chore: svg import ์ปจ๋ฒค์ ์ ๋ง์ถ์ด ์ด๋ฆ ์์ * [FE] feat: ์๋ฌ, ๋ก๋ฉ ํ์ด์ง ๊ตฌํ ๋ฐ ์ ์ฉ (#155) * feat: ๋ฒํผ ์ปดํฌ๋ํธ์ ์์ด์ฝ์ ์ ํ์ ์ผ๋ก ์ถ๊ฐํ ์ ์๋๋ก ๋ณ๊ฒฝ - `icon` prop์ ํตํด ๋ฒํผ์ ์์ด์ฝ์ ์ถ๊ฐํ ์ ์๋๋ก ๋ณ๊ฒฝ * feat: ์๋ฌ ํ์ด์ง๋ฅผ ์ํ ErrorSection ์ปดํฌ๋ํธ ๊ตฌํ - ์๋ฌ ๋ก๊ณ , ๋ฉ์์ง, ์๋ก๊ณ ์นจ ๋ฐ ํ ์ด๋ ๋ฒํผ ์ ๊ณต * feat: ๋ผ์ฐํฐ ์ค์ ์์ `errorElement`์ `ErrorPage` ์ปดํฌ๋ํธ๋ฅผ ์ถ๊ฐ * feat: ๋ฒํผ ํด๋ฆญ ์ ์๋ก๊ณ ์นจ ๋ฐ ํ ์ด๋ ๊ธฐ๋ฅ ์ถ๊ฐ * feat: LoadingBar ์ปดํฌ๋ํธ ๊ตฌํ * feat: ๋ก๋ฉ ํ์ด์ง ์ถ๊ฐ ๋ฐ ์ ์ฉ - ๋ก๋ฉ ๋ฉ์์ง ์ถ๊ฐ - ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง, ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง, ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ๋ก๋ฉ ํ์ด์ง ์ ์ฉ * refactor: buttons ๋ฐฐ์ด์ ํตํด ๋ฒํผ ์์ฑ * refactor: ์ฝ๋์ปจ๋ฒค์ ์ ๋ง๊ฒ ์ฝ๋ ์์ ๋ฐ imageDescription์ ๋ฒํผ props์ ์ถ๊ฐ * refactor: boolean ํ์ ์ถ๋ก ์ ๊ฑฐ * design: ์๋ฌ ์ปดํฌ๋ํธ ํ๋ฉด ๊ฐ์ด๋ฐ ๋ฐฐ์น * design: ๋ก๋ฉ ์ปดํฌ๋ํธ ํ๋ฉด ๊ฐ์ด๋ฐ ๋ฐฐ์น * [BE] refactor: ๋๋ฉ์ธ ์ฐ๊ด ๊ด๊ณ ์ฌ์ ์ (#156) * refactor: ๋๋ฉ์ธ ์ฐ๊ด๊ด๊ณ ์ฌ์ ์ ๋ฐ ์ฌ์ฉํ์ง ์๋ ๋๋ฉ์ธ ์ญ์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * test: ์ฌ์ฉํ์ง ์๋ ํ ์คํธ ์ญ์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * fix: ์์ฝ์ด ์ฌ์ฉํ์ง ์๋๋ก ์์ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: Review ๋๋ฉ์ธ์์ reviewee ํ๋ ์ ๊ฑฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์ ์ฅ ๊ธฐ๋ฅ ๊ตฌํ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ํค์๋ ์ ์ฅ ๊ธฐ๋ฅ ๊ตฌํ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์์ฒญ ๊ฐ์ฒด ๊ตฌํ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * test: ๋ฆฌ๋ทฐ, ๋ฆฌ๋ทฐ ๋ด์ฉ ๋๋ฉ์ธ ํ ์คํธ ์ถ๊ฐ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์ ์ง๋ฌธ ๊ฒ์ฆ Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * fix: Review์ reviewGroupId ์ปฌ๋ผ๋ช ์์ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์, ํค์๋ ๊ฒ์ฆ์ ๊ฐ์ฒด ๋ถ๋ฆฌ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ์, ์ง๋ฌธ ๊ฒ์ฆ์ ๊ฐ์ฒด ๋ถ๋ฆฌ * style: ์ฝ๋ ์ฌ์ ๋ ฌ * test: ๋ฆฌ๋ทฐ ์์ฑ ๊ฒ์ฆ ํ ์คํธ ์ถ๊ฐ * refactor: ์ฌ์ฉํ์ง ์๋ ํด๋์ค ์ญ์ * refactor: keyword ๊ด๋ จ ์ฌ์ฉํ์ง ์๋ ํด๋์ค ์ญ์ * refactor: review ๊ด๋ จ ์ฌ์ฉํ์ง ์๋ ํด๋์ค ์ญ์ * refactor: ๋ฐ์ดํฐ ์ด๊ธฐํ ๊ฐ์ฒด ์์ * test: ์ฌ์ฉํ์ง ์๋ ํ ์คํธ ์ญ์ * refactor: ์์ธ ๋ฉ์ธ์ง ๋งํฌ ํต์ผ * refactor: ์ฌ์ฉํ์ง ์๋ ์์ธ ์ ๊ฑฐ * refactor: ์์ธ ํด๋์ค ํจํค์ง ๋ณ๊ฒฝ * refactor: NOT NULL ์ ์ฝ์กฐ๊ฑด ์ถ๊ฐ * refactor: ํ ์คํธ์์๋ง ์ฌ์ฉ๋๋ ํจ์ ์ ๊ฑฐ * refactor: ํ ์คํธ ์คํ ์ ๋ฐ์ํ๋ LazyInitializationException ํด๊ฒฐ * refactor: ํค์๋ ๊ฒ์ฆ ํจ์ ์์ ๋ณ๊ฒฝ * chore: ํ ์คํธ ์ฝ๋ ์ปจ๋ฒค์ ํต์ผ * refactor: reviewRequestCode ๊ฒ์ฆ ๋ก์ง ์ด๋ * refactor: ํ๋์ธ questionRepository๋ฅผ ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ์ด, ํ๋ก์ ํธ ์ด๋ฆ ๊ธธ์ด ๊ฒ์ฆ ํจ์ ๋ถ๋ฆฌ * test: ๋ฆฌ๋ทฐ ์ ์ฅ ์ reviewKeywor ์ ์ฅ ๊ฒ์ฆ ์ถ๊ฐ --------- Co-authored-by: nayonsoso <[email protected]> Co-authored-by: Kimprodp <[email protected]> * [All] infra: ๋์ค์ฝ๋ ์นํ ์ฌ์ฉํด PR ์์ฑ/์ฝ๋ฉํธ ์ ๋ฉ์ (#169) * feat: PR Request ์์ฑ / Comment ์ ๋์ค์ฝ๋ ๋ฉ์ * fix: Case-sensitive ID๋ก ํด๊ฒฐ, ALL webhook ์ถ๊ฐ * fix: remove whitespace * chore: rename workflow * fix: fix shell script * fix: step statement * fix: remove trailing whitespace after equals sign * [BE] feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ฑ API ๊ตฌํ (#163) * feat: ๋๋คํ ๋ฌธ์์ด ์์ฑ๊ธฐ ๊ตฌํ Co-authored-by: donghoony <[email protected]> * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ฑ ์์ฒญ, ์๋ต ํ์ Co-authored-by: donghoony <[email protected]> * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ฑ Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> * feat: ๋ฆฌ๋ทฐ ์์ฑ ์ปจํธ๋กค๋ฌ Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> --------- Co-authored-by: nayonsoso <[email protected]> Co-authored-by: hyeonjilee <[email protected]> * [BE] refactor: ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ ์ ๋ณด ์์ฒญ ๊ธฐ๋ฅ ๋ฆฌํฉํฐ๋ง (#162) * refactor: ๋ถํ์ํ update ๋ฐฉ์ง * feat: controller์ ๋ฆฌ๋ทฐ ์์ฑ ์์ฒญ์ ๋ํ ์๋ต ๊ธฐ๋ฅ ๊ตฌํ * feat: controller์ ๋ฆฌ๋ทฐ ์์ฑ์ ์ํด ํ์ํ ์ ๋ณด๋ฅผ ์๋ต ๊ธฐ๋ฅ ๊ตฌํ * feat: service์ ๋ฆฌ๋ทฐ ์์ฑ์ ์ํด ํ์ํ ์ ๋ณด ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ * chore: ์ฌ์ฉํ์ง ์๋ dto ์ญ์ * test: ๋ฆฌ๋ทฐ ๋ฆฌ๋ทฐ ์์ฑ์ ์ํด ํ์ํ ์ ๋ณด ์กฐํ ๊ธฐ๋ฅ ํ ์คํธ ์์ฑ * refactor: swagger ์ค์ ์ผ๋ถ ์์ ๋ฐ ์๋ฌ ์๋ต์ฝ๋ ๋ ธ์ถ๋๋๋ก ๋ณ๊ฒฝ * refactor: service์์ ์์ํ์ long์ ๋ฐํํ๋๋ก ๋ณ๊ฒฝ * docs: api ๋ฌธ์ dto ํญ๋ชฉ์ค๋ช ๋ณ๊ฒฝ * test: ์ฌ์ฉํ์ง ์๋ ๋ณ์ ์ ์ธํ์ง ์๋๋ก ๋ณ๊ฒฝ * docs: api ๋ฌธ์ ๊ฒ์ฆ ๋ด์ฉ์ ๋ํ ์ด์ฒด ๋ณ๊ฒฝ * refactor: ํธ๋์ญ์ ์กฐํ ๋ช ์ ์ถ๊ฐ * refactor: dto ์ด๋ฆ ๋ณ๊ฒฝ * [FE] ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ react-query ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง (#161) * fix: src/index.tsx์์ enableMocking ์ ๊ฑฐ * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์์ฑ ์ ์ฝ๋ฉํธ ์ปดํฌ๋ํธ๋ช ๋ณ๊ฒฝ ๋ฐ ๊ธฐ๋ณธ๊ฐ ์ค์ - ์ปดํฌ๋ํธ๋ช ๋ณ๊ฒฝ: RevewComment -> ReveweeComments - reviewGroup์ description์ด ๋น๋ฌธ์์ด์ด๋ฉด ๊ธฐ๋ณธ๊ฐ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝ * refactor: ์๋ฒ DB์ ์๋ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์์ํ - ํ์ฌ DB์ ์๋ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ฅผ ๋ชฉ ์๋ฒ์์๋ ์ฌ์ฉํ๊ณ , ์ฌ์ด๋๋ฐ ํ์ด์ง ์ด๋ ์์๋ ํ์ฉํ ์ ์๋๋ก ๊ด๋ จ value๋ค์ ์์ํ ํจ * feat : QueryClient, QueryClientProvider ์ ์ฉ - src/index.tsx์ QueryClient, QueryClientProvider ์ ์ฉ * fix: dependencies์ ์๋ ํ ์คํธ ํจํค์ง๋ค์ devDependencies๋ก ์ฎ๊น * feat: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ react-query ์ ์ฉ * feat : msw์ ๋ฆฌ๋ทฐ ์์ธํ์ด์ง 404 ์ค๋ฅ ์ถ๊ฐ * ci: react-error-boundary ์ค์น * feat: Outlet์ QueryErrorResetBoundary,ErrorBoundary, Suspense ์ ์ฉ * feat: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์ useSuspenseQuery ์ ์ฉ * refactor: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง resource, queryString key ์์ํ * refactor: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง react-query key ์์ํ * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ์ปดํฌ๋ํธ ์์์๋ง ์ฌ์ฉํ๋ ์์๋ค ์์ํ * refactor: DetailedReviewPage/components์ index.tsx๋ฅผ ์ถ๊ฐํด import ๊ฒฝ๋ก ๊ฐ๊ฒฐํ๊ฒ ์์ * feat: error ์ ํ๋ฅผ ์ํ QueryClient ์ต์ ์ถ๊ฐ - react-query์ query, mutation์์ error๊ฐ ์ ํ๋๋๋ก QueryClient ์ต์ ์ค์ * fix: ErrorPage์ SideModal์ closeModal props๋ก ์ค * refactor: ErrorSection ์์น ๋ณ๊ฒฝ(src/pages/ErrorPage -> src/components/error) * feat: ErrorFallback ์ปดํฌ๋ํธ ์์ฑ * feat: ErrorSuspenseContainer ์์ฑ ๋ฐ App.tsx์ ์ ์ฉ * chore: constants/index.ts export ๊ฒฝ๋ก ๋ณ๊ฒฝ - ์ค๋ณต๋๋ apiErrorMessage ์ญ์ - queryKeys ์ถ๊ฐ * chore: 3์ฐจ-1์ฃผ์ฐจ ํต์ฌ ๊ธฐ๋ฅ ์ํ ๋ ํ์ ์๋ ์ฝ๋ ์ฃผ์ ์ฒ๋ฆฌ * docs: ErrorPage์ ERROR_MESSAGE ์์ * design: formWidth ๋ณ๊ฒฝ ๋ฐ fontSize์ 1.4rem ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ ์ถ๊ฐ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ชฉ๋ฐ์ดํฐ, ๋ฐ์ดํฐ ํ์ ์ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ ์ถ๊ฐ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ์ปดํฌ๋ํธ์ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ ์ถ๊ฐ ๋ฐ ๊ด๋ จ ์คํ์ผ ์ถ๊ฐ * refactor: ๋ถํ์ํ export ์ญ์ * chore: type๋ช ์์ (RevieweeCommentProps =>RevieweeCommentsProps) * refactor: ErrorSection์ผl Button ์์ * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ * refactor: ErrorSuspenseContainer ์ ์ฉ ์์น ๋ณ๊ฒฝ - App๊ฐ ์๋ router์ element์์ ์ ์ฉํ๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง ๋ฐ์ดํฐ ํ์ ๊ฐ์ ๋ฐฉ๋ฒ ๋ณ๊ฒฝ * chore: ๋ถํ์ํ ์ฃผ์ ์ญ์ * refactor: ErrorSection์ buttons ๋ค์ด๋ฐ ๋ณ๊ฒฝ ๋ฐ ์์์ key ์ถ๊ฐ - buttons -> buttonList * chore: ์คํ์ผ ์ฃผ์์ NOTE ์ถ๊ฐ * [BE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํ (#179) * feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ Co-authored-by: nayonsoso <[email protected]> * feat: ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์๋ต ์์ฑ Co-authored-by: donghoony <[email protected]> * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํ Co-authored-by: nayonsoso <[email protected]> * refactor: Cascade ์ ์ฉ์ผ๋ก ๋ถํ์ํ save ์ ๊ฑฐ Co-authored-by: nayonsoso <[email protected]> * refactor: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์์ฑ ๊ฐ์ฒด ๋์ถ Co-authored-by: nayonsoso <[email protected]> --------- Co-authored-by: nayonsoso <[email protected]> * fix: ๋ธ๋ผ์ฐ์ ํ์ดํ ์คํ ์์ (#167) * [BE] feat: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ (#182) * feat: ์ปจํธ๋กค๋ฌ ๋ฆฌ๋ทฐ ์์ธ ์กฐํ api ์๋ต ๊ธฐ๋ฅ ๊ตฌํ * feat: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ api ์๋ต ๊ฐ์ฒด ๊ตฌํ * refactor: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ api ์๋ต ๊ฐ์ฒด๋ช ๋ณ๊ฒฝ * feat: ์๋น์ค ๋ฆฌ๋ทฐ ์์ธ ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ * test: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ ๊ธฐ๋ฅ ํ ์คํธ ์ถ๊ฐ * style: ์คํ ๋ฐ ๊ฐํ ์์ * refactor: ๋ ์ง ์๋ต ์, ์ผ์๊น์ง๋ง ์๋ตํ๋๋ก ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ์กฐํ ๊ถํ ๊ฒ์ฆ ๋ก์ง์ repository ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝ * refactor: ๊ฒ์ฆ๋ฉ์ธ์ง ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ์๋น์ค์์ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ์ ๋ํ ์์ธ ํด๋์ค ๋ณ๊ฒฝ * refactor: ๋ฆฌ๋ทฐ ์์ธ ์กฐํ ๋ฉ์๋๋ช ๋ณ๊ฒฝ * refactor: ํค๋๋ช ์์ํ * [FE] recoil์ ํตํ groupAccessCode ์ ์ญ ์ํ ๊ด๋ฆฌ (#180) * ci: recoil ์ค์น * feat: src/index.ts์ RecoilRoot ์ ์ฉ * feat: groupAccessCode ์ ๋ํ atom ์ํ ์ถ๊ฐ * feat: useGroupAccessCode ํ ์ถ๊ฐ - useGroupAccessCode : groupAccessCode์ atom ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ํ * [BE] ๋ด๊ฐ ๋ฐ์ ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ์ต์ ์์ผ๋ก ์กฐํํ๋ค. (#189) * fix: ๋ ์ง ์ ์ ๋ ฌ * refactor: ์ฌ์ฉํ์ง ์๋ ๋ณ์ ์ ๊ฑฐ --------- Co-authored-by: donghoony <[email protected]> * [BE] ์ด๊ธฐ ๋ฐ์ดํฐ ์ค์ (#187) * feat: ์ด๊ธฐ ๋ฐ์ดํฐ ์ค์ * build: CD ์ local profile ์ค์ --------- Co-authored-by: donghoony <[email protected]> * [FE] feat: Alert Modal๊ณผ Error Alert Modal ์ปดํฌ๋ํธ ๊ตฌํ ๋ฐ Button ์ปดํฌ๋ํธ ํ์ฅ (#165) * refactor: ๊ณตํต ๋ฒํผ ์ปดํฌ๋ํธ๊ฐ children๊ณผ style์ ๋ฐ๋๋ก ์์ * chore: error alert modal์์ ์ฌ์ฉํ primary ์์์ ๊ฒฝ๊ณ ์ผ๊ฐํ ์ถ๊ฐ * feat: ErrorAlertModal ์ปดํฌ๋ํธ ๊ตฌํ * feat: AlertModal ์ปดํฌ๋ํธ ๊ตฌํ * chore: ๋ณ๊ฒฝ๋ Button ์ปดํฌ๋ํธ์ ๊ตฌ์กฐ์ ๋ง๊ฒ ์ฝ๋ ์์ * fix: AlertModal์ด Esc ๋๋ background์ ํด๋ฆญ์ผ๋ก ๋ซํ์ง ์๋๋ก ์์ * chore: AlertModal๊ณผ ErrorAlertModal export * refactor: Button ์ปดํฌ๋ํธ๊ฐ type์ ๋ณ๋๋ก ๋ฐ๋๋ก ์์ ๋ฐ ๊ธฐ์กด์ buttonType์ styleType์ผ๋ก ๋ณ๊ฒฝ * refactor: background ํด๋ฆญ ๋๋ Esc ํค๋ฅผ ํตํด ๋ชจ๋ฌ์ ๋ซ๋ ๊ฒ์ ๋ถ๋ฆฌ * refactor: AlertModal์ ๋ชจ๋ฌ ๋ซ๋ ์ ์ฑ ์ props๋ก ์ ํ ๊ฐ๋ฅํ๋๋ก ์์ * refactor: ErrorAlertModal์ AlertModal์ ์ฌ์ฉํด ๊ตฌํ * refactor: ๋ซ๊ธฐ ๋ฒํผ ์ด์ธ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋ฌ์ ๋ซ์ ์ ์๋์ง ์ฌ๋ถ์ handler๋ฅผ props๋ก ์ ๋ฌ๋ฐ๋๋ก ๋ณ๊ฒฝ * refactor: ๋น์ด์๋ ์คํ์ผ ์ปดํฌ๋ํธ ์ ๊ฑฐ * [FE] ๋๋ฉ ํ์ด์ง ํผ๋ธ๋ฆฌ์ฑ ๋ฐ ๋๋ฐ์ด์ฑ ํจ์ ์ถ๊ฐ (#181) * feat: Input ๊ณตํต ์ปดํฌ๋ํธ ์ ์ * feat: LandingPage ์ ์ * fix: Input์ type์ text๋ก ์์ * feat: debounce ํจ์ ์์ฑ * docs: debounce ํจ์์ TODO ์ฃผ์ ๋ฐ TSdoc ์ถ๊ฐ ์ธ ๊ฐ๋จํ if๋ฌธ ๋ฆฌํฉํ ๋ง * chore: ์๋ชป๋ ํ์ผ ๊ตฌ์กฐ ๋ฐ ๋๋ ํ ๋ฆฌ๋ช ์์ * chore: px์ rem์ผ๋ก ์์ * refactor: ๋์ ์คํ์ผ๋ง์ css ๋์ styled ์คํ์ผ ์ ์ฉ * refactor: Input ์คํ์ผ์ ๋์ฑ ์ ์ฐํ๊ฒ ๋ฐ์ ์ ์๋๋ก ์์ , ์คํ์ผ ๋ฆฌํฐ๋ด ์ ๊ฑฐ * refactor: Input์ ์ ์ฉ๋ ์ปค์คํ ์คํ์ผ๋ง์ $style๋ก ์์ * fix: undefined ๋ฆฌํด์ null ๋ฆฌํด์ผ๋ก ์์ * refactor: flex-direction์ ๋ณ๋์ ์ปค์คํ ํ์ ์ ์ฌ์ฉํ๋ ๋์ React ๋ด์ฅ ํ์ ์์ฌ์ฉํ๋๋ก ์์ * refactor: Input ์ปดํฌ๋ํธ์์ rest props ์ ๊ฑฐ * chore: ๋ถํ์ํ import ์ ๊ฑฐ * [FE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ ๋ณ๊ฒฝ๋ API ์ฐ๋ ํ, ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ์ ์ฉ ๋ฐ ๋ฌดํ ์คํฌ๋กค ๊ตฌํ (#192) * design: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋ ๋ฐฐ๊ฒฝ์ ๋ณ๊ฒฝ ๋ฐ ์ ์ฒด ๊ฐ์ธ๋ div์ ์๋์ชฝ ์ฌ๋ฐฑ ์ถ๊ฐ * refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์ธํฐํ์ด์ค ์ถ๊ฐ ๋ฐ ์์ - ReviewPreviewList ์ธํฐํ์ด์ค ์ถ๊ฐ - size, lastReviewId, reviews ํ๋ ์ถ๊ฐ - ReviewPreview ์ธํฐํ์ด์ค ์์ - keywords ํ๋๋ฅผ Keyword[] ํ์ ์ผ๋ก ๋ณ๊ฒฝ * chore: ๋ซํ ์๋ฌผ์ ๋ก ์์ด์ฝ ๋ณ๊ฒฝ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ์ ์ฉ * refactor: ์น ์ ๊ทผ์ฑ์ ์ํ alt, aria-label ์ถ๊ฐ ๋ฐ ์ฝ๋ ์ปจ๋ฒค์ ์ ๋ง์ถฐ ์ฝ๋ ์์ * feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฆฌ์คํธ ํธ๋ค๋ฌ์ ํ์ด์ง๋ค์ด์ ๋ก์ง ์ถ๊ฐ - ๊ธฐ์กด์ ๋จ์ ๋ฐํ ํธ๋ค๋ฌ์์ ํ์ด์ง๋ค์ด์ ๊ธฐ๋ฅ์ ํฌํจํ ํธ๋ค๋ฌ๋ก ์์ * feat: `SideModal` ์ปดํฌ๋ํธ์ `closeModal` prop ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ ๋ฌดํ ์คํฌ๋กค ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: useReviewPreviewList ํ ์์ฑํ์ฌ ๋ฐ์ดํฐ ํธ์ถ ๋ก์ง ๋ถ๋ฆฌ * refactor: ๋ถํ์ํ ButtonContainer ์ ๊ฑฐ * design: px์ rem์ผ๋ก ๋ณ๊ฒฝ * refactor: Button ์ปดํฌ๋ํธ์ key ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ์ด, ํ๋ก์ ํธ๋ช ์ ๋ณด์ฌ์ฃผ๋ DescriptionSection ์ปดํฌ๋ํธ ๊ตฌํ * refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ๋ถ๋ฌ์ค๋ api ๋ณ๊ฒฝ ์ด์๋ก ์ธํด ์๋ํฌ์ธํธ, fetch ํจ์ ์์ * chore: fragment ์ ๊ฑฐ * refactor: api ๋ณ๊ฒฝ์ ๋ฐ๋ผ ReviewPreviewList, ReviewPreview ์ธํฐํ์ด์ค ์์ * refactor: ๋ณ๊ฒฝ๋ api์ ๋ฐ๋ผ props ์์ * refactor: reviewerGroup, isPublic ์ ๊ฑฐ * refactor: endPoint.gettingReviewList ํธ์ถ ์ธ์ ๋ณ๊ฒฝ * refactor: DescriptionSection์์ ReviewInfoSection์ผ๋ก ์ปดํฌ๋ํธ๋ช ๋ณ๊ฒฝ * refactor: useSuspenseQuery ์ ์ฉ ํ, ๋ฌดํ์คํฌ๋กค ๊ด๋ จ ์ฝ๋ ์ฃผ์ ์ฒ๋ฆฌ --------- Co-authored-by: badahertz52 <[email protected]> * [FE] feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ์๋ฒ ๋ฐ ๋ชจ๋ฌ ์ฐ๋ (#191) * chore: ๋ณ๊ฒฝ๋ UI ์ ์ฉ * design: ํค์๋ ๋ฌธํญ ์๋ด ๋ฌธ๊ตฌ ์์ * feat: Textarea ๊ณตํต ์ปดํฌ๋ํธ ๋ผ๋ ๊ตฌํ * chore: ์์ ๋ api ์๋ํฌ์ธํธ ๋ฐ queryparams ์ ์ฉ * design: reset.ts ์ถ๊ฐ ์ค์ * chore: ๋ณ๊ฒฝ๋ api ๋ฌธ์์ ๋ง๊ฒ ํ์ ์์ * feat: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ๋ชจ๋ฌ ๋ฐ ์๋ฒ ์ฐ๋ * chore: ์ฌ์ด๋๋ฐ ๋ฉ๋ด ํด๋ฆญ ์ ์ด๋ํ path ์์ * fix: ConfirmModal์์ background ํด๋ฆญ ์ ๋ชจ๋ฌ์ด ๋ซํ์ง ์๋ ํ์ ์์ * design: AlertModal ๋ฐ ErrorAlertModal ๋์์ธ ์์ * chore: ๋ฆฌ๋ทฐ ์์ฑ ๋ฐ ์์ฑ ์๋ฃ ํ์ด์ง ๋ผ์ฐํฐ ์ถ๊ฐ * chore: ๋ถํ์ํ ์ฃผ์ ์ ๊ฑฐ ๋ฐ ์ฌ์ด๋๋ฐ์์ ๋ฆฌ๋ทฐ ์์ฑ ๋ฉ๋ด ์จ๊น ์ฒ๋ฆฌ * chore: ๋ฆฌ๋ทฐ ์ ์ถ ํ์ด์ง ๋ฒํผ ํ์ ๋ช ์ * chore: svg import ์ปจ๋ฒค์ ์ ๋ง๊ฒ ์์ * [FE] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง, ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์์ ๋ก๊ทธ์ธ์ ์ฐ๋ (#193) * design: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋ ๋ฐฐ๊ฒฝ์ ๋ณ๊ฒฝ ๋ฐ ์ ์ฒด ๊ฐ์ธ๋ div์ ์๋์ชฝ ์ฌ๋ฐฑ ์ถ๊ฐ * refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์ธํฐํ์ด์ค ์ถ๊ฐ ๋ฐ ์์ - ReviewPreviewList ์ธํฐํ์ด์ค ์ถ๊ฐ - size, lastReviewId, reviews ํ๋ ์ถ๊ฐ - ReviewPreview ์ธํฐํ์ด์ค ์์ - keywords ํ๋๋ฅผ Keyword[] ํ์ ์ผ๋ก ๋ณ๊ฒฝ * chore: ๋ซํ ์๋ฌผ์ ๋ก ์์ด์ฝ ๋ณ๊ฒฝ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ์ ์ฉ * refactor: ์น ์ ๊ทผ์ฑ์ ์ํ alt, aria-label ์ถ๊ฐ ๋ฐ ์ฝ๋ ์ปจ๋ฒค์ ์ ๋ง์ถฐ ์ฝ๋ ์์ * feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฆฌ์คํธ ํธ๋ค๋ฌ์ ํ์ด์ง๋ค์ด์ ๋ก์ง ์ถ๊ฐ - ๊ธฐ์กด์ ๋จ์ ๋ฐํ ํธ๋ค๋ฌ์์ ํ์ด์ง๋ค์ด์ ๊ธฐ๋ฅ์ ํฌํจํ ํธ๋ค๋ฌ๋ก ์์ * feat: `SideModal` ์ปดํฌ๋ํธ์ `closeModal` prop ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ ๋ฌดํ ์คํฌ๋กค ๊ธฐ๋ฅ ์ถ๊ฐ * refactor: useReviewPreviewList ํ ์์ฑํ์ฌ ๋ฐ์ดํฐ ํธ์ถ ๋ก์ง ๋ถ๋ฆฌ * refactor: ๋ถํ์ํ ButtonContainer ์ ๊ฑฐ * design: px์ rem์ผ๋ก ๋ณ๊ฒฝ * refactor: Button ์ปดํฌ๋ํธ์ key ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก,๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง api ํธ๋ค๋ฌ์์ groupAccessCode๋ฅผ header์ ์ถ๊ฐ * feat: DetailedReviewPage ์์ groupAccessCode ์ํ ์ ์ฉ * feat: LoginRedirectModal ์์ฑ * refactor: ErrorSection ๋ฆฌํฉํ ๋ง * feat: ๋ฆฌ๋ทฐ์ด, ํ๋ก์ ํธ๋ช ์ ๋ณด์ฌ์ฃผ๋ DescriptionSection ์ปดํฌ๋ํธ ๊ตฌํ * refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ๋ถ๋ฌ์ค๋ api ๋ณ๊ฒฝ ์ด์๋ก ์ธํด ์๋ํฌ์ธํธ, fetch ํจ์ ์์ * feat: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ groupAccessCode ์ํ๋ฅผ ์ ์ฉ - ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง์ groupAccessCode ์ํ๊ฐ์ด ์์ผ๋ฉด api์์ฒญ์ ํ๊ณ ์์ผ๋ฉด LoginRedirectModal์ ๋์ด์ ๋ก๊ทธ์ธ ์ ๋ํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ - DetailedPage/index.tsx์ ์๋ ๋ด์ฉ์ DetailedReivewPageContents๋ก ์ด๋ - DetailedPage/index.tsx์์ ErrorSuspenseContainer ์คํํ๋ ๊ฒ์ผ๋ก ์์ * chore: fragment ์ ๊ฑฐ * refactor: api ๋ณ๊ฒฝ์ ๋ฐ๋ผ ReviewPreviewList, ReviewPreview ์ธํฐํ์ด์ค ์์ * fix: ๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง keyword ํ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ * refactor: ๋ณ๊ฒฝ๋ api์ ๋ฐ๋ผ props ์์ * refactor: reviewerGroup, isPublic ์ ๊ฑฐ * feat: ErrorFallback ์ ํ ์ด๋ ๊ฒฝ๋ก ๋ณ๊ฒฝ * refactor: endPoint.gettingReviewList ํธ์ถ ์ธ์ ๋ณ๊ฒฝ * refactor: DetailedReviewPage์์ groupAccessCode ๊ฐ์ ธ์ค๋ ๋ฐฉ์ ๋ณ๊ฒฝ - useRecoilValue๊ฐ ์๋ useGroupAccessCode์์ ๊ฐ์ ธ์ค๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝ * refactor: DescriptionSection์์ ReviewInfoSection์ผ๋ก ์ปดํฌ๋ํธ๋ช ๋ณ๊ฒฝ * refactor: ErrorPage์์ Home ์ด๋ ๋ฒํผ์ ์ ๋ํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ - route์ค๋ฅ ๋ฉ์ธ์ง์ api์ค๋ฅ ๋ฉ์ธ์ง๋ฅผ errorMessage ํ์ผ์์ ๊ด๋ฆฌํ๋๋ก ์์ - ErrorPage์์ errorMessage๊ฐ ROUTE_ERROR_MESSAGE์ด๋ฉด ํ ๋ฒํผ์ด ํ๋ฉด์์์ ๋จผ์ ๋์ค๋๋ก ์์ - ์์๋ณ ํ,refresh ์์ด์ฝ SVG ์ถ๊ฐ * refactor: useSuspenseQuery ์ ์ฉ ํ, ๋ฌดํ์คํฌ๋กค ๊ด๋ จ ์ฝ๋ ์ฃผ์ ์ฒ๋ฆฌ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง ๋ชฉ ์๋ฒ ํธ๋ค๋ฌ ๋ฐ ๋ชฉ๋ฐ์ดํฐ ์์ * feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ groupAccessCode ์ ์ญ ์ํ ์ ์ฉ * refactor: ๋ถํ์ํ ์ฝ๋ ์ญ์ * chore: ์คํ ์์ --------- Co-authored-by: soosoo22 <[email protected]> * [FE] feat: ๋๋ฉ ํ์ด์ง API ์ฐ๋ (#196) * feat: ๊ทธ๋ฃน ์์ฑ์ ์ํ ์๋ํฌ์ธํธ ์์ฑ ๋ฐ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์๋ํฌ์ธํธ, api ํธ์ถ ํจ์ ์์ * fix: CSSProperties ๋์ ์ปค์คํ ํ์ ์ ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค ์์ * feat: ReviewAccessForm์ ๋ชจ๋ฌ ๋ฐ API ์ฐ๊ฒฐ * fix: ๋๋ฝ๋๋ CopyIcon ํ์ผ ์ ๋ก๋ * feat: ํ์ธ ์ฝ๋ ์ ๋ ฅ API ์ฐ๋ * feat: ์์ ํ ๋ฆฌ๋ทฐ ์์ฑ URL์ ๋ฆฌํดํ๋ ํจ์ ์์ฑ * [FE] fix: ๋๋ฝ๋๋ ๋ฒํผ ๋ฆฌํฉํ ๋ง ๋ฐ ์๋ํฌ์ธํธ ๋ณต๊ตฌ (#199) * fix: ์ถฉ๋ ํด๊ฒฐ ๊ณผ์ ์์ ๋๋ฝ๋๋ ์๋ํฌ์ธํธ ๋ณต๊ตฌ * fix: ๋ฒํผ ๋ฆฌํฉํ ๋ง ๋ฐ์ * feat: textarea์ ์ต์ ์ ๋ ฅ ๊ธ์ ์๋ฅผ ๋ง์กฑํ์ง ๋ชปํ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง ํ์ ๊ธฐ๋ฅ ๊ตฌํ (#200) * feat: ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ํ์ด์ง์์ ํ ๋ฒํผ ์ถ๊ฐ (#201) * docs: ๋ฆฌ๋ทฐ๋ฏธ ์๊ฐ๊ธ ์์ฑ (#203) * [BE] refactor: ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋ ์ ๊ฑฐ, ์ปจ๋ฒค์ ๋ฐ ์์ ๋ฆฌํฉํ ๋ง (#206) * refactor: date๋ฅผ review๊ฐ ์ ๊ณตํ๋๋ก ์์ * style: ์ปจ๋ฒค์ ์ ์ฉ * refactor: ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋ ์ ๊ฑฐ * refactor: ๋ฉ์๋๋ช ํต์ผ * style: ๋ถํ์ํ ๊ฐํ ์ ๊ฑฐ * [FE] jest ์ฌ์ฉ ์ nodeํ๊ฒฝ ์ msw ํธํ์ฑ ๋ฌธ์ ์ ํ๊ฒฝ ๋ณ์ ์ค๋ฅ ํด๊ฒฐ (#215) * ci: dependencies์์ jest ์ญ์ ๋ฐ ts-jest ์ค์น * ci: jest์์ ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉํ ์ ์๋๋ก jest.config.js ์ถ๊ฐ * chore: eslint์ ์ฉ ์ ์ธ ํ์ผ์ jest.config.js, tsconfig.json ์ถ๊ฐ * ci: jest์ testEnvioronment๋ฅผ jsdom์ผ๋ก ์ค์ * fix: jest์์ msw ver2๋ฅผ ๋ชฉ์๋ฒ๋ก ์ฌ์ฉ ์ ์๊ธฐ๋ ์ค๋ฅ ์์ 1. msw/node ๋ฅผ ์ฝ์ง ๋ชปํจ - jest.config.js์ testEnvironment ๋น๋ฌธ์์ด 2. ReferentError: TextEnCoder is not defined - ํด๊ฒฐ : jest.polyfills.js ์ถ๊ฐ ๋ฐ undici ์ค์น 3. ReferenceError: ReadableStream is not defined - ํด๊ฒฐ : undici ๋ค์ด ๊ทธ๋ ์ด๋ undici": "^6.19.5", -> "^5.0.0" * ci : jest์์ env ํ์ผ ์ฝ์ ์ ์๋๋ก dotenv ์ค์น ๋ฐ jest์ ์ ์ฉ * [FE] ๊ฐ๋ฐํ๊ฒฝ๊ณผ ๋น๋ํ๊ฒฝ์ ๋ฐ๋ผ msw ์คํ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋๋ก msw ์คํ ์กฐ๊ฑด๋ฌธ ๊ฐ์ (#221) * ci: ๋น๋ ํ์ผ์ ์คํํ ์ ์๋ http-server ํจํค์ง ์ค์น ๋ฐ ์คํ ๋ช ๋ น์ด ์ถ๊ฐ * fix:๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ๋น๋/๋ฐฐํฌ ํ๊ฒฝ์ ๊ตฌ๋ถํด ๋ชฉ ์๋ฒ๋ฅผ ์คํํ๋๋ก ์กฐ๊ฑด๋ฌธ ๊ฐ์ * fix: ๋จธ์ง ์ถฉ๋ ์ yarn.lock ์ญ์ ํ ๊ฑฐ ๋ณต๊ตฌ * [FE] ๋ฆฌ๋ทฐ ์์ธํ์ด์ง query ํ ๋ถ๋ฆฌ ๋ฐ HTTP ์์ฒญ ํ ์คํธ ์งํ (#216) * refactor: DetailedPage/index.tsx ๋ฆฌํฉํ ๋ง - early return๋ฅผ ์ฌ์ฉํด ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ * feat: useGetDetailedReview ํ ์์ฑ ๋ฐ DetailedReviewPageContents์ ์ ์ฉ * feat: useSearchParamAndQuery ํ ์์ฑ ๋ฐ DetailedPageContent์ ์ ์ฉ * refactor: ๋ฆฌ๋ทฐ ์์ธํ์ด์ง์์ id๋ผ๊ณ ์ฌ์ฉํ๋ key๊ฐ, params์ key๋ฅผ reviewId๋ก ๋ณ๊ฒฝ - DetailedReview์ router param์ id์์ reviewId๋ก ๋ณ๊ฒฝ * ci: dependencies์์ jest ์ญ์ ๋ฐ ts-jest ์ค์น * ci: jest์์ ์ ๋ ๊ฒฝ๋ก ์ฌ์ฉํ ์ ์๋๋ก jest.config.js ์ถ๊ฐ * chore: eslint์ ์ฉ ์ ์ธ ํ์ผ์ jest.config.js, tsconfig.json ์ถ๊ฐ * ci: jest์ testEnvioronment๋ฅผ jsdom์ผ๋ก ์ค์ * refactor: useGetDetailedReview์์ query ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ ๋ฐํํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * fix: jest์์ msw ver2๋ฅผ ๋ชฉ์๋ฒ๋ก ์ฌ์ฉ ์ ์๊ธฐ๋ ์ค๋ฅ ์์ 1. msw/node ๋ฅผ ์ฝ์ง ๋ชปํจ - jest.config.js์ testEnvironment ๋น๋ฌธ์์ด 2. ReferentError: TextEnCoder is not defined - ํด๊ฒฐ : jest.polyfills.js ์ถ๊ฐ ๋ฐ undici ์ค์น 3. ReferenceError: ReadableStream is not defined - ํด๊ฒฐ : undici ๋ค์ด ๊ทธ๋ ์ด๋ undici": "^6.19.5", -> "^5.0.0" * ci : jest์์ env ํ์ผ ์ฝ์ ์ ์๋๋ก dotenv ์ค์น ๋ฐ jest์ ์ ์ฉ * fix: mock ํธ๋ค๋ฌ์ธ getDetailedReview ์์ ์ค๋ณต๋ ์ฟผ๋ฆฌ ๋งค๊ฐ ๋ณ์ ์ฌ์ฉ ์์ - ์ค๋ฅ ์ํฉ: jest์์ msw ์ฌ์ฉ ์, get์ url์ ํ๋ผ๋ฏธํฐ ์ฌ์ฉ ์ ์ค๋ณต๋ ์ฟผ๋ฆฌ ๋งค๊ฐ ๋ณ์ ์ค๋ฅ๊ฐ ๋จ - ์ค๋ฅ ๋ฉ์ธ์ง ::Found a redundant usage of query parameters in the request handler - ํด๊ฒฐ: ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ ํ์ด์ง์ reviews๊น์ง์ url ์์๋ฅผ ๋ง๋ค๊ณ , get์์๋ ์ด ์์๋ฅผ ํ์ฉํ ์ ๊ทํํ์์ผ๋ก ๋ฆฌ๋ทฐ ์์ธ๋ณด๊ธฐ ํ์ด์ง๋ก ์ค๋ ๋ชจ๋ ์์ฒญ์ ๊ฐ๋ก์ฑ ์ ์๋๋ก ํจ * refactor: getWrongDetailedReview ๋ชฉ์๋ฒ ํธ๋ค๋ฌ ๋ฐ ๊ด๋ จ ์์ ์ญ์ - getDetailedReview์์ request๋ฅผ ๋ถ์ํด http์ค๋ฅ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํจ * feat: queryClientWrapper ์์ฑ - queryClientWrapper : msw๋ฅผ ์ฌ์ฉํ jest ํ ์คํธ์ queryWrapper๋ก ์ฌ์ฉ * test:๋ฆฌ๋ทฐ ์์ธ ํ์ด์ง api ์์ฒญ ์ฑ๊ณต์ ๋ํ ํ ์คํธ ์ถ๊ฐ * fix: groupAccessCodeAtom์ ๊ธฐ๋ณธ๊ฐ ์๋๋๋ก ๋ณต๊ตฌ * chore:queryClientWrapper ๋ค์ด๋ฐ ํ๊ธฐ๋ฒ์ ํ์ค์นผ ์ผ์ด์ค๋ก ๋ณ๊ฒฝ * fix: ๋จธ์ง ์ถฉ๋ ๋ฐฉ์ง๋ฅผ ์ํด yarn.lock ์ญ์ * fix: ๋จธ์ง ์ yarn.lock ์ถฉ๋ ํด๊ฒฐ * [FE] test: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง์ API ์ฐ๋ ํ ์คํธ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง (#217) * chore: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง ๊ด๋ จ ์ปดํฌ๋ํธ ๋ฐ ์ธํฐํ์ด์ค, ํ์ผ ์ด๋ฆ ๋ณ๊ฒฝ * refactor: api ์๋ํฌ์ธํธ ์์ ์ ์ฉ * refactor: useGetReviewList ํ ์ผ๋ก ๋ถ๋ฆฌ * test: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํ์ด์ง api ์ฐ๋ ํ ์คํธ ์ถ๊ฐ * chore: msw ๋ชจํน ์ฝ๋ ์ ๊ฑฐ * chore: ๊ฒฝ๋ก index ์ ๊ฑฐ * fix: ์ค๋ณต๋ import ๋ฐ ๋ถํ์ํ ํธ๋ค๋ฌ ์ ๊ฑฐ * chore: ์๋ํฌ์ธํธ ์์ ์ ๊ฑฐ * [FE] refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง ๋ฆฌํฉํ ๋ง (#219) * refactor: ๊ฐ ๋ชจ๋ฌ๋ณ๋ก ์ํ์ ๋์์ ๊ด๋ฆฌํ๋ ํ ๋ถ๋ฆฌ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํผ์ ๋ก์ง์ ํ ์ผ๋ก ๋ถ๋ฆฌ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ๋ถ๋ฆฌํ ํ ์ ์ฉ * refactor: URL์์ reviewRequestCode๋ฅผ ์ถ์ถํ๋ ๋ก์ง์ ํ ์ผ๋ก ๋ถ๋ฆฌ * chore: ๋ถํ์ํ ํ ์คํธ์ฉ ์ฝ๋ ์ ๊ฑฐ * chore: ErrorModal์ ๋ซ์ ๋ errorMessage ์ํ๋ ์ด๊ธฐ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋๋ก ์์ * [BE] feat: ํค๋ ์กด์ฌ ์ฌ๋ถ ๊ฒ์ฆ (#207) * fix: ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด ์ด๋ ธํ ์ด์ ์ผ์น * feat: ํค๋ ๊ฒ์ฌ ์ด๋ ธํ ์ด์ * feat: ํค๋ ๋ฐธ๋ฆฌ๋ฐ์ดํฐ * feat: ์ปจํธ๋กค๋ฌ์ ํค๋ ๊ฒ์ฌ * feat: ํค๋ ๊ฒ์ฆ ๋ฉ์์ง ํด๋ผ์ด์ธํธ์ ์ ๋ฌ * fix: ๋๋ฝ๋ `@Valid` ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: ์์ฒญ์ด null์ธ ๊ฒฝ์ฐ ํธ๋ค๋ง * chore: ํ ์คํธ ์ด๋ฆ ๊ฐ๊ฒฐํ๊ฒ ๋ณ๊ฒฝ * chore: ์๋ฌธ์ ์ปจ๋ฒค์ * feat: ArgumentResolver๋ฅผ ํ์ฉํ ํค๋ ๊ฒ์ฆ * feat: ๊ณต์ฉ ํจํค์ง๋ก ์ด๋ ๋ฐ ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์์ * chore: ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ * feat: ArgumentResolver ์ ์ฉ, Validator ์ญ์ * chore: ์ฌ์ฉํ์ง ์๋ ์ปค์คํ ์์ธ ์๋ณต * refactor: ํค๋ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ๋ฉ์์ง ์์ * chore: ๋ถํ์ํ `@Valid` ์ด๋ ธํ ์ด์ ์ญ์ * refactor: ๋ณ์ ์ถ์ถ Co-authored-by: Yeongseo Na <[email protected]> * fix: ์ปดํ์ผ ์๋ฌ ํด๊ฒฐ --------- Co-authored-by: Yeongseo Na <[email protected]> * ci: index.html์ ๊ตฌ๊ธ ์ ๋๋ฆฌํฑ์ค ์ ์ฉ (#226) * [FE] ci: sentry ์ด๊ธฐ ์ค์ (#223) * ci: sentry ์ด๊ธฐ ์ค์ * chore: gitignore์ env.sentry-build-plugin ์ถ๊ฐ * ci: sentry ์ ์ฉ ํ๋ก์ ํธ๋ฅผ woowacoure-review-me๋ก ๋ณ๊ฒฝ, ๋ก์ปฌ ํ๊ฒฝ ์ถ์ ํ๋๋ก ๋ณ๊ฒฝ * ci: sentry ์ ์ฉ ํ๊ฒฝ์ ๋ฐฐํฌ ํ๊ฒฝ์ผ๋ก ๋ค์ ๋ณ๊ฒฝ * ci: sentry์์ replay ๊ด๋ จ ์ค์ ์ญ์ --------- Co-authored-by: badahertz52 <[email protected]> * [FE] refactor: LandingPage์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ์ ์ฉ ๋ฐ ๋ฆฌํฉํ ๋ง (#218) * chore: LandingPage์ styles ํ์ผ ๋ถ๋ฆฌ * fix: POST ์์ฒญ์ ํ๋ ํจ์์ ์ด๋ฆ์ post~๋ก ์์ * feat: ๊ทธ๋ฃน ๋ฐ์ดํฐ ์์ฑ ์์ฒญ์ ๋ํ MSW ํธ๋ค๋ฌ ์ถ๊ฐ * refactor: ๋ชจํน ๋ฐ์ดํฐ ๊ฐ์ ๋ ์ง๊ด์ ์ผ๋ก ์์ * refactor: LandingPage๋ฅผ ErrorSuspenseContainer๊ฐ ๊ฐ์ธ๋๋ก ์์ * refactor: URL์ ์ป์ด์ค๋ API์ react-query ์ ์ฉ ๋ฐ API ํธ์ถ ํจ์ ์ด๋ฆ ์์ * chore: LandingPage ํ์ ์ปดํฌ๋ํธ๋ค์ index ํ์ผ ์ถ๊ฐ ๋ฐ ์ ์ฉ * refactor: groupAccessCode ๊ด๋ จ msw ํธ๋ค๋ฌ ์ถ๊ฐ ๋ฐ ์๋ฌ ์ํ(์๋ ์ฝ๋ ์ ๋ ฅ, ์๋ฒ ์๋ฌ)์ ๋ฐ๋ฅธ ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ๋๋ก ์์ * refactor: groupAccessCode์ ์ํ๋ฒณ ๋์๋ฌธ์์ ์ซ์๋ง ์ฌ ์ ์๋๋ก ์์ * refactor: LandingPage์์ ErrorSuspenseContainer๋ฅผ ์ ๊ฑฐํ๊ณ ๋์ URLGeneratorForm๋ง์ ๊ฐ์ธ๋๋ก ์์ * refactor: Input ์ปดํฌ๋ํธ์ onChange ์ด๋ฒคํธ ํ์ ์์ * refactor: Input ์ปดํฌ๋ํธ์ name ์์ฑ ์ถ๊ฐ * refactor: ์์ ๋ ๊ฒฝ๋ก ๋ฐ์ * refactor: usePostDataForUrl ์ฟผ๋ฆฌ์์ mutation์ ๋ฆฌํดํ๋๋ก ์์ * refactor: URL์ ์ฑ๊ณต์ ์ผ๋ก ์์ฑํ ์ดํ Input์ ๋ฆฌ์ ํ๋ ํจ์ ์ถ๊ฐ * chore: NOTE ์ฃผ์ ์ถ๊ฐ * refactor: getIsValidGroupAccessCodeApi์์ 400 ์ธ์ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ๊ธฐ์กด์ createApiErrorMessage๋ฅผ ์ฌ์ฉํ๋๋ก ์์ * chore: ๋๋ฝ๋๋ -Api suffix ๋ฐ์ * [BE] Actuator ์ ์ฉ๊ณผ logback ์ค์ (#228) * build: actuator ์์กด์ฑ ์ถ๊ฐ * feat: ๋ก๊ทธ๋ฐฑ ์ค์ * feat: submodule ์ ์ฉ - actuator ์ค์ ์ ์๋ธ ๋ชจ๋์ ์ ์ฅ * style: ๊ฐํ ๋ฐ ์ฃผ์ ์ ๊ฑฐ * test: logback ์ค์ ์ถ๊ฐ * [FE] CD test (#233) * ci: sentry ์ด๊ธฐ ์ค์ * chore: ์๋น์ค ํ์ดํ ๋๋ฌธ์๋ก ๋ณ๊ฒฝ * chore: merge * [BE] ํ๋กํ์ผ ๋ถ๋ฆฌ, CD ์คํฌ๋ฆฝํธ ์์ (#235) * feat: ํ๋กํ์ผ ๋ถ๋ฆฌ * feat: ํ๋กํ์ผ ๋ถ๋ฆฌ * cd: ํ๋กํ์ผ ๋ถ๋ฆฌ cd ์คํฌ๋ฆฝํธ ์์ * fix: CD ์คํฌ๋ฆฝํธ ์คํ ์์ (#236) * [FE] CD test 2 (#237) * ci: sentry ์ด๊ธฐ ์ค์ * chore: ์๋น์ค ํ์ดํ ๋๋ฌธ์๋ก ๋ณ๊ฒฝ * chore: merge * fix: sentry ์ฌ์ค์ * fix: sentry ์ค์ ๋ณต๊ตฌ * fix: cd ์คํฌ๋ฆฝํธ ์คํ ์์ (#238) * [FE] CD TEST 3 (#239) * ci: sentry ์ด๊ธฐ ์ค์ * chore: ์๋น์ค ํ์ดํ ๋๋ฌธ์๋ก ๋ณ๊ฒฝ * chore: merge * fix: sentry ์ฌ์ค์ * fix: sentry ์ค์ ๋ณต๊ตฌ * chore: ์๋น์ค ํ์ดํ ๋ณ๊ฒฝ * [BE] build: Micrometer ์์กด์ฑ ์ถ๊ฐ (#244) * build: ๋ง์ดํฌ๋ก๋ฏธํฐ ์์กด์ฑ ์ถ๊ฐ Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> * chore: ์๋ธ๋ชจ๋ ์ ๋ฐ์ดํธ Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> --------- Co-authored-by: hyeonjilee <[email protected]> Co-authored-by: nayonsoso <[email protected]> * [FE] feat: ๊ณตํต ์ปดํฌ๋ํธ์ธ ์ฒดํฌ๋ฐ์ค์ ์ฒดํฌ๋ฐ์ค ์์ดํ ์ ์ (#240) * feat: ๊ณตํต ์ฒดํฌ๋ฐ์ค ์ปดํฌ๋ํธ ์์ฑ * feat: ์ฒดํฌ๋ฐ์ค์ ๋ ์ด๋ธ์ ๋ฌ ์ ์๋ CheckboxItem ์ปดํฌ๋ํธ ์์ฑ * fix: style์ ์๋ชป ์ ๋ฌํ๋ ๋ฌธ์ ํด๊ฒฐ * [BE] fix: CD ์คํฌ๋ฆฝํธ ์์ (#246) * fix: CD ์คํฌ๋ฆฝํธ ์์ * chore: ์ ์ฅ ๋ฐ์ดํฐ dev์์ ํ์ฉํ ์ ์๋๋ก ์์ * [FE] refactor: LandingPage ๊ฒฝ๋ก ๋ณ๊ฒฝ (#249) * refactor: LandingPage์ ๊ฒฝ๋ก ๋ณ๊ฒฝ * refactor: App ์์ ์ฌ์ด๋๋ฐ ์ฃผ์ ์ฒ๋ฆฌ * [BE] Swagger API ๋ฌธ์ ์ ๋ฐ์ดํธ (#254) * docs: ๋ฆฌ๋ทฐ api ๋ฌธ์๋ฅผ ์ํ swagger ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: ์ฌ์ฉํ์ง ์๋ dto ์ญ์ * docs: api ๋ฌธ์์ ์ต์ ๋ฐ ์ต๋ ์ค์ ์๋ด ์ถ๊ฐ * docs: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน api๋ฅผ ์ํ swagger ์ด๋ ธํ ์ด์ ์ถ๊ฐ * refactor: Spring์์ ์ ๊ณตํ๋ APPLICATION_JSON_VALUE ์ฌ์ฉ * [BE] feat: ์์ธ์ ๋ํ ๋ก๊ทธ ์์ฑ (#255) * feat: Controller advice ์ ๋ก๊น ์ถ๊ฐ * refactor: ์คํ ํธ๋ ์ด์ค ๋ก๊น ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน ์์ฑ์ ๊ธธ์ด ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ๋ต๋ณ ๊ธธ์ด ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ฝ๋ ๊ฒ์ฆ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ๋ฆฌ๋ทฐ ์กฐํ ๊ฒ์ฆ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ ํ๋ ํค์๋ ์กด์ฌํ์ง ์๋ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ค๋ณต ์ ํ๋ ํค์๋ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ํค์๋ ์กฐํ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ ํ ํค์๋ ๊ฐฏ์ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ ํ๋ ์ง๋ฌธ ์ค๋ณต ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ง๋ฌธ ์กฐํ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์ค๋ณต ์ง๋ฌธ ๊ฒ์ฆ ๋ก๊น ์ถ๊ฐ * feat: ์คํ๋ง ๋ฐ์ ์์ธ ๋ก๊น ์ ๋ฉ์ธ์ง ์ถ๊ฐ * feat: ์ธ์ฝ๋ฉ ์ค์ * style: ๊ฐํ ์์ Co-authored-by: Donghoon Lee <[email protected]> * style: ๊ฐํ ๋ฐ ๊ณต๋ฐฑ ์์ * refactor: ๋ถํ์ํ ๊ฒ์ฆ ์ ๊ฑฐ - ์ ํ๋ ํค์๋์ ์ง๋ฌธ์ด DB์ ์๋์ง๋ฅผ validator ์์ ๊ฒ์ฆํ ํ์๋, repository.getById ๋ฅผ ํ ๋ ํ๋ฒ ๋ ๊ฒ์ฆ์ด ๋ค์ด๊ฐ๋ค. ๋ฐ๋ผ์ 'DB์ ์๋์ง'์ ๋ํ ๊ฒ์ฆ์ validator ์์ ํ ํ์๋ ์๋ค๋ ํ๋จ ํ์ ํด๋น ๋ก์ง์ ์ญ์ ํ๋ค. --------- Co-authored-by: Donghoon Lee <[email protected]> * [FE] refactor: Textarea๋ฅผ ์ฌ์ฉํ๋ ๊ณตํต ์ฅ๋ฌธํ ๋ต๋ณ ์ ๋ ฅ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ (#252) * feat: ๊ณตํต textarea ์ปดํฌ๋ํธ ์์ฑ * refactor: longReviewItem์ ๋ก์ง์ ์ปค์คํ ํ ์ผ๋ก ๋ถ๋ฆฌ * refactor: longReviewItem์ผ๋ก ์ด๋ฆ ๋ณ๊ฒฝ ๋ฐ ์ปดํฌ๋ํธ ๊ตฌํ * chore: ๊ธฐ์กด์ ReviewItem ์ ๊ฑฐ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ LongReviewItem ์ ์ฉ * [FE] refactor: ๊ณต์ฉ ๋ชจ๋ฌ ํ ์ถ๊ฐ ๋ฐ LongReviewItem ๋ฆฌํฉํ ๋ง (#258) * feat: ๋ชจ๋ฌ ์ํ ๊ด๋ฆฌ ํ ์ถ๊ฐ * refactor: LongReviewItem ์ปดํฌ๋ํธ๊ฐ ์ธ๋ถ์ event๋ฅผ props๋ก ๋ฐ์ ์ ์๋๋ก ๋ณ๊ฒฝ * [FE] test: LandingPage์์ ์ฌ์ฉํ๋ API์ ๋ํ ํ ์คํธ ์์ฑ (#251) * chore: ๋ถํ์ํ Fragment ์ ๊ฑฐ * test: LandingPage์์ ์ฌ์ฉํ๋ api ํ ์คํธ ์ถ๊ฐ * [FE] refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ react query๋ฅผ ์ ์ฉํ๊ณ API ์ฐ๋ ํ ์คํธ ์์ฑ (#256) * refactor: ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๋ก์ง์ react query ์ ์ฉ * refactor: ๋ฆฌ๋ทฐ ์์ฑ ํ ๊ฒ์ ์์ฒญ ๋ก์ง์ useMutation ์ ์ฉ * refactor: query key ์์ํ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๋ก์ง์ useReviewForm์์ ์ ๊ฑฐ * chore: ๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์ ErrorSuspenseContainer ์ ์ฉ * chore: styled component๋ช ์์ * chore: ๋ฆฌ๋ทฐ ์์ฑ์ ์ํ mock data๋ฅผ ๋ณ๊ฒฝ๋ api ํ์์ ๋ง๊ฒ ์์ * chore: useGetDataToWrite๊ฐ ๋ ๋ง์ ๋ฐํ๊ฐ์ ์ ๊ณตํ๋๋ก ์์ * test: useGetDataToWrite์ API ์์ฒญ ํ ์คํธ ์์ฑ * chore: dataToWrite๊ฐ ์๋ ๊ฒฝ์ฐ ์ํ ๊ธฐ๋ณธ๊ฐ ์ง์ * chore: msw๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ๋ทฐ ์์ฑ post ์์ฒญ mocking * chore: ๋ฆฌ๋ทฐ ์ ๋ณด mocking data ์์ฑ * chore: useMutationReview๊ฐ UseMutationResult ํ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋๋ก ์ค์ * test: useMutateReview์ API ์์ฒญ ํ ์คํธ ์์ฑ * chore: useGetDataToWrite์ ๋ฐํ๊ฐ์ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์์ * chore: LongReviewItem ์ปดํฌ๋ํธ ์ ์ฉ * [FE] fix: ์ง๋ฌธ ๋ฒํธ๊ฐ ์๋ชป ์ถ๋ ฅ๋๋ ์ค๋ฅ ๋ฐ ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ์ ์๋ชป๋ ๊ฒฝ๋ก๋ก ์ด๋ํ๋ ์ค๋ฅ ์์ (#265) * fix: ์ง๋ฌธ ๋ฒํธ๊ฐ ์๋ชป ์ถ๋ ฅ๋๋ ์ค๋ฅ ์์ * fix: ๋ฆฌ๋ทฐ ์์ฑ ์๋ฃ ์ ์๋ชป๋ ๊ฒฝ๋ก๋ก ์ด๋๋๋ ๋ฌธ์ ์์ * [BE] feat: ์ง๋ฌธ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ์ผ๋ก ์นํ (#262) * chore: cd ํ ์คํธ ํ์ธ ์ฝ๋ ์์ฑ (#272) * fix: ์์ธ ๋ด์ฉ ํ์ํ ๋ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ ์นํ (#270) * [FE] feat: ํด๋ฆฝ๋ณด๋ ๋ณต์ฌ ์ปดํฌ๋ํธ ๊ตฌํ (#261) * feat: ํด๋ฆฝ๋ณด๋ ๋ณต์ฌ ์ปดํฌ๋ํธ ๊ตฌํ Co-authored-by: skylar1220 <[email protected]> * fix: ๋ถ๋ชจ ์์์ ๋๋น์ ๋ฐ๋ผ CopyTextButton์ด ์์์ง๋ ๋ฌธ์ ํด๊ฒฐ * refactor: ReviewGroupDataModal ์คํ์ผ ์กฐ์ - ์ ์ฒด ํฌ๊ธฐ ์ง์ ๋ฐ gap ์กฐ์ * chore: ๋ถํ์ํ padding ์ ๊ฑฐ * chore: index ํ์ผ์ CopyTextButton ์ถ๊ฐ --------- Co-authored-by: skylar1220 <[email protected]> * [FE] chore: front_deploy๋ฅผ develop์ ๋ฐ์ (#276) * [FE] feat: ์ง๋ฌธ ์์ฑ ํ์ด์ง QuestionCard, ReviewWritingCard ๊ณตํต ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ , ์ฌ๋ผ์ด๋ ๋ฐฉ์์ ๊ธฐ๋ฅ ์ถ๊ฐ (#247) * chore: .gitignore์์ ์ฃผ์ ์ ๊ฑฐ * feat: QuestionCard ์ปดํฌ๋ํธ ๊ตฌํ * feat: ReviewWritingCard ์ปดํฌ๋ํธ ๊ตฌํ * style: CSS ์์ฑ ์์ ์ ๋ ฌ * refactor: ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ๊ฐ๊ฐ Header์ Main ์น์ ์ผ๋ก ๋ถ๋ฆฌ * feat: ์ฌ๋ผ์ด๋ ๋ฐฉ์์ผ๋ก ์ง๋ฌธ ์นด๋๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์ ํ๋๋ ๊ธฐ๋ฅ ์ถ๊ฐ * design: pretendard ํฐํธ ์ ์ฉ * chore: ํค๋ review me ๋๋ฌธ์๋ก ๋ณ๊ฒฝ * refactor: QuestionCard, ReviewWritingCard ํด๋ ์์น ๋ณ๊ฒฝ - ReviewWritingFormPage์ components๋ก ์ด๋ * [FE] ์ง๋ฌธ ์์ ํ์ด์ง์ ํ์ํ ์ง๋ฌธ ๋ชฉ ๋ฐ์ดํฐ ๋ฐ ์นด๋์ ์ํ ์ฒ๋ฆฌ (#263) * [BE] fix: CD ์คํฌ๋ฆฝํธ ์์ (#246) * fix: CD ์คํฌ๋ฆฝํธ ์์ * chore: ์ ์ฅ ๋ฐ์ดํฐ dev์์ ํ์ฉํ ์โฆ
๐ ์ด๋ค ๊ธฐ๋ฅ์ ๊ตฌํํ๋์ ?
๐ฅ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ ?
๐ ์ด๋ค ๋ถ๋ถ์ ์ง์คํด์ ๋ฆฌ๋ทฐํด์ผ ํ ๊น์?
๐ ์ฐธ๊ณ ์๋ฃ, ํ ๋ง