Skip to content

feat: 취향 요약 카드 추가#104

Merged
youngminss merged 7 commits intodevelopfrom
feature/result-taste-summary-card
Feb 23, 2026
Merged

feat: 취향 요약 카드 추가#104
youngminss merged 7 commits intodevelopfrom
feature/result-taste-summary-card

Conversation

@youngminss
Copy link
Member

🎯 PR 제목

feat: 취향 요약 카드 추가

📑 작업 상세 내역

  • 기능 추가

    • 취향 요약 카드 캐릭터 일러스트 이미지를 추가합니다
    • TasteSummaryCard 컴포넌트를 구현합니다
    • TasteSummaryCard export를 추가합니다
    • ResultView에 취향 요약 카드 섹션을 삽입합니다
  • 스타일 변경

    • 취향 요약 카드 및 레스토랑 카드 스타일을 수정합니다

🙏 리뷰 요청 사항

  • 불호/선호 케이스별 텍스트 생성 로직이 설계 스펙과 일치하는지 확인해주세요.
  • 한국어 조사 처리(을/를) 및 결론 문구 케이스가 올바른지 검토해주세요.

📃 참고 자료

🖼️ 작업 결과물

  • ResultView Head Section과 Restaurant List Section 사이에 취향 요약 카드 UI 노출

@youngminss youngminss added the ✨ Feature 기능 개발 label Feb 23, 2026
@youngminss youngminss self-assigned this Feb 23, 2026
@youngminss youngminss requested a review from RookieAND February 23, 2026 15:39
@github-actions github-actions bot added ✨ Feature 기능 개발 and removed ✨ Feature 기능 개발 labels Feb 23, 2026
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @youngminss, 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은 결과 페이지에 사용자의 음식 취향을 한눈에 파악할 수 있는 '취향 요약 카드'를 도입하여 사용자 경험을 향상시키는 것을 목표로 합니다. 사용자가 선택한 선호 및 불호 음식 카테고리를 기반으로 개인화된 요약 문구를 생성하고, 이를 시각적으로 매력적인 카드 형태로 제공하여 추천 레스토랑 목록을 보기 전에 자신의 취향을 명확히 이해할 수 있도록 돕습니다.

Highlights

  • 취향 요약 카드 컴포넌트 추가: 사용자의 음식 선호도와 불호도를 요약하여 표시하는 TasteSummaryCard 컴포넌트가 새로 구현되었습니다.
  • ResultView 통합: ResultViewTasteSummaryCard 섹션이 삽입되어 사용자에게 개인화된 취향 요약 정보를 제공합니다.
  • 한국어 조사 처리 로직 구현: 한국어의 특성을 반영하여 명사 뒤에 붙는 조사(을/를)를 올바르게 처리하고, 선호/불호 케이스별 결론 문구를 생성하는 로직이 추가되었습니다.
  • 캐릭터 일러스트 및 스타일 업데이트: 취향 요약 카드에 사용될 캐릭터 일러스트 이미지가 추가되었으며, 취향 요약 카드와 레스토랑 카드(OtherCandidateCard)의 스타일이 수정되었습니다.

🧠 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/pageComponents/gathering/opinion/ResultView.tsx
    • TasteSummaryCard 컴포넌트를 임포트하고, recommendationResultpreferencesdislikes를 prop으로 전달하여 렌더링하도록 수정되었습니다.
  • src/pageComponents/gathering/opinion/TasteSummaryCard.tsx
    • 새로운 TasteSummaryCard 컴포넌트 파일이 추가되었습니다. 이 컴포넌트는 computeTasteSummary 함수를 통해 사용자의 선호/불호 데이터를 분석하여 요약 텍스트를 생성하고, 한국어 조사(을/를) 처리를 위한 getEulReul 함수를 포함합니다. 또한, 캐릭터 일러스트와 함께 요약된 취향 정보를 시각적으로 표시합니다.
  • src/pageComponents/gathering/opinion/index.ts
    • TasteSummaryCard 컴포넌트를 외부에서 사용할 수 있도록 export 목록에 추가되었습니다.
  • src/pageComponents/gathering/restaurantCard/OtherCandidateCard.tsx
    • ChevronRightIcon 임포트가 제거되었고, 레스토랑 이미지 컨테이너의 스타일이 inset-ring-1에서 border ygi:border-solid ygi:border-border-default로 변경되었습니다.
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.

@github-actions github-actions bot added the ☑️ Need Review 작업이 완료되어 리뷰를 기다리고 있는 PR 입니다 label Feb 23, 2026
Copy link
Contributor

@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

computeTasteSummary 함수의 로직 오류, Props 정의에 interface 사용, 스타일 값 하드코딩, index.ts에서 타입 미노출 등 여러 수정이 필요한 부분을 발견했습니다. 각 항목에 대한 자세한 내용은 개별 코멘트를 참고해주세요.

Comment on lines +56 to +70
if (allCategoriesDisliked && nonAnyPrefs.length === 0) {
dislikeHighlight = "피하고 싶은 음식";
dislikeSuffix = "이 모두 다르고";
} else if (allCategoriesDisliked) {
dislikeHighlight = "피하고 싶은 음식";
dislikeSuffix = "이 모두 달라서";
} else if (nonAnyDislikes.length === 0 && nonAnyPrefs.length === 1) {
dislikeHighlight = "피하고 싶은 음식";
dislikeSuffix = "없고";
} else {
const lastLabel =
FOOD_CATEGORY_LABEL[nonAnyDislikes[nonAnyDislikes.length - 1]];
dislikeHighlight = formatFoodList(nonAnyDislikes);
dislikeSuffix = `${getEulReul(lastLabel)} 빼고`;
}
Copy link
Contributor

Choose a reason for hiding this comment

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

high

computeTasteSummary 함수의 불호 음식 텍스트 생성 로직에 오류가 발생할 가능성이 있습니다. nonAnyDislikes 배열이 비어 있을 때 마지막 else 블록으로 빠져, dislikeHighlight는 빈 문자열이 되고 dislikeSuffix"을(를) 빼고"와 같이 의도치 않은 값으로 조합될 수 있습니다. 이로 인해 "을(를) 빼고"라는 어색한 문장이 노출될 수 있습니다. nonAnyDislikes가 비어있는 경우를 명시적으로 처리하도록 로직을 수정하는 것을 제안합니다.

	if (allCategoriesDisliked) {
		dislikeHighlight = "피하고 싶은 음식";
		dislikeSuffix = nonAnyPrefs.length === 0 ? "이 모두 다르고" : "이 모두 달라서";
	} else if (nonAnyDislikes.length === 0) {
		dislikeHighlight = "피하고 싶은 음식";
		dislikeSuffix = "없고";
	} else {
		const lastLabel =
			FOOD_CATEGORY_LABEL[nonAnyDislikes[nonAnyDislikes.length - 1]];
		dislikeHighlight = formatFoodList(nonAnyDislikes);
		dislikeSuffix = `${getEulReul(lastLabel)} 빼고`;
	}

} = computeTasteSummary(preferences, dislikes);

return (
<div className="ygi:flex ygi:flex-col ygi:gap-5 ygi:rounded-md ygi:bg-surface-white ygi:p-5">
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

Tailwind CSS 클래스에 gap-5, p-5와 같이 하드코딩된 숫자 값을 사용하고 있습니다. 스타일 가이드(라인 316, 489)에 따라 gap-md, p-lg 등 사전에 정의된 디자인 토큰을 사용해야 합니다. 이 컴포넌트 내의 다른 클래스(h-30.25, w-52.75, ml-1.5 등)에서도 같은 문제가 발견되었으니 일관성 있는 수정을 부탁드립니다.

References
  1. Always use design tokens for spacing, color, and typography. Avoid hard-coded values (lines 316, 489). (link)

@youngminss youngminss merged commit 816fa96 into develop Feb 23, 2026
6 checks passed
github-actions bot pushed a commit that referenced this pull request Feb 23, 2026
## [1.6.0-beta.3](v1.6.0-beta.2...v1.6.0-beta.3) (2026-02-23)

### Features

* 취향 요약 카드 추가 ([#104](#104)) ([816fa96](816fa96))
github-actions bot pushed a commit that referenced this pull request Feb 27, 2026
## [2.0.0](v1.5.1...v2.0.0) (2026-02-27)

### ⚠ BREAKING CHANGES

* OpinionForm field names changed

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* refactor: update schema field names and exports

- foodCategorySchema → categorySchema
- dislikedFoodSchema → dislikedCategoriesSchema
- preferredMenusSchema → preferredCategoriesSchema
- Update opinionFormSchema with new field names
- Replace hardcoded "ANY" with CATEGORY.ANY
* Schema field names changed

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* refactor: rename component files to use Category naming

- FoodCard → CategoryCard
- FoodCategoryCarousel → CategoryCarousel
- DislikedFoodButton → DislikedCategoryButton

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* refactor: update component export names

- FoodCard → CategoryCard
- FoodCategoryCarousel → CategoryCarousel
- DislikedFoodButton → DislikedCategoryButton
- Update component function names to match new file names
- Internal logic unchanged (will be updated in next PR)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* refactor: update import references to use new constant names

- Update all components to use new constant names:
  * RANKS → RANK_LIST
  * RANK_LABELS → RANK_LABEL
  * FOOD_CATEGORIES → CATEGORY_LIST
  * FOOD_CATEGORY_LABEL → CATEGORY_LABEL
  * FOOD_CATEGORY_VALUES → CATEGORY_VALUES
  * dislikedFoodSchema → dislikedCategoriesSchema
  * preferredMenusSchema → preferredCategoriesSchema

- Update type imports:
  * FoodCategory → Category

- Update form field references:
  * dislikedFoods → dislikedCategories
  * preferredMenus → preferredCategories

- Fix component imports after file renames:
  * FoodCategoryCarousel → CategoryCarousel
  * DislikedFoodButton → DislikedCategoryButton

This ensures the build succeeds after type system changes.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* style: run prettier format

- Format code according to project prettier rules
- No logic changes, only formatting

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

### Features

* 404, 500 에러 페이지 추가 ([#107](#107)) ([e9e5772](e9e5772))
* opinion 랜딩 페이지 UI 업데이트 (로고·lottie·footer) ([#120](#120)) ([2817c50](2817c50))
* SSE Event Registry 시스템 구현 및 마이그레이션 ([#119](#119)) ([178c79c](178c79c))
* SSE 기반 실시간 모임 현황 업데이트 구현 ([#87](#87)) ([0d220e0](0d220e0))
* 결과 페이지 - 투표 결과 섹션 구현 ([#106](#106)) ([c633225](c633225))
* 과반수 이상 의견 제출 시 추천 결과 생성 관련 API, Hook 추가 ([#103](#103)) ([5b31eec](5b31eec)), closes [#105](#105)
* 인원 수 선택 시 시각적 피드백 추가 ([e9f6de6](e9f6de6))
* 추천 결과 API response 타입 업데이트 ([#100](#100)) ([1d046ab](1d046ab)), closes [#101](#101) [#102](#102)
* 추천 결과 생성 대기 페이지 및 애니메이션 구현 ([#118](#118)) ([a720a76](a720a76))
* 취향 요약 카드 추가 ([#104](#104)) ([816fa96](816fa96))

### Bug Fixes

* 1, 3순위를 선택했으나 2순위를 선택하지 않았을 경우 Validation 을 막지 않았던 문제 수정 ([#113](#113)) ([22e58e8](22e58e8))
* GitHub Actions 워크플로우 개선 및 스타일 가이드 업데이트 ([#91](#91)) ([e6c009e](e6c009e))
* 결과 대기 페이지 내 공유 버튼 스타일을 Tertiary 로 수정 ([#115](#115)) ([a63ddd1](a63ddd1))
* 결과 페이지 - 상단 취향 요약 섹션, 하단 투표 결과 선호 카테고리 노출 순서 로직 수정 ([#117](#117)) ([f5c4a1c](f5c4a1c))
* 모임 인원 초과 및 결과 생성 완료 시 Toast 커스텀 기능 추가 ([#116](#116)) ([6088935](6088935))
* 음식 카테고리 일러스트레이터를 Figma 내 최신 시안으로 수정 ([#114](#114)) ([18f9cc3](18f9cc3))

### Code Refactoring

* opinion 페이지 컴포넌트 구조 개선 및 로직 통합 ([#109](#109)) ([a76f75f](a76f75f))
* PeopleIllustration 캐릭터 배치 및 구조 개선 ([#112](#112)) ([ae95b72](ae95b72))
* ProgressBar 컴포넌트 UI 개선 및 코드 최적화 ([#122](#122)) ([c73de1d](c73de1d))
* SSE 이벤트를 recommend-result-created로 변경 ([#121](#121)) ([222e613](222e613))
* 타입 시스템 리팩토링 - enum을 as const 패턴으로 전환 ([#110](#110)) ([d427378](d427378)), closes [#111](#111)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feature 기능 개발 ☑️ Need Review 작업이 완료되어 리뷰를 기다리고 있는 PR 입니다

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant