Skip to content

[feat] 최근 본 동아리 조회 기능 구현#319

Merged
ff1451 merged 15 commits into
developfrom
318-feat-최근-본-동아리-조회-기능-구현
May 26, 2026

Hidden character warning

The head ref may contain hidden characters: "318-feat-\ucd5c\uadfc-\ubcf8-\ub3d9\uc544\ub9ac-\uc870\ud68c-\uae30\ub2a5-\uad6c\ud604"
Merged

[feat] 최근 본 동아리 조회 기능 구현#319
ff1451 merged 15 commits into
developfrom
318-feat-최근-본-동아리-조회-기능-구현

Conversation

@ff1451
Copy link
Copy Markdown
Collaborator

@ff1451 ff1451 commented May 26, 2026

✨ 요약

- 최근  동아리 ID 로컬 저장과 최근  동아리 카드 조회 API를 추가했습니다.
- /대학별 동아리 목록/동아리 상세 화면의 최근  동아리 영역을 공통 컴포넌트로 연결했습니다.
- 동아리 카테고리 공통 타입과 브레드크럼 컴포넌트를 정리했습니다.



😎 해결한 이슈



Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 최근에 본 동아리 목록을 홈페이지와 대학 동아리 목록 페이지에서 확인할 수 있습니다.
    • 동아리 상세 페이지 방문 시 자동으로 최근 본 동아리 목록에 저장됩니다.
    • 동아리 검색 및 탐색을 위한 breadcrumb 네비게이션이 추가되었습니다.
  • 리팩토링

    • 동아리 카테고리 분류 시스템을 개선했습니다.

Review Change Stack

ff1451 and others added 14 commits April 1, 2026 23:01
* 205 feat 이미지 전처리 기능 구현 (#206)

* feat: 전처리 로직 및 WebWorker 구현

* feat: 전처리 적용 및 preview 동시성 제어 로직 추가

* refactor: 리뷰 반영

* [hotfix] 하단바 너비 수정 (#208)

* hotfix: 하단바 너비 수정

* chore: 불필요한 값 제거

* refactor: 고정 gap 제거

* Reapply "[feat] 광고 배너 추가 (#200)"

This reverts commit c51ec85.

* [feat] 하단바 리디자인 (#213)

* chore: asset 추가

* feat: 하단바 리디자인 반영 및 레이아웃 수정

* [refactor] 광고 카드 레이아웃 밀림 수정 (#215)

* refactor: 광고 개수 측정 시기 변경 및 기본값 제거

* feat: 스켈레톤 UI 추가

* feat: 인앱 알림 페이지 및 토스트 구현 (#217)

* feat: 알림 API 및 스트림 기반 추가

* feat: 인앱 알림 레이어 추가

* feat: 알림 페이지 및 헤더 진입 구현

* fix: 알림 스트림 401 재시도 조건 정리

* fix: 알림 목록 이동 차단 제거

* refactor: 알림 공용 훅 위치 정리

* fix: 알림 재연결 캐시 동기화 추가

* fix: 알림 목록 토스트 큐 누적 방지

* fix: 알림 읽음 카운트 감소 조건 보강

* [refactor] 도메인별 TanStack Query 훅 정리 (#219)

* chore: pwa용 이미지 제거

* refactor: auth 도메인 쿼리와 뮤테이션 정리

* refactor: council과 schedule 조회 훅 정리

* refactor: chat과 notification 캐시 처리 정리

* refactor: club 조회와 지원 플로우 정리

* refactor: manager 도메인 캐시 처리 정리

* refactor: studyTime 도메인 쿼리와 뮤테이션 정리

* refactor: 광고와 업로드 도메인 훅 정리

* [refactor] mutaton query 및 hook 추가 수정 (#221)

* refactor: auth와 user myInfo 훅 정리

* refactor: club과 schedule 조회 훅 정리

* refactor: chat과 notification 훅 구조 정리

* refactor: club 지원 뮤테이션 훅 정리

* refactor: manager 뮤테이션 훅 구조 정리

* refactor: mutation 훅 cache 정리

* refactor: 컨벤션 통일

* refactor: isRead 조건 정리

* fix: 채팅 스크롤 문제 수정

* refactor: 불필요한 코드 제거

* [fix] 모바일 환경 입력창과 키보드 간의 간격이 큰 문제 수정 (#223)

* chore: 가공용 safeArea 변수 선언

* refactor: 고정 패딩 값 수정 및 safeArea 적용 변경

* feat: 키보드 활성화 감지 및 safeArea 적용 여부 기능 추가

* refactor: 매직넘버 상수화 및 가로모드 처리

* [fix] 키보드 활성화 시 화면 흔들림 문제 수정 (#225)

* refactor: 채팅 viewport 훅 네이밍 정리

* refactor: viewport 높이 잠금 훅 적용 시점 조정

* [fix] 키보드 활성화 시 채팅 화면 전체가 흔들리는 문제 수정 (#227)

* refactor: 채팅 viewport 훅 네이밍 정리

* refactor: viewport 높이 잠금 훅 적용 시점 조정

* fix: 채팅 화면 스크롤 잠금으로 키보드 흔들림 완화

* fix: 입력 포커스 중 viewport offset 고정 (#229)

* fix: 문서 루트 스크롤 잠금으로 빈 공간 잔류 방지 (#232)

* [fix] 키보드 활성화 시 채팅 화면 상단 고정이 깨지고 빈 공간이 남는 문제 수정 (#234)

* fix: 채팅 화면 상단 고정 깨짐과 빈 공간 잔류 수정

* refactor: 라우트 조건 수정

* fix: 문서 스크롤 위치 감지 보강

* refactor: 입력 요소 판별 유틸과 스크롤 주석 정리

* [fix] 키보드 활성화 시 채팅 화면에서 문서 스크롤이 발생하는 문제 수정 (#236)

* fix: 채팅 문서 스크롤 제스처 차단

* fix: 입력 요소 터치 동작 예외 처리

* [fix] 키보드 활성화 시 채팅방이 마지막 메시지 위치를 유지하지 못하는 문제 수정 (#238)

* fix: 키보드 활성화 시 채팅 하단 정렬 유지

* refactor: 채팅 리사이즈 관찰 안정화

* fix: mypage 연계 약관 페이지 뒤로가기 수정 (#240)

* refactor: alias import 경로 정리

* fix: query 설정과 suspense 분기 정리

* refactor: 관리자 화면 스타일 유틸 정리

* fix: 이미지 전처리 예외 처리 보강

* fix: 헤더와 회비 화면 동작 정리

* fix: 공통 유틸 안정성 개선

* fix: 이미지 전처리 실패 처리를 보정

* fix: 모집 공고 저장 후 설정 반영 순서 조정

* fix: 부원 직책 변경 실패 처리를 보강

* fix: 약관 링크 접근성을 개선

* fix: 공통 쿼리와 유틸 안정성을 보완

* [feat] 동적 버전 정보 표시 구현 (#211)

* feat: 동적 버전 정보 표시 구현

* refactor: 버전 정보 미 존재시 v 표시 제거

* [feat] 메인화면 동아리 카드 디자인 수정 반영 (#242)

* feat: 메인화면 동아리 카드 디자인 수정

* chore: 하단바 아이콘 수정

* refactor: 코드래빗 리뷰 반영

* refactor: and 연산자로 변경

* apiClient 코드 중복 제거 및 네이티브 브릿지 인증 동기화 중앙화 (#244)

* refactor: apiClient 코드 중복 제거 및 네이티브 브릿지 인증 동기화 중앙화

* refactor: body 직렬화 가드를 plain object/array로 한정

* fix: body 읽기 중 AbortError가 ParseError로 오분류되는 문제 수정

* [refactor] 에러 처리 유틸 및 utils 구조 정리 (#246)

* refactor: 에러 처리 유틸 및 공통 토스트 흐름 정리

* refactor: utils 폴더 구조를 역할별로 정리

* refactor: 코드래빗 리뷰 반영

* refactor: 코드래빗 리뷰 반영

* Update src/pages/Home/components/HomeClubSection.tsx

* fix: 인증 세션 복구 흐름 정리

* fix: 홈 동아리 카드 레이아웃 정리

* [feat] 총동아리 페이지 리디자인 및 하단 오버레이 정리 (#249)

* refactor: 하단 오버레이 처리 공통화

* feat: 총동아리 페이지와 헤더 리디자인 반영

* fix: 채팅 하단 여백과 외부 링크 속성 수정

* refactor: 총동아리 헤더 설정 정리

* fix: 총동아리 상세 접근성과 스타일 보완

* [feat] 마이페이지 관리자 카드 분리 및 채팅 미확인 배지 반영 (#251)

* feat: 하단 채팅 배지 표시 및 조회 조건 보완

* refactor: 관리자 정보 카드 컴포넌트 분리

* feat: 채팅 페이지 리디자인 (#252)

* feat: 채팅 페이지 리디자인

* fix:tailwind 문법 수정

* fix: 코드 수정

* fix: 폰트 색상 및 위치 수정

* fix: 채팅방 사람수 정렬

* fix: 오타 수정

* chore: conflict 해결 중 누락된 부분 수정

* [refactor] 광고 렌더링 조건 수정 (#254)

* refactor: 광고 렌더링 조건 수정

* docs: 문서명 변경

---------

Co-authored-by: 박성주 <145267904+ParkSungju01@users.noreply.github.com>
@ff1451 ff1451 added the ✨ Feature 기능 개발 label May 26, 2026
@ff1451 ff1451 self-assigned this May 26, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 26, 2026

Warning

Review limit reached

@ff1451, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 37 minutes and 1 second. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 05859cd9-cfb9-4dad-8fb4-1a6e5fc19962

📥 Commits

Reviewing files that changed from the base of the PR and between 2f13e93 and ad927c1.

📒 Files selected for processing (1)
  • apps/web/src/components/Breadcrumb/index.tsx

Walkthrough

PR #319는 최근 본 동아리 기능을 구현합니다. ClubCategory를 apps/web/src/apis/common/club에서 공통 정의하고, 최근 본 동아리 API(recentClub/index.ts), React Query 쿼리, 로컬스토리지 저장소 유틸(recentClubStorage.ts)을 추가합니다. 공용 UI 컴포넌트(Breadcrumb, RecentClubCard, RecentClubList)를 통해 Home, ClubDetail, UniversityClubList 페이지에 최근 본 동아리 기능을 통합하며, UniversityClub 엔티티에서 memberCount를 제거하고 topic을 추가합니다.

Possibly related issues

Possibly related PRs

  • BCSDLab/KONECT_FRONT_END#303: Home 페이지의 최근 본 동아리 섹션을 리팩토링하며, 기존 더미 데이터 렌더링 방식을 RecentClubList 컴포넌트 기반으로 변경합니다.
  • BCSDLab/KONECT_FRONT_END#307: UniversityClubList 페이지와 universityClub API 타입을 정의하며, 현재 PR에서 ClubCategory를 공통화하고 페이지를 리팩토링하는 변경과 겹칩니다.
  • BCSDLab/KONECT_FRONT_END#309: ClubDetail 페이지의 라우트, API, 엔티티를 추가하며, 현재 PR에서 ClubDetailUniversitySummary 타입 추가 및 ClubDetail 페이지 통합과 관련됩니다.
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목이 PR의 주요 변경사항(최근 본 동아리 조회 기능 구현)을 명확하고 간결하게 요약합니다.
Linked Issues check ✅ Passed PR이 이슈 #318의 모든 코딩 요구사항을 충족합니다: API 타입/쿼리 추가, 로컬스토리지 저장 로직, 공통 컴포넌트, 3개 화면 연결, 카테고리 타입 정리 완료.
Out of Scope Changes check ✅ Passed 모든 변경사항이 이슈 #318의 목표 범위 내에 있으며, 스코프를 벗어난 변경이 없습니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 318-feat-최근-본-동아리-조회-기능-구현

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 and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
apps/web/src/apis/recentClub/index.ts (1)

1-2: ⚡ Quick win

내부 모듈 import는 @/* 별칭으로 통일해주세요.

현재 상대경로 import는 이 PR의 TS import 컨벤션과 어긋납니다.

변경 제안
-import { apiClient } from '../client';
-import type { RecentClubRequestParams, RecentClubResponse } from './entity';
+import { apiClient } from '`@/apis/client`';
+import type { RecentClubRequestParams, RecentClubResponse } from '`@/apis/recentClub/entity`';

As per coding guidelines **/*.{ts,tsx}: Use path alias @/* for internal app imports (preferred over relative paths).

🤖 Prompt for 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.

In `@apps/web/src/apis/recentClub/index.ts` around lines 1 - 2, The imports at the
top use a relative path for the internal module (import { apiClient } from
'../client') which violates the project's TS import convention; update the
import to use the path-alias form (e.g., replace the '../client' relative import
with the corresponding '`@/`...' alias) while keeping the same symbol (apiClient)
and leave the type imports (RecentClubRequestParams, RecentClubResponse) using
the '`@/`...' alias form as well so all internal imports in this file follow the
`@/`* convention.
apps/web/src/constants/club.ts (1)

8-8: ⚡ Quick win

인라인 HEX 클래스 대신 디자인 토큰 기반 텍스트 컬러를 사용해주세요.

text-[#cd3bf6]는 토큰 체계를 우회해서 테마 일관성이 깨질 수 있습니다. @konect/design-tokens에서 제공하는 컬러 토큰 클래스로 치환해 주세요.
As per coding guidelines **/*.{ts,tsx,css}: Use CSS export from @konect/design-tokens for design tokens, prioritized over inline values.

🤖 Prompt for 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.

In `@apps/web/src/constants/club.ts` at line 8, Replace the inline hex Tailwind
class used for CLUB_CATEGORY.PERFORMANCE in the club constants mapping with the
appropriate design token text color class from `@konect/design-tokens`; import/use
the token CSS export from `@konect/design-tokens` instead of hardcoding
'text-[`#cd3bf6`]' so the mapping value for CLUB_CATEGORY.PERFORMANCE references
the token class (maintaining theme consistency) and remove the inline hex class.
🤖 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 `@apps/web/src/components/Breadcrumb/index.tsx`:
- Around line 20-22: The last-item check in the Breadcrumb render uses reference
equality (items.at(-1) === item) which can misidentify the last breadcrumb;
change the logic inside the items.map callback (where isLast is defined) to use
the index parameter (e.g., index === items.length - 1) to determine the last
item so the check is index-based and reliable for duplicates or reused objects.

---

Nitpick comments:
In `@apps/web/src/apis/recentClub/index.ts`:
- Around line 1-2: The imports at the top use a relative path for the internal
module (import { apiClient } from '../client') which violates the project's TS
import convention; update the import to use the path-alias form (e.g., replace
the '../client' relative import with the corresponding '`@/`...' alias) while
keeping the same symbol (apiClient) and leave the type imports
(RecentClubRequestParams, RecentClubResponse) using the '`@/`...' alias form as
well so all internal imports in this file follow the `@/`* convention.

In `@apps/web/src/constants/club.ts`:
- Line 8: Replace the inline hex Tailwind class used for
CLUB_CATEGORY.PERFORMANCE in the club constants mapping with the appropriate
design token text color class from `@konect/design-tokens`; import/use the token
CSS export from `@konect/design-tokens` instead of hardcoding 'text-[`#cd3bf6`]' so
the mapping value for CLUB_CATEGORY.PERFORMANCE references the token class
(maintaining theme consistency) and remove the inline hex class.
🪄 Autofix (Beta)

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

Run ID: f9e7f188-d704-4499-8ba0-350fa2142c19

📥 Commits

Reviewing files that changed from the base of the PR and between c1dffee and 2f13e93.

📒 Files selected for processing (14)
  • apps/web/src/apis/clubDetail/entity.ts
  • apps/web/src/apis/common/club.ts
  • apps/web/src/apis/recentClub/entity.ts
  • apps/web/src/apis/recentClub/index.ts
  • apps/web/src/apis/recentClub/queries.ts
  • apps/web/src/apis/universityClub/entity.ts
  • apps/web/src/components/Breadcrumb/index.tsx
  • apps/web/src/components/RecentClubCard/index.tsx
  • apps/web/src/components/RecentClubList/index.tsx
  • apps/web/src/constants/club.ts
  • apps/web/src/pages/ClubDetail/index.tsx
  • apps/web/src/pages/Home/index.tsx
  • apps/web/src/pages/UniversityClubList/index.tsx
  • apps/web/src/utils/recentClubStorage.ts

Comment thread apps/web/src/components/Breadcrumb/index.tsx
@ff1451 ff1451 merged commit 78490e7 into develop May 26, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feature 기능 개발

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feat] 최근 본 동아리 조회 기능 구현

1 participant