Skip to content

LC-2864 user 후기 작성 문항 추가#2143

Merged
yeeun426 merged 3 commits intomainfrom
LC-2864-user-후기-작성-문항-추가
Feb 26, 2026

Hidden character warning

The head ref may contain hidden characters: "LC-2864-user-\ud6c4\uae30-\uc791\uc131-\ubb38\ud56d-\ucd94\uac00"
Merged

LC-2864 user 후기 작성 문항 추가#2143
yeeun426 merged 3 commits intomainfrom
LC-2864-user-후기-작성-문항-추가

Conversation

@yeeun426
Copy link
Contributor

@yeeun426 yeeun426 commented Feb 26, 2026

연관 작업

@github-actions github-actions bot changed the title Lc 2864 user 후기 작성 문항 추가 LC-2864 user 후기 작성 문항 추가 Feb 26, 2026
@gemini-code-assist
Copy link

Summary of Changes

Hello @yeeun426, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 사용자 후기 시스템에 멘토 피드백 관련 문항을 추가하여 후기의 상세도를 높이는 것을 목표로 합니다. 이를 통해 사용자는 멘토에 대한 구체적인 피드백을 제공할 수 있으며, 관리자는 이 정보를 활용하여 서비스 개선에 기여할 수 있습니다. 데이터 스키마, API 타입, 사용자 및 관리자 인터페이스가 모두 업데이트되어 새로운 피드백 흐름을 완벽하게 지원합니다.

Highlights

  • 새로운 피드백 문항 추가: 사용자 후기 작성 시 멘토 닉네임, 좋았던 점, 아쉬웠던 점을 입력할 수 있는 새로운 피드백 문항이 추가되었습니다.
  • 스키마 및 타입 정의 업데이트: 새로운 피드백 문항을 지원하기 위해 challengeGoalSchemaisFeedbackApplied 필드가 추가되었고, questionTypeSchema에 관련 enum 값이 확장되었습니다.
  • 사용자 인터페이스 업데이트: 챌린지 후기 작성 및 조회 페이지, 모바일 후기 모달, 대시보드 후기 생성 모달에 새로운 피드백 문항을 입력하고 표시하는 UI가 구현되었습니다.
  • 관리자 페이지 업데이트: 관리자 페이지의 후기 상세 모달에서 새로운 피드백 문항의 답변을 확인할 수 있도록 업데이트되었습니다.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • src/api/challenge/challengeSchema.ts
    • 챌린지 목표 스키마에 isFeedbackApplied 불리언 필드를 추가했습니다.
  • src/api/review/review.ts
    • 리뷰 질문 타입에 FEEDBACK_MENTOR_NICKNAME, FEEDBACK_GOOD_POINT, FEEDBACK_BAD_POINT를 추가했습니다.
  • src/app/(user)/mypage/review/challenge/[programId]/page.tsx
    • 챌린지 후기 조회 페이지에서 새로운 피드백 질문 유형을 가져와 표시하는 로직을 통합했습니다.
  • src/app/(user)/mypage/review/new/challenge/[programId]/page.tsx
    • 챌린지 후기 생성 페이지에 새로운 피드백 질문 필드와 유효성 검사를 구현했습니다.
  • src/domain/admin/review/ReviewDetailModal.tsx
    • 관리자 리뷰 상세 모달에 새로운 피드백 정보를 표시하도록 업데이트했습니다.
  • src/domain/challenge/MobileReviewModal.tsx
    • 모바일 리뷰 모달에 새로운 피드백 질문 필드와 유효성 검사를 통합했습니다.
  • src/domain/challenge/dashboard/modal/DashboardCreateReviewModal.tsx
    • 대시보드 리뷰 생성 모달에 새로운 피드백 질문 필드와 유효성 검사를 추가했습니다.
  • src/utils/convert.ts
    • 새로운 피드백 질문 유형을 해당 한국어 텍스트로 매핑했습니다.
Activity
  • 이 PR에 대한 특정 활동(댓글, 리뷰 등)은 현재까지 없습니다.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@yeeun426 yeeun426 self-assigned this Feb 26, 2026
@yeeun426 yeeun426 merged commit c9b1281 into main Feb 26, 2026
5 checks passed
Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

이번 PR은 챌린지 후기 작성 시 1:1 피드백 관련 문항을 추가하는 변경사항을 담고 있습니다. 전반적으로 기능 추가는 잘 이루어졌지만, 여러 파일에 걸쳐 하드코딩된 질문 내용과 임시 텍스트('test')가 발견되었습니다. 이는 사용자에게 잘못된 정보가 노출될 수 있는 심각한 문제이므로 반드시 수정이 필요합니다. 또한, 일부 컴포넌트에서 복잡한 조건문과 비효율적인 데이터 조회가 확인되어 가독성 및 성능 개선을 위한 리팩토링을 제안합니다. 자세한 내용은 각 파일에 남긴 리뷰 코멘트를 참고해주세요.

Comment on lines +133 to +145
{feedbackMentorNickname && (
<section>
<ReviewQuestion required className="mb-5">
6. 포트폴리오 2주 완성 챌린지 25기 1:1 피드백을 진행해 주신 멘토님의
닉네임을 작성해 주세요!
</ReviewQuestion>
<ReviewTextarea
value={feedbackMentorNickname ?? '-'}
readOnly
placeholder="test"
/>
</section>
)}

Choose a reason for hiding this comment

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

critical

후기 질문 내용에 '포트폴리오 2주 완성 챌린지 25기'와 같이 특정 프로그램 이름과 기수가 하드코딩되어 있습니다. 이 부분은 programTitle과 같은 동적 데이터를 사용하여 생성해야 합니다. 그렇지 않으면 모든 챌린지 후기 확인 페이지에서 동일한 질문이 표시되는 문제가 발생합니다. 이어지는 7, 8번 질문에도 동일한 문제가 있으며, placeholder에 'test'가 있는 것도 부적절합니다.

Comment on lines +207 to +210
<ReviewQuestion required className="mb-5">
6. 포트폴리오 2주 완성 챌린지 25기 1:1 피드백을 진행해 주신
멘토님의 닉네임을 작성해 주세요!
</ReviewQuestion>

Choose a reason for hiding this comment

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

critical

후기 질문 내용에 '포트폴리오 2주 완성 챌린지 25기'와 같이 특정 프로그램 이름과 기수가 하드코딩되어 있습니다. 이 부분은 programTitle과 같은 동적 데이터를 사용하여 생성해야 합니다. 이어지는 7, 8번 질문에도 동일한 문제가 있습니다.

Comment on lines +208 to +210
<ReviewQuestion required className="mb-5">
6. test
</ReviewQuestion>

Choose a reason for hiding this comment

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

critical

피드백 질문에 'test'라는 임시 텍스트가 하드코딩되어 있습니다. 이는 사용자에게 그대로 노출될 수 있는 심각한 문제입니다. programTitle과 같은 동적 데이터를 사용하여 완전한 질문을 구성해야 합니다. 다른 피드백 질문(7, 8번)과 플레이스홀더에도 동일한 문제가 있습니다.

Comment on lines +216 to +218
<ReviewQuestion required className="mb-5">
6. test
</ReviewQuestion>

Choose a reason for hiding this comment

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

critical

피드백 질문에 'test'라는 임시 텍스트가 하드코딩되어 있습니다. 이는 사용자에게 그대로 노출될 수 있는 심각한 문제입니다. programTitle과 같은 동적 데이터를 사용하여 완전한 질문을 구성해야 합니다. 다른 피드백 질문(7, 8번)과 플레이스홀더에도 동일한 문제가 있습니다.

Comment on lines +46 to +54
const feedbackMentorNickname = review?.reviewItemList?.find(
(r) => r.questionType === 'FEEDBACK_MENTOR_NICKNAME',
)?.answer;
const feedbackGoodPoint = review?.reviewItemList?.find(
(r) => r.questionType === 'FEEDBACK_GOOD_POINT',
)?.answer;
const feedbackBadPoint = review?.reviewItemList?.find(
(r) => r.questionType === 'FEEDBACK_BAD_POINT',
)?.answer;

Choose a reason for hiding this comment

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

medium

피드백 관련 답변을 가져오기 위해 reviewItemList 배열에 대해 find를 반복적으로 호출하고 있습니다. 이는 코드 중복이며 비효율적입니다. 모든 답변을 한 번의 순회로 추출하여 변수에 할당하거나 맵으로 만들어 사용하면 가독성과 성능을 개선할 수 있습니다.

Comment on lines 59 to +66
const isDisabled =
!score || !npsScore || !goodPoint || !badPoint || !goalResult;
!score ||
!npsScore ||
!goodPoint ||
!badPoint ||
!goalResult ||
(isFeedbackApplied &&
(!feedbackMentorNickname || !feedbackGoodPoint || !feedbackBadPoint));

Choose a reason for hiding this comment

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

medium

제출 버튼의 활성화 여부를 결정하는 isDisabled 조건이 복잡해지고 있습니다. 가이드라인의 '복잡한 조건 이름짓기' 규칙(241-272행)에 따라, 각 조건을 의미 있는 이름의 변수로 추출하여 가독성을 높이는 것을 권장합니다.

Suggested change
const isDisabled =
!score || !npsScore || !goodPoint || !badPoint || !goalResult;
!score ||
!npsScore ||
!goodPoint ||
!badPoint ||
!goalResult ||
(isFeedbackApplied &&
(!feedbackMentorNickname || !feedbackGoodPoint || !feedbackBadPoint));
const areCoreQuestionsMissing = !score || !npsScore || !goodPoint || !badPoint || !goalResult;
const areFeedbackQuestionsMissing =
isFeedbackApplied &&
(!feedbackMentorNickname || !feedbackGoodPoint || !feedbackBadPoint);
const isDisabled = areCoreQuestionsMissing || areFeedbackQuestionsMissing;
References
  1. 복잡한 불리언 조건을 명명된 변수에 할당하여 코드의 의미를 명확하게 하고 가독성을 향상시킵니다. (link)

Comment on lines +132 to +155
{selectedRow.reviewItemList?.find(
(item) => item.questionType === 'FEEDBACK_MENTOR_NICKNAME',
)?.answer && (
<>
<Typography variant="body1">
<strong>피드백 멘토 닉네임:</strong>{' '}
{selectedRow.reviewItemList?.find(
(item) => item.questionType === 'FEEDBACK_MENTOR_NICKNAME',
)?.answer || '-'}
</Typography>
<Typography variant="body1">
<strong>피드백 만족했던 점:</strong>{' '}
{selectedRow.reviewItemList?.find(
(item) => item.questionType === 'FEEDBACK_GOOD_POINT',
)?.answer || '-'}
</Typography>
<Typography variant="body1">
<strong>피드백 아쉬웠던 점:</strong>{' '}
{selectedRow.reviewItemList?.find(
(item) => item.questionType === 'FEEDBACK_BAD_POINT',
)?.answer || '-'}
</Typography>
</>
)}

Choose a reason for hiding this comment

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

medium

피드백 질문에 대한 답변을 표시하기 위해 selectedRow.reviewItemList 배열에 대해 find 메서드를 여러 번 호출하고 있습니다. 이는 비효율적이며 코드 중복입니다. 관련 답변들을 미리 변수로 추출한 후 사용하면 코드가 더 깔끔해지고 성능도 개선됩니다.

Comment on lines 56 to +63
const isDisabled =
!score || !npsScore || !goodPoint || !badPoint || !goalResult;
!score ||
!npsScore ||
!goodPoint ||
!badPoint ||
!goalResult ||
(isFeedbackApplied &&
(!feedbackMentorNickname || !feedbackGoodPoint || !feedbackBadPoint));

Choose a reason for hiding this comment

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

medium

제출 버튼의 활성화 여부를 결정하는 isDisabled 조건이 복잡합니다. 가이드라인의 '복잡한 조건 이름짓기' 규칙(241-272행)에 따라, 각 조건을 의미 있는 이름의 변수로 추출하여 가독성을 높이는 것을 권장합니다.

Suggested change
const isDisabled =
!score || !npsScore || !goodPoint || !badPoint || !goalResult;
!score ||
!npsScore ||
!goodPoint ||
!badPoint ||
!goalResult ||
(isFeedbackApplied &&
(!feedbackMentorNickname || !feedbackGoodPoint || !feedbackBadPoint));
const areCoreQuestionsMissing = !score || !npsScore || !goodPoint || !badPoint || !goalResult;
const areFeedbackQuestionsMissing =
isFeedbackApplied &&
(!feedbackMentorNickname || !feedbackGoodPoint || !feedbackBadPoint);
const isDisabled = areCoreQuestionsMissing || areFeedbackQuestionsMissing;
References
  1. 복잡한 불리언 조건을 명명된 변수에 할당하여 코드의 의미를 명확하게 하고 가독성을 향상시킵니다. (link)

Comment on lines 63 to +70
const isDisabled =
!score || !npsScore || !goodPoint || !badPoint || !goalResult;
!score ||
!npsScore ||
!goodPoint ||
!badPoint ||
!goalResult ||
(isFeedbackApplied &&
(!feedbackMentorNickname || !feedbackGoodPoint || !feedbackBadPoint));

Choose a reason for hiding this comment

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

medium

제출 버튼의 활성화 여부를 결정하는 isDisabled 조건이 복잡합니다. 가이드라인의 '복잡한 조건 이름짓기' 규칙(241-272행)에 따라, 각 조건을 의미 있는 이름의 변수로 추출하여 가독성을 높이는 것을 권장합니다.

Suggested change
const isDisabled =
!score || !npsScore || !goodPoint || !badPoint || !goalResult;
!score ||
!npsScore ||
!goodPoint ||
!badPoint ||
!goalResult ||
(isFeedbackApplied &&
(!feedbackMentorNickname || !feedbackGoodPoint || !feedbackBadPoint));
const areCoreQuestionsMissing = !score || !npsScore || !goodPoint || !badPoint || !goalResult;
const areFeedbackQuestionsMissing =
isFeedbackApplied &&
(!feedbackMentorNickname || !feedbackGoodPoint || !feedbackBadPoint);
const isDisabled = areCoreQuestionsMissing || areFeedbackQuestionsMissing;
References
  1. 복잡한 불리언 조건을 명명된 변수에 할당하여 코드의 의미를 명확하게 하고 가독성을 향상시킵니다. (link)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant