Skip to content

[FEAT] 찜 목록 API 연동 - #252

Merged
KJun-2 merged 16 commits into
developfrom
feature/user-likes-api
Aug 6, 2026
Merged

[FEAT] 찜 목록 API 연동 #252
KJun-2 merged 16 commits into
developfrom
feature/user-likes-api

Conversation

@KJun-2

@KJun-2 KJun-2 commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

작업 내용

  • 찜 목록 조회 API(GET /users/me/likes) 연동 및 useLikedItems 무한 스크롤 훅 추가
  • EVENT 카테고리 쿼리 파라미터를 서버 규격(CONTENT)에 맞게 매핑
  • 코스 기간(duration)을 한글 라벨(당일치기/1박 2일/2박 3일/3박 이상)로 변환하여 표시
  • Google Places API 기반 장소 영업시간 조회 기능 추가
  • 코스 상세, 좋아요 장소 카드, 축제 상세 장소 카드에 정규 영업시간 표시
  • 정규 휴무일은 휴무, 정보 미제공 시 영업시간 정보 없음 표시
  • Vite 로컬 환경과 Vercel 배포 환경에서 영업시간 조회 API 동작하도록 설정

변경 화면

  • 찜 목록 페이지 (전체/코스/이벤트/장소 필터)
  • 코스 상세 페이지
  • 좋아요 페이지의 장소 카드
  • 축제 상세 페이지

확인 방법

  1. 찜 목록 페이지 진입 후 카테고리(전체/코스/이벤트/장소)별 필터가 정상 동작하는지 확인
  2. 코스 카테고리 항목의 기간이 한글 라벨(당일치기 등)로 표시되는지 확인
  3. 장소에 이미지 구글 api 연동해서 사용 예정입니다. 다음 작업에서 진행하니 동작만 확인해주세요
  4. 코스 상세, 좋아요의 장소 카드, 축제 상세에서 영업시간 표시를 확인합니다.
  5. 영업시간이 없는 장소는 영업시간 정보 없음, 정규 휴무일은 휴무로 표시되는지 확인합니다.

체크리스트

  • 로컬 실행 확인
  • 콘솔 에러 없음
  • 반응형 확인
  • 불필요한 console.log 제거
  • develop 최신 반영 완료
  • 관련 없는 파일 변경 없음

스크린샷

image image

참고 사항

  • EVENT 카테고리는 서버 API 규격상 CONTENT로 파라미터가 전달되어야 하므로 매핑 처리함
  • Google Places API 키는 GOOGLE_MAPS_API_KEY 환경 변수로 설정해야 합니다.
  • 영업시간은 Google Places에 등록된 정규 영업시간을 기준으로 표시합니다.

관련 이슈

Closes #245

Summary by CodeRabbit

  • 새로운 기능

    • 좋아요 목록을 실제 데이터로 조회하고, 카테고리·검색어·정렬 필터와 무한 스크롤을 지원합니다.
    • 좋아요한 코스·행사·장소의 거리, 동행 유형 아이콘, 태그와 상세 정보를 표시합니다.
    • 코스·행사·장소 상세 화면에서 당일 영업시간을 확인할 수 있습니다.
    • 장소 영업시간이 없을 경우 안내 문구를 제공합니다.
  • 개선 사항

    • 좋아요 취소 및 상세 페이지 이동을 항목 유형에 맞게 처리합니다.
    • 로딩, 빈 결과, 오류 상태를 구분해 안내합니다.

KJun-2 added 9 commits July 29, 2026 16:41
- 찜 목록 조회 API(likes.api.ts)와 useLikedItems 훅 추가
- EVENT 카테고리 쿼리 파라미터를 서버 규격(CONTENT)에 맞게 매핑
- 코스 기간을 한글 라벨(당일치기/1박 2일 등)로 변환
- Kakao Map에 Haversine 기반 현위치-장소 거리 계산 및 표시 추가
@vercel

vercel Bot commented Aug 6, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
frontend Ready Ready Preview Aug 6, 2026 12:57pm

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

찜 목록을 실제 API와 무한 스크롤에 연결했습니다. 항목 매핑, 거리·동행 정보 표시, 좋아요 취소와 상세 이동을 추가했습니다. Google Places 영업시간 조회를 구현하고 찜 목록과 상세 화면에 당일 영업시간을 표시했습니다.

Changes

찜 목록 API 및 화면

Layer / File(s) Summary
찜 목록 API 계약과 조회
src/apis/likes.api.ts, src/pages/likes/types.ts, src/pages/likes/hooks/useLikedItems.ts
조회 파라미터와 응답 타입을 추가했습니다. EVENTCONTENT 카테고리를 변환합니다. 커서 기반 무한 조회와 요청 취소를 지원합니다.
찜 항목 매핑과 카드 표시
src/pages/likes/utils/likedItems.ts, src/components/common/ContentCard.tsx, src/components/common/CourseCard.tsx, tests/liked-item-distance.test.ts
API 응답을 화면 모델로 변환합니다. 거리, 날짜, 코스 메타데이터와 동행 유형별 아이콘을 표시합니다. 관련 매핑과 거리 동작을 테스트합니다.
찜 목록 화면 통합
src/pages/likes/index.tsx, src/pages/likes/constants/filters.ts, src/pages/likes/constants/mockLikedItems.ts
목업 데이터를 제거하고 API 데이터를 렌더링합니다. 검색, 필터, 정렬, 무한 스크롤, 상세 이동, 좋아요 취소, 로딩·빈 결과·오류 상태를 처리합니다.

Google Places 영업시간

Layer / File(s) Summary
Google Places 영업시간 서비스
api/google-places/placeHours.ts, api/google-places/hours.ts, src/apis/googlePlacesHours.ts, vite.config.ts, vercel.json, .env.example
Google Places 검색과 상세 조회를 연결합니다. 요청 검증, 오류 상태, 개발 서버 미들웨어, 운영 rewrite, API 키 예시를 추가합니다.
영업시간 조회 훅과 상세 화면 표시
src/hooks/usePlaceOpeningHours.ts, src/pages/detail/components/CourseDetailLayout.tsx, src/pages/detail/festival/index.tsx
장소별 영업시간을 캐시하고 한국 시간 기준 당일 값을 포맷합니다. 코스와 행사 상세 화면에 조회 결과 또는 영업시간 정보 없음을 표시합니다.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant LikesPage
  participant useLikedItems
  participant getLikedItems
  participant LikesAPI
  LikesPage->>useLikedItems: 필터·검색어·정렬 전달
  useLikedItems->>getLikedItems: 커서와 AbortSignal 전달
  getLikedItems->>LikesAPI: GET /users/me/likes
  LikesAPI-->>getLikedItems: 좋아요 항목과 다음 커서 반환
  getLikedItems-->>useLikedItems: 앱 형식으로 변환된 응답 반환
  useLikedItems-->>LikesPage: 페이지 목록 갱신
Loading
sequenceDiagram
  participant DetailPage
  participant usePlaceOpeningHours
  participant getPlaceHours
  participant HoursHandler
  participant GooglePlaces
  DetailPage->>usePlaceOpeningHours: 장소 목록 전달
  usePlaceOpeningHours->>getPlaceHours: 장소별 조회 요청
  getPlaceHours->>HoursHandler: POST /google-places/hours
  HoursHandler->>GooglePlaces: 텍스트 검색 및 장소 상세 조회
  GooglePlaces-->>HoursHandler: 영업시간 데이터 반환
  HoursHandler-->>getPlaceHours: 영업시간 응답 반환
  getPlaceHours-->>usePlaceOpeningHours: 장소별 결과 반환
  usePlaceOpeningHours-->>DetailPage: 당일 영업시간 표시
Loading

Possibly related PRs

Suggested reviewers: kimtaehyeokkkk

🚥 Pre-merge checks | ✅ 2 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning API 연동, 무한 스크롤, EVENT 매핑, 기간 라벨은 구현했지만 Kakao Map의 Haversine 거리 계산은 확인되지 않습니다. 현위치 좌표와 장소 좌표로 Haversine 거리를 계산하고 Kakao Map 및 찜 카드에 결과를 표시하세요.
Out of Scope Changes check ⚠️ Warning Google Places 영업시간 API와 상세 페이지 연동 등 찜 목록 및 지도 거리 요구사항과 무관한 변경이 포함되었습니다. Google Places 영업시간과 상세 페이지 변경을 제거하거나 별도의 pull request로 분리하세요.
Docstring Coverage ⚠️ Warning Docstring coverage is 20.83% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 찜 목록 API 연동이라는 pull request의 주요 변경 사항을 명확하고 간결하게 설명합니다.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/user-likes-api

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/apis/likes.api.ts`:
- Around line 40-53: Extend RawLikedItemResponse with the server’s event/place
detail classification field, then map it to LikedItem.detailType in the
liked-items transformation used by filterLikedItems instead of always assigning
null. Treat a missing value as unavailable and suppress event/place
detail-filter options when the server does not provide that classification.

In `@src/components/kakaomap/utils/kakaoMap.ts`:
- Around line 56-62: 거리 계산 함수의 중간값 a가 부동소수점 오차로 1을 초과하지 않도록 1 이하로 제한하세요. 반환 계산은
Math.asin(Math.sqrt(a)) 대신 제한된 a를 사용하는 Math.atan2 기반의 안정적인 대척점 거리 계산으로 변경하고, 기존
EARTH_RADIUS_METERS 스케일링은 유지하세요.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 6c3815a7-238d-49f2-bfd4-7ea213435ab0

📥 Commits

Reviewing files that changed from the base of the PR and between c79d60f and bd2898a.

📒 Files selected for processing (7)
  • src/apis/likes.api.ts
  • src/components/kakaomap/utils/kakaoMap.ts
  • src/pages/likes/hooks/useLikedItems.ts
  • src/pages/likes/index.tsx
  • src/pages/likes/types.ts
  • src/pages/likes/utils/likedItems.ts
  • src/utils/courseCard.ts
📜 Review details
🧰 Additional context used
🧠 Learnings (5)
📚 Learning: 2026-07-26T17:09:23.387Z
Learnt from: KJun-2
Repo: yeogido/frontend PR: 125
File: src/pages/local-recommendation/course-basic-info/components/CompanionSelector.tsx:82-90
Timestamp: 2026-07-26T17:09:23.387Z
Learning: 이 프로젝트의 반응형 스케일 정책에서는 텍스트(폰트) 크기를 설계 기준 값에 전역 `scale`을 곱해 비율대로 스케일하세요. `12px`, `14px`처럼 특정 최소 하한을 강제로 적용하거나(클램프/바닥값) 임의의 픽셀 값으로 제한하지 마세요. 즉, 기준값(디자인 스펙) × `scale` 방식으로 계산해 비율이 유지되도록 구현합니다.

Applied to files:

  • src/pages/likes/index.tsx
📚 Learning: 2026-08-03T09:41:11.931Z
Learnt from: KJun-2
Repo: yeogido/frontend PR: 188
File: src/pages/detail/components/CourseDetailLayout.tsx:202-205
Timestamp: 2026-08-03T09:41:11.931Z
Learning: When implementing the shared back-navigation UI component in yeogido/frontend, manage all UI dimensions, including positional offsets, according to the project’s global `scale` policy so the component remains visually consistent across screens.

Applied to files:

  • src/pages/likes/index.tsx
📚 Learning: 2026-07-26T17:09:27.685Z
Learnt from: KJun-2
Repo: yeogido/frontend PR: 125
File: src/pages/local-recommendation/course-basic-info/components/TransportSelector.tsx:84-91
Timestamp: 2026-07-26T17:09:27.685Z
Learning: In this project’s 390px-based continuous responsive scaling, do not apply an artificial minimum lower bound to text sizes (e.g., avoid clamping via Math.max/min-font-size patterns). Instead, compute typography using proportional ratio scaling: render font sizes as `VALUE * scale` (for example, `DESCRIPTION_FONT_SIZE * scale`). During review, flag any code that enforces a hard minimum text size that breaks the intended proportional scaling.

Applied to files:

  • src/pages/likes/index.tsx
📚 Learning: 2026-07-26T17:09:32.991Z
Learnt from: KJun-2
Repo: yeogido/frontend PR: 125
File: src/pages/local-recommendation/tag-selection/components/KeywordSelectionSection.tsx:51-56
Timestamp: 2026-07-26T17:09:32.991Z
Learning: When implementing responsive scaling in this project, prefer direct proportional calculations (e.g., using `VALUE * scale`) without applying artificial minimum lower bounds (clamps) to text sizes or other visual dimensions. Only introduce a lower bound when there is an explicitly documented exception; the primary allowed example is enforcing a 44px minimum touch target for interactive elements. In review, flag new/minimum clamps for text/visual dimensions unless they match an explicitly documented exception.

Applied to files:

  • src/pages/likes/index.tsx
📚 Learning: 2026-07-26T17:09:40.303Z
Learnt from: KJun-2
Repo: yeogido/frontend PR: 125
File: src/pages/local-recommendation/tag-selection/components/RepresentativePhotoSection.tsx:107-122
Timestamp: 2026-07-26T17:09:40.303Z
Learning: yeogido/frontend의 반응형 스케일 정책에 맞춰, 텍스트를 포함한 UI 치수는 (디자인 기준값) × 전역 `scale`로 “연속적으로” 계산하고, 12px·14px 같은 최소 폰트/사이즈 하한(floor) 클램프를 적용하지 않는다. `scaleValue`를 쓰더라도 텍스트에 임의의 minimum floor를 추가하거나 `Math.max(value, 12/14)` 같은 보정을 넣지 말 것.

Applied to files:

  • src/pages/likes/index.tsx
🔇 Additional comments (5)
src/pages/likes/types.ts (1)

3-4: LGTM!

Also applies to: 30-30

src/pages/likes/utils/likedItems.ts (1)

13-19: LGTM!

Also applies to: 130-148

src/utils/courseCard.ts (1)

9-9: LGTM!

src/pages/likes/hooks/useLikedItems.ts (1)

17-45: LGTM!

src/components/kakaomap/utils/kakaoMap.ts (1)

41-55: LGTM!

Also applies to: 65-71

Comment thread src/apis/likes.api.ts
Comment thread src/components/kakaomap/utils/kakaoMap.ts Outdated
KJun-2 and others added 3 commits August 6, 2026 18:11
- 좋아요 목록 응답의 distance를 PLACE 카테고리 카드에 "현위치와 N KM"으로 표시
- 디자인 시안에 맞춰 카드 정보 줄 레이아웃 조정
  - 아이콘을 늘리지 않고 14px 슬롯 가운데 원본 크기로 배치
  - 태그 없는 카드는 정보 줄 간격을 넓게(22px) 사용
- 사용하지 않는 목 데이터(mockLikedItems) 제거

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- 좋아요 목록 응답에 행사/장소 분류 값이 없어 항상 0건이던 2번째 필터 옵션 제거
- 하버사인 중간값을 1로 제한하고 asin 대신 atan2를 써 대척점에서 NaN이 나지 않게 수정
- 두 동작에 대한 테스트 추가

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ature/user-likes-api

# Conflicts:
#	src/utils/courseCard.ts
@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

kimtaehyeokkkk
kimtaehyeokkkk previously approved these changes Aug 6, 2026

@kimtaehyeokkkk kimtaehyeokkkk left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Image 좋아요 눌렀을 때 잘 들어가는 거 확인했습니다! 다음에 상세페이지도 들어갈 수 있게 하면 좋을 거 같습니다!!

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 7

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@api/google-places/hours.ts`:
- Around line 15-39: Update the handler function to enforce server-side usage
controls before lookupPlaceHours, including an IP- or user-based rate limit and
a server-side cache for repeated requests. Also restrict the GOOGLE_MAPS_API_KEY
to the required Google APIs and deployment origins, while preserving the
existing method, validation, and error responses.

In `@api/google-places/placeHours.ts`:
- Around line 93-99: Update the Place Details request in the fetch call to
include the languageCode=ko query parameter, ensuring formatTodayOpeningHours
receives Korean weekday labels while preserving the existing placeId encoding
and field mask.
- Around line 85-90: Update the place lookup flow around searchResult and
placeId so it does not blindly accept searchResult.places[0]. Request the
identifying fields needed to validate candidates, such as name, address, and
coordinates, compare the candidate with the requested place and the Place
Details response, and return null when no candidate matches; only persist and
pass along a validated Google Place ID.

In `@src/hooks/usePlaceOpeningHours.ts`:
- Around line 68-72: Update formatTodayOpeningHours to prioritize
hours.currentOpeningHours when determining today’s description, falling back to
regularWeekdayDescriptions and then currentWeekdayDescriptions only when the
current opening-hours data is unavailable. Preserve the existing return
formatting while ensuring holidays and special schedules use the current-day
values.

In `@src/pages/detail/festival/index.tsx`:
- Line 204: Update the event information card props around festivalPlaceHours so
its hours value uses the fetched same-day operating hours instead of
festivalDetail.period. Preserve the existing fallback text when no
operating-hours data is available.

In `@src/pages/likes/index.tsx`:
- Around line 275-276: Update the card rendering around handleCardClick and
ContentCard so PLACE items do not receive an onClick handler or appear
interactive. In ContentCard, add keyboard handling for Enter and Space that
invokes onClick, while preserving the existing role="button" and tabIndex
behavior for clickable COURSE and EVENT cards.
- Around line 136-142: Update the opening-hours flow around usePlaceOpeningHours
so it does not create one Google Places query for every accumulated PLACE item
in likedItems. Limit lookups to the currently visible items or route them
through a batched, concurrency-limited API, while preserving the displayed
opening-hours behavior for items that are actually shown.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 029b7d69-b6cf-4b94-a871-4d8a75af6ce6

📥 Commits

Reviewing files that changed from the base of the PR and between 1ce9cb4 and 08b9d58.

📒 Files selected for processing (11)
  • .env.example
  • api/google-places/hours.ts
  • api/google-places/placeHours.ts
  • src/apis/googlePlacesHours.ts
  • src/components/kakaomap/utils/kakaoMap.ts
  • src/hooks/usePlaceOpeningHours.ts
  • src/pages/detail/components/CourseDetailLayout.tsx
  • src/pages/detail/festival/index.tsx
  • src/pages/likes/index.tsx
  • vercel.json
  • vite.config.ts
💤 Files with no reviewable changes (1)
  • src/components/kakaomap/utils/kakaoMap.ts
📜 Review details
🧰 Additional context used
🧠 Learnings (5)
📚 Learning: 2026-07-26T17:09:23.387Z
Learnt from: KJun-2
Repo: yeogido/frontend PR: 125
File: src/pages/local-recommendation/course-basic-info/components/CompanionSelector.tsx:82-90
Timestamp: 2026-07-26T17:09:23.387Z
Learning: 이 프로젝트의 반응형 스케일 정책에서는 텍스트(폰트) 크기를 설계 기준 값에 전역 `scale`을 곱해 비율대로 스케일하세요. `12px`, `14px`처럼 특정 최소 하한을 강제로 적용하거나(클램프/바닥값) 임의의 픽셀 값으로 제한하지 마세요. 즉, 기준값(디자인 스펙) × `scale` 방식으로 계산해 비율이 유지되도록 구현합니다.

Applied to files:

  • src/pages/detail/festival/index.tsx
  • src/pages/detail/components/CourseDetailLayout.tsx
  • src/pages/likes/index.tsx
📚 Learning: 2026-08-03T09:41:11.931Z
Learnt from: KJun-2
Repo: yeogido/frontend PR: 188
File: src/pages/detail/components/CourseDetailLayout.tsx:202-205
Timestamp: 2026-08-03T09:41:11.931Z
Learning: When implementing the shared back-navigation UI component in yeogido/frontend, manage all UI dimensions, including positional offsets, according to the project’s global `scale` policy so the component remains visually consistent across screens.

Applied to files:

  • src/pages/detail/festival/index.tsx
  • src/pages/detail/components/CourseDetailLayout.tsx
  • src/pages/likes/index.tsx
📚 Learning: 2026-07-26T17:09:27.685Z
Learnt from: KJun-2
Repo: yeogido/frontend PR: 125
File: src/pages/local-recommendation/course-basic-info/components/TransportSelector.tsx:84-91
Timestamp: 2026-07-26T17:09:27.685Z
Learning: In this project’s 390px-based continuous responsive scaling, do not apply an artificial minimum lower bound to text sizes (e.g., avoid clamping via Math.max/min-font-size patterns). Instead, compute typography using proportional ratio scaling: render font sizes as `VALUE * scale` (for example, `DESCRIPTION_FONT_SIZE * scale`). During review, flag any code that enforces a hard minimum text size that breaks the intended proportional scaling.

Applied to files:

  • src/pages/detail/festival/index.tsx
  • src/pages/detail/components/CourseDetailLayout.tsx
  • src/pages/likes/index.tsx
📚 Learning: 2026-07-26T17:09:32.991Z
Learnt from: KJun-2
Repo: yeogido/frontend PR: 125
File: src/pages/local-recommendation/tag-selection/components/KeywordSelectionSection.tsx:51-56
Timestamp: 2026-07-26T17:09:32.991Z
Learning: When implementing responsive scaling in this project, prefer direct proportional calculations (e.g., using `VALUE * scale`) without applying artificial minimum lower bounds (clamps) to text sizes or other visual dimensions. Only introduce a lower bound when there is an explicitly documented exception; the primary allowed example is enforcing a 44px minimum touch target for interactive elements. In review, flag new/minimum clamps for text/visual dimensions unless they match an explicitly documented exception.

Applied to files:

  • src/pages/detail/festival/index.tsx
  • src/pages/detail/components/CourseDetailLayout.tsx
  • src/pages/likes/index.tsx
📚 Learning: 2026-07-26T17:09:40.303Z
Learnt from: KJun-2
Repo: yeogido/frontend PR: 125
File: src/pages/local-recommendation/tag-selection/components/RepresentativePhotoSection.tsx:107-122
Timestamp: 2026-07-26T17:09:40.303Z
Learning: yeogido/frontend의 반응형 스케일 정책에 맞춰, 텍스트를 포함한 UI 치수는 (디자인 기준값) × 전역 `scale`로 “연속적으로” 계산하고, 12px·14px 같은 최소 폰트/사이즈 하한(floor) 클램프를 적용하지 않는다. `scaleValue`를 쓰더라도 텍스트에 임의의 minimum floor를 추가하거나 `Math.max(value, 12/14)` 같은 보정을 넣지 말 것.

Applied to files:

  • src/pages/detail/festival/index.tsx
  • src/pages/detail/components/CourseDetailLayout.tsx
  • src/pages/likes/index.tsx
🪛 dotenv-linter (4.0.0)
.env.example

[warning] 5-5: [EndingBlankLine] No blank line at the end of the file

(EndingBlankLine)


[warning] 5-5: [UnorderedKey] The GOOGLE_MAPS_API_KEY key should go before the KAKAO_REST_API_KEY key

(UnorderedKey)

🔇 Additional comments (12)
src/pages/likes/index.tsx (6)

2-27: LGTM!


65-135: LGTM!


155-184: LGTM!


214-237: LGTM!


252-274: LGTM!


283-311: LGTM!

src/apis/googlePlacesHours.ts (1)

1-30: LGTM!

vercel.json (1)

7-15: LGTM!

.env.example (1)

5-5: LGTM!

vite.config.ts (1)

1-69: LGTM!

src/pages/detail/components/CourseDetailLayout.tsx (1)

28-31: LGTM!

Also applies to: 129-155, 312-322

src/pages/detail/festival/index.tsx (1)

18-100: LGTM!

Also applies to: 235-235

Comment thread api/google-places/hours.ts
Comment thread api/google-places/placeHours.ts
Comment thread api/google-places/placeHours.ts
Comment thread src/hooks/usePlaceOpeningHours.ts Outdated
Comment thread src/pages/detail/festival/index.tsx Outdated
Comment thread src/pages/likes/index.tsx
Comment thread src/pages/likes/index.tsx Outdated

@junehuk junehuk left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Image 확인했습니다

@KJun-2
KJun-2 merged commit a965783 into develop Aug 6, 2026
3 checks passed
@KJun-2
KJun-2 deleted the feature/user-likes-api branch August 6, 2026 13:34
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.

[FEAT] 찜 목록 API 연동 및 지도 거리 표시 구현

3 participants