Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
d043f4d
refactor: Award 타입 구조화 및 중복 타입 정의 제거
seongwon030 Jan 17, 2026
c340e4a
refactor: Award 타입 구조화 및 중복 타입 정의 제거
seongwon030 Jan 17, 2026
1483360
Merge branch 'develop-fe' into refactor/#1050-year-semester-type-MOA-523
seongwon030 Jan 18, 2026
35445e0
fix: Award key에 index 추가하여 고유성 보장
seongwon030 Jan 18, 2026
522cf20
feat: eventsource 라이브러리 도입
lepitaaar Jan 18, 2026
8be9ff7
feat: sse 이벤트 타입 정의
lepitaaar Jan 18, 2026
06ec81a
feat: sse 연결 함수 추가
lepitaaar Jan 18, 2026
ae08944
feat: AdminClubContext내 sse연결 핸들링
lepitaaar Jan 18, 2026
e8f1680
feat: sse type 추가
lepitaaar Jan 18, 2026
ef83820
feat: sse연결 관리 및 지원자 정보 업데이트
lepitaaar Jan 18, 2026
904012f
fix: wrong import path
lepitaaar Jan 18, 2026
cbc65c0
refactor: sse 연결 시마다 새로운 accesstoken 읽게 변경
lepitaaar Jan 18, 2026
3fc96e2
refactor: error 재연결 로직 변경
lepitaaar Jan 18, 2026
77ba5f8
Merge pull request #1051 from Moadong/refactor/#1050-year-semester-ty…
seongwon030 Jan 19, 2026
c892166
feat: 무한 재연결 로직 수정 및 타임아웃 클리어
lepitaaar Jan 19, 2026
af9b667
refactor: rename callbacks to eventHandlers
lepitaaar Jan 19, 2026
4682a96
refactor: SSE 재연결 로직 개선
lepitaaar Jan 19, 2026
41d41df
feat: Award 관련 유틸 함수 추가
seongwon030 Jan 19, 2026
0315198
test: awardHelpers 유틸 함수 단위 테스트 추가
seongwon030 Jan 19, 2026
c486f8d
refactor: ClubIntroContent 성능 최적화 및 코드 개선
seongwon030 Jan 19, 2026
197a255
fix: setState updater 함수에서 부작용 제거하여 React 규칙 준수
seongwon030 Jan 19, 2026
acb8628
Merge pull request #1068 from Moadong/refactor/#1067-club-intro-perfo…
seongwon030 Jan 19, 2026
2cf875c
Merge pull request #1062 from Moadong/feature/#798-sync-applicant-con…
lepitaaar Jan 19, 2026
bf225a6
fix: createApplicationSSE import 분리
seongwon030 Jan 19, 2026
93f2831
Merge pull request #1071 from Moadong/fix/SSE-import
seongwon030 Jan 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
180 changes: 134 additions & 46 deletions frontend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
"@tanstack/react-query": "^5.66.0",
"date-fns": "^4.1.0",
"dotenv-webpack": "^8.1.0",
"eventsource": "^4.1.0",
"framer-motion": "^12.23.12",
"jest-fixed-jsdom": "^0.0.9",
"mixpanel-browser": "^2.60.0",
Expand Down
54 changes: 54 additions & 0 deletions frontend/src/apis/clubSSE.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import { EventSource } from 'eventsource';
import API_BASE_URL from '@/constants/api';
import {
ApplicantSSECallbacks,
ApplicantStatusEvent,
} from '@/types/applicants';

export const createApplicantSSE = (
applicationFormId: string,
eventHandlers: ApplicantSSECallbacks,
): EventSource | null => {
let eventSource: EventSource | null = null;

const connect = (): EventSource | null => {
const accessToken = localStorage.getItem('accessToken');
if (!accessToken) return null;

const source = new EventSource(
`${API_BASE_URL}/api/club/applicant/${applicationFormId}/sse`,
{
fetch: (input, init) =>
fetch(input, {
...init,
headers: {
...init?.headers,
Authorization: `Bearer ${accessToken}`,
},
credentials: 'include',
}),
},
);

source.addEventListener('applicant-status-changed', (e) => {
try {
const eventData: ApplicantStatusEvent = JSON.parse(e.data);
eventHandlers.onStatusChange(eventData);
} catch (parseError) {
console.error('SSE PARSING ERROR:', parseError);
}
});

source.onerror = (error) => {
source.close();
eventHandlers.onError(
new Error(error?.message || 'SSE connection error'),
);
};

return source;
};

eventSource = connect();
return eventSource;
};
Loading