-
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
[BE] feat: 리뷰에 필요한 정보 조회 기능 추가 #103
Conversation
Test Results19 tests +1 19 ✅ +1 0s ⏱️ ±0s Results for commit 07fa6a3. ± Comparison against base commit a9b409f. This pull request removes 2 and adds 3 tests. Note that renamed tests count towards both.
♻️ This comment has been updated with latest results. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
구현 짱 잘한다 !! 몇가지 의견 남겨두었으니 확인해주세요~!
import reviewme.keyword.dto.response.KeywordResponse; | ||
import reviewme.keyword.repository.KeywordRepository; | ||
|
||
@SpringBootTest(webEnvironment = WebEnvironment.NONE) |
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.
테스트 격리를 위해서 @ServiceTest
를 사용해 주세요~
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.
아차차 반영했습니다😂
@Test | ||
void 모든_리뷰_문항을_조회한다() { | ||
// given | ||
questionRepository.save(QuestionFixure.소프트스킬이_어떤가요.create()); |
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.
Fixture 사용 시에 static import 어떤가요 ? 이 경우에는 질문 내용을 내부 값으로 가지게 하고, 변수 이름에서 질문이라는 느낌을 주면 좋겠네요
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.
우선 빠뜨린(ㅎㅎ) static import 적용해두겠습니다!
fixture 자체에 질문을 드러내지 않는 방향은 고민해보고 반영할게요!
reviewerGroup.getId(), | ||
reviewerGroup.getGroupName(), | ||
reviewerGroup.getDescription(), | ||
reviewerGroup.getDeadline().toLocalDate(), |
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.
이거 어제 프론트에서 이야기나온 건데, 데드라인은 LocalDateTime
으로, 쓴 날짜는 LocalDate
로 합의된 것 같아 적어둡니다!
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.
마감일이 일 단위로 일주일로 정해진 줄 알았는데 리뷰생성 그 날.시간 기준으로 일주일인건가요? 후자가 맞다면 데드라인은 분 단위까지 필요하고 리뷰 단건 조회에는 분 단위없이 날짜만 있으면 될것 같아요
앗 와이어프레임에는 날짜까지만 표기가 되어있어서 어제 프론트의 얘기 상 전자라고 생각했어요!
우선 다들 후자, 즉 분 단위로 현재 이해하고 있는 것 같으니 반영하고, 얘기를 해보면 좋겠습니다!
() -> assertThat(actual.id()).isEqualTo(reviewerGroup.getId()), | ||
() -> assertThat(actual.reviewee().id()).isEqualTo(reviewee.getId()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ID 기반 비교니 .id()
말고 reviewee
로 비교하는 건 어떨까요?
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.
actual.reviewee()가 reviewee를 반환하지 않고 MemberResponse를 반환해서 id로 직접 비교할 수 밖에 없네요😂
@@ -32,4 +33,10 @@ public ResponseEntity<ReviewDetailResponse> findReview(@PathVariable long id, | |||
ReviewDetailResponse response = reviewService.findReview(id, memberId); | |||
return ResponseEntity.ok(response); | |||
} | |||
|
|||
@GetMapping("/reviews/write") |
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.
SwaggerDocs 사용 위해서 ReviewApi 등록하는 게 좋아보여요 ! (Dto에서 적어 둔 어노테이션이 무용지물이 되었습니다 😨 )
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.
호호호... 다 만들고 작동을 안시켜준 격이군요😅 반영했습니다!
@@ -75,4 +82,11 @@ public ReviewDetailResponse findReview(long reviewId, long memberId) { | |||
keywordContents | |||
); | |||
} | |||
|
|||
public ReviewCreationResponse findReviewCreationSetup(long reviewerGroupId) { |
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.
setup
말고 좋은 네이밍이 있을 것 같은데 같이 고민해봐요 👍🏻
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.
고생했습니다 커비 ~ 코멘트 확인 부탁해요 (●'◡'●)
List<QuestionResponse> questions, | ||
|
||
@Schema(description = "키워드 목록") | ||
List<KeywordResponse> keywords |
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.
KeywordResponse
내부에서 detail
을 content
로 변경해야 할 것 같아요!
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.
와우 놓쳤던 부분! 감사감사🙏
@@ -25,9 +30,11 @@ | |||
@RequiredArgsConstructor | |||
public class ReviewService { | |||
|
|||
private final ReviewerGroupService reviewerGroupService; |
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.
어떤 도메인은 Service
를 사용하고 어떤 도메인은 Repository
를 사용하고, 어떤 도메인은 둘 다 사용하고 있어요.
Service
와 repository
사용에 대한 기준이 명확했으면 합니다. 또 Service
에서 다른 Service
를 참조하는 것이 좋을까는 다음번에 같이 고민해보면 좋을 것 같네요!
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.
제 기준) 서비스에 1:1로 해당하는 엔티티가 아닌 다른 엔티티 관련 repo를 사용하는 로직은 다 해당 엔티티의 서비스로 분리해보았어요! 로직상 불가피한 경우가 아니라면 최대한 분리해서 책임을 나누고, 각 서비스가 지나치게 커지는 걸 방지하고 싶었어요. 하지만 아직 이 방식에 대해 논의해본적이 없으니 함께 고민해보면 좋겠네요!
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.
다음 리팩터링 때 고려해볼 사항으로 추가하죠~
import reviewme.review.domain.Question; | ||
|
||
public enum QuestionFixure { | ||
소프트스킬이_어떤가요, |
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.
이모티콘이 많이 섭섭해보이네요 바로 반영하겠습니다
@Test | ||
void 리뷰_생성_시_필요한_리뷰어_그룹_정보를_조회한다() { | ||
// given | ||
Member reviewee = memberRepository.save(new Member("산초", 1)); |
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.
Fixture를 사용 할 수 있을 것 같아요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아래의 리뷰어의 깃헙 아이디와 겹치지 않는 아이디를 배당한 것을 명시적으로 주고 싶었어요!
Member reviewee = memberRepository.save(new Member("산초", 1));
List<GithubId> reviewergithubIds = List.of(new GithubId(2), new GithubId(3));
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.
오프라인 설명 납득 완료
// then | ||
assertThat(questions).hasSize(1); | ||
} | ||
} |
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.
리뷰 서비스에 findReviewCreationSetup()
메서드에 대한 테스트도 하면 좋을 것 같아요!
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.
dto 때문에 혼란스러운 나
String thumbnailUrl, | ||
|
||
@Schema(description = "리뷰이") | ||
MemberResponse reviewee |
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.
우리 요청마다 DTO 를 만들어주기로 했었던 것 같은데,
이 MemberResponse 는 다른 DTO에서도 사용되고 있는 것 같아요.
ReviewCreationRevieweerGroupRevieweeResponse 이런식으로 DTO를 추가로 만들어주세용~
(근데 이름 이거 맞아,,?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
그거슨... 약간 또 저만의(?) 생각에서 나온 것인데요!
Member의 필드 id, name, githubId 중에 모든 경우에서 id, name이 쓰이는 것이 많은 멤버 응답의 기본형태일 것이라고 생각했어요!
- githubId는 id와 동일하게 식별자 역할을 하지만 github 종속적이기때문에 식별자가 필요하면 id를 쓸 것임. 즉, githubId는 응답으로 보내줄 일이 없음.
- name만 보내줄 일이 있지 않을까?: 그럼 그 때 name만 반환하는 DTO를 만들게되지 않을까?
따라서 id, name만을 가지는 MemberResponse를 기본형태라고 생각하고 컨텍스트를 추가하지 않은 기본형태로 다용도로 쓸 수 있는 약간의 예외 상황이라고 생각했습니다!
만 논의를 하지는 않았네요😂
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.
으앙 저도 dto 는 그냥 막 만들고 재사용하지 말자 주의였긴 했는데,
막 철저하게 나누려다보니 너무 중복 코드가 많아지는 것 같아 흔들리네요🫨
이것도 이슈에 남겨둘게요! 일단 지금은 넘어가도 될 것 같아요
public List<QuestionResponse> findAllQuestions() { | ||
return questionRepository.findAll() | ||
.stream() | ||
.map(question -> new QuestionResponse(question.getId(), question.getContent())) | ||
.toList(); | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
지금 약간쓰 혼란스러운게 있는데, 'Controller에서 호출되지 않는 서비스의 함수'가 dto를 리턴해도 괜찮을까요?
저희는 지금 dto와 요청 or 응답을 1 : 1 관계로 두고 있어요. 그러니 지금 이 함수처럼 서비스의 함수가 dto 를 리턴하게 된다면, 서비스의 모든 함수가 요청과 1 : 1 관계가 될 것인데요! 그럼 너무 재사용성이 떨어질 것 같다는 생각이 듭니다😓
예를 들어서 "모든 질문을 가져오되, 그 응답 내용이나 형식이 다르게 되는 api" 가 추가되는 상황을 생각해봐요. 그럼 dto 를 추가로 만들어야될 것이고, 그 dto를 반환하는 서비스의 함수가 또 생기게 될 것 같아요🤔 이건 다시 비효율적이라는 생각이 들어요!
그러니
- 컨트롤러에서 호출되지 않는 서비스 함수는 dto가 아니라 도메인을 반환하도록 하거나
- 아니면 컨트롤러에서 호출되는 서비스 함수 내부에 두거나
하면 어떨까 생각합니다,
그런데 여기까지는 제 생각이라 한번 이야기해보는 것도 좋을 것 같네요!
@donghoony @Kimprodp
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.
아하.. 컨트롤러에서 호출되지 않는 서비스 함수는 dto가 아니라 도메인을 반환하도록 하거나
부분 동의합니다!
이렇게 되면, 리뷰 그룹, 질문, 키워드를 각 서비스에서 호출해오지 않고 ReviewService 내에서 한번에 응답을 생성하는 게 더 적절하겠네요!(응답으로 변환하는 걸 제외하면 각 서비스로 분리한 메서드가 도메인만 반환하는 로직밖에 남지 않음)
ReviewService로 다시 몰아넣고, 테스트도 ReviewServiceTest로 통합하는 작업이라 좀 커서 추후 리팩토링 때 반영할게요!😂
import reviewme.review.dto.response.QuestionResponse; | ||
|
||
@Schema(description = "리뷰 생성 시 필요한 정보 응답") | ||
public record ReviewCreationResponse( |
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.
ReviewCreationReviewerGroupResponse 랑 다른 패키지에 있네요 😲
(ReviewCreationReviewerGroupResponse : member / ReviewCreationResponse : review)
dto 가 요청과 일대일 관계라면, 그 요청을 처리하는 컨트롤러가 있는 패키지에 있는게 자연스러울 것 같아요. 그런데 다른 패키지에 둔 이유가 있을까요?
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.
ReviewCreationReviewerGroupResponse는 ReviewerGroupService를 통해 반환되고,
ReviewCreationResponse는 ReviewerService를 통해 반환되는 DTO라서
반환되는 각 서비스에 해당하는 패키지에 있어야한다고 생각했어요!
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.
오~ 서비스에서 반환하는 것을 기준으로 나눈다는 것을 생각하면 일리가 있...는 것 같기도 하는데
아무래도 헷갈리네요.. ㅠㅠ
뭔가 하나의 응답 dto 와 관련된 것들은 한 곳에 모여있어야 할 것 같은 느낌이 듭니당
다음에 '컨트롤러에서 호출되지 않는 서비스가 dto를 반환하게 하지 않게 리팩터링' 할 때 옮겨주면 좋을 것 같아요!
public ReviewCreationResponse findReviewCreationSetup(long reviewerGroupId) { | ||
ReviewCreationReviewerGroupResponse reviewerGroup = reviewerGroupService.findReviewCreationReviewerGroup(reviewerGroupId); |
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.
커어프 👍
…ature/100-info-for-writing-review # Conflicts: # backend/src/test/java/reviewme/fixture/ReviewerGroupFixture.java
…ature/100-info-for-writing-review # Conflicts: # backend/src/main/java/reviewme/review/repository/QuestionRepository.java # backend/src/main/java/reviewme/review/service/ReviewService.java
…review' into be/feature/100-info-for-writing-review # Conflicts: # backend/src/main/java/reviewme/member/domain/ReviewerGroupGithubIds.java
* [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에서 활용할 수…
🚀 어떤 기능을 구현했나요 ?
🔥 어떻게 해결했나요 ?
📝 어떤 부분에 집중해서 리뷰해야 할까요?