Skip to content

Commit e2fec68

Browse files
feat: 상위 스킬 연도별 트렌드 그래프 색상 수정
1 parent 846bebd commit e2fec68

File tree

14 files changed

+35
-235
lines changed

14 files changed

+35
-235
lines changed

app/api/auth/login/route.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ export async function POST(request: NextRequest) {
4747

4848
return nextResponse
4949
} catch (error) {
50-
console.error('로그인 API 프록시 오류:', error)
5150
return NextResponse.json(
5251
{ error: 'Internal server error' },
5352
{ status: 500 }

app/api/posts/route.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ export async function GET(request: NextRequest) {
3737
},
3838
})
3939
} catch (error) {
40-
console.error('API 프록시 오류:', error)
4140
return NextResponse.json(
4241
{ error: 'Internal server error' },
4342
{ status: 500 }

app/api/subscriptions/route.ts

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,6 @@ export async function GET(request: NextRequest) {
99
const cookies = request.cookies.getAll()
1010
const cookieString = cookies.map(c => `${c.name}=${c.value}`).join('; ')
1111

12-
// 디버깅: 쿠키 정보 로그
13-
console.log('구독 조회 API - 쿠키 정보:', {
14-
cookieCount: cookies.length,
15-
cookieNames: cookies.map(c => c.name),
16-
cookieString: cookieString || '쿠키 없음',
17-
})
18-
1912
// 백엔드 API 호출
2013
const response = await fetch(`${SPRING_API_BASE_URL}/subscriptions`, {
2114
method: 'GET',
@@ -28,12 +21,6 @@ export async function GET(request: NextRequest) {
2821

2922
if (!response.ok) {
3023
const errorData = await response.json().catch(() => ({}))
31-
console.error('구독 API 에러:', {
32-
status: response.status,
33-
statusText: response.statusText,
34-
errorData,
35-
cookieString: cookieString ? '쿠키 있음' : '쿠키 없음',
36-
})
3724
return NextResponse.json(
3825
{ error: errorData.message || `API error: ${response.status}` },
3926
{ status: response.status }
@@ -60,7 +47,6 @@ export async function GET(request: NextRequest) {
6047

6148
return nextResponse
6249
} catch (error) {
63-
console.error('구독 조회 API 프록시 오류:', error)
6450
return NextResponse.json(
6551
{ error: 'Internal server error' },
6652
{ status: 500 }
@@ -94,12 +80,6 @@ export async function POST(request: NextRequest) {
9480

9581
if (!response.ok) {
9682
const errorData = await response.json().catch(() => ({}))
97-
console.error('구독 API 에러:', {
98-
status: response.status,
99-
statusText: response.statusText,
100-
errorData,
101-
cookieString: cookieString ? '쿠키 있음' : '쿠키 없음',
102-
})
10383
return NextResponse.json(
10484
{ error: errorData.message || `API error: ${response.status}` },
10585
{ status: response.status }
@@ -126,7 +106,6 @@ export async function POST(request: NextRequest) {
126106

127107
return nextResponse
128108
} catch (error) {
129-
console.error('구독 저장 API 프록시 오류:', error)
130109
return NextResponse.json(
131110
{ error: 'Internal server error' },
132111
{ status: 500 }
@@ -152,12 +131,6 @@ export async function DELETE(request: NextRequest) {
152131

153132
if (!response.ok) {
154133
const errorData = await response.json().catch(() => ({}))
155-
console.error('구독 API 에러:', {
156-
status: response.status,
157-
statusText: response.statusText,
158-
errorData,
159-
cookieString: cookieString ? '쿠키 있음' : '쿠키 없음',
160-
})
161134
return NextResponse.json(
162135
{ error: errorData.message || `API error: ${response.status}` },
163136
{ status: response.status }
@@ -184,7 +157,6 @@ export async function DELETE(request: NextRequest) {
184157

185158
return nextResponse
186159
} catch (error) {
187-
console.error('구독 취소 API 프록시 오류:', error)
188160
return NextResponse.json(
189161
{ error: 'Internal server error' },
190162
{ status: 500 }

app/companies/page.tsx

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,6 @@ export default function CompaniesPage() {
236236
} catch (error: any) {
237237
setApiError(error.message || '공고 데이터를 불러오는데 실패했습니다.')
238238
setApiJobs([])
239-
console.error('API 호출 에러:', error)
240239
} finally {
241240
setIsLoadingApi(false)
242241
}
@@ -334,8 +333,6 @@ export default function CompaniesPage() {
334333

335334
const apiUrl = `https://speedjobs-spring.skala25a.project.skala-ai.com/api/v1/posts/${jobId}`
336335

337-
console.log('공고 상세 정보 API 호출:', apiUrl)
338-
339336
const response = await fetch(apiUrl, {
340337
method: 'GET',
341338
headers: {
@@ -350,7 +347,6 @@ export default function CompaniesPage() {
350347
}
351348

352349
const result: ApiJobDetailResponse = await response.json()
353-
console.log('공고 상세 정보 API 응답:', result)
354350

355351
if (result.status === 200 && result.data) {
356352
// API 응답을 기존 형식으로 변환
@@ -402,7 +398,6 @@ export default function CompaniesPage() {
402398
throw new Error(result.message || '공고 상세 정보를 불러오는데 실패했습니다.')
403399
}
404400
} catch (error: any) {
405-
console.error('공고 상세 정보 API 호출 에러:', error)
406401
setJobDetailError(error.message || '공고 상세 정보를 불러오는데 실패했습니다.')
407402
// 에러 발생 시에도 모달은 유지 (fallbackJob이 있으면)
408403
if (!fallbackJob) {
@@ -1268,8 +1263,6 @@ export default function CompaniesPage() {
12681263
return true
12691264
})
12701265

1271-
console.log('metaData remainingFields:', remainingFields)
1272-
12731266
if (remainingFields.length === 0) return null
12741267

12751268
return (

app/dashboard/jobs/[id]/page.tsx

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,6 @@ export default function JobDetailPage() {
6464
// 상세 공고 API 호출 시도
6565
const detailApiUrl = `https://speedjobs-spring.skala25a.project.skala-ai.com/api/v1/posts/${jobId}`
6666

67-
console.log('=== 상세 공고 API 호출 ===')
68-
console.log('호출 URL:', detailApiUrl)
69-
console.log('호출 시각:', new Date().toISOString())
70-
7167
try {
7268
const response = await fetch(detailApiUrl, {
7369
method: 'GET',
@@ -79,9 +75,6 @@ export default function JobDetailPage() {
7975
credentials: 'omit',
8076
})
8177

82-
console.log('응답 상태:', response.status)
83-
console.log('응답 URL:', response.url)
84-
8578
if (!response.ok) {
8679
// 404 등 에러인 경우 대시보드 API로 재시도
8780
if (response.status === 404) {
@@ -91,7 +84,6 @@ export default function JobDetailPage() {
9184
}
9285

9386
const result = await response.json()
94-
console.log('백엔드에서 받은 상세 데이터:', result)
9587

9688
// API 응답 형식: { status, code, message, data }
9789
if (result.status === 200 && result.code === 'OK' && result.data) {
@@ -108,18 +100,12 @@ export default function JobDetailPage() {
108100
setIsLoading(false)
109101
return // API 성공 시 여기서 종료
110102
} else {
111-
console.warn('API 응답 형식이 올바르지 않습니다:', result)
112103
throw new Error(result.message || 'API 응답 형식이 올바르지 않습니다.')
113104
}
114105
} catch (fetchError: any) {
115-
console.error('=== 상세 공고 API 호출 에러 ===')
116-
console.error('에러 타입:', fetchError instanceof Error ? fetchError.constructor.name : typeof fetchError)
117-
console.error('에러 메시지:', fetchError instanceof Error ? fetchError.message : String(fetchError))
118-
119106
// 상세 API 실패 시 대시보드 API에서 해당 공고 찾기 시도
120107
if (fetchError.message === 'NOT_FOUND' || fetchError.message.includes('404')) {
121108
try {
122-
console.log('대시보드 API에서 공고 찾기 시도...')
123109
const dashboardApiUrl = 'https://speedjobs-spring.skala25a.project.skala-ai.com/api/v1/dashboard/posts?limit=100'
124110
const dashboardResponse = await fetch(dashboardApiUrl, {
125111
method: 'GET',
@@ -168,7 +154,7 @@ export default function JobDetailPage() {
168154
}
169155
}
170156
} catch (dashboardError) {
171-
console.error('대시보드 API 호출 실패:', dashboardError)
157+
// 대시보드 API 호출 실패 시 무시
172158
}
173159
}
174160

@@ -221,10 +207,6 @@ export default function JobDetailPage() {
221207
}
222208
} catch (err) {
223209
// 예상치 못한 에러
224-
console.error('=== 공고 상세 조회 에러 ===')
225-
console.error('에러 타입:', err instanceof Error ? err.constructor.name : typeof err)
226-
console.error('에러 메시지:', err instanceof Error ? err.message : String(err))
227-
228210
setJob(null)
229211
setError('공고를 불러오는 중 오류가 발생했습니다.')
230212
setIsLoading(false)

app/dashboard/page.tsx

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -865,7 +865,6 @@ export default function Dashboard() {
865865
const start = stage.startDate.getTime()
866866
const end = stage.endDate.getTime()
867867
if (start > end) {
868-
console.warn(`잘못된 날짜 범위: ${schedule.company_name} - ${stage.stage} (${stage.startDate.toISOString()} ~ ${stage.endDate.toISOString()})`)
869868
return false
870869
}
871870
return true
@@ -970,37 +969,21 @@ export default function Dashboard() {
970969
})
971970

972971
if (!response.ok) {
973-
console.warn(`API 호출 실패 (${apiType}):`, response.status, response.statusText)
974972
continue
975973
}
976974

977975
const result = await response.json()
978976

979977
if (result.status === 200 && result.code === 'SUCCESS' && result.data?.schedules) {
980-
console.log(`API 응답 성공 (${apiType}):`, result.data.schedules.length, '개 스케줄')
981-
// 각 스케줄의 상세 정보 로깅
982-
result.data.schedules.forEach((schedule: any) => {
983-
console.log(` - ${schedule.company_name} (${schedule.data_type || 'N/A'}):`,
984-
schedule.stages.map((s: any) => `${s.stage} (${s.start_date} ~ ${s.end_date})`).join(', '))
985-
})
986978
allSchedules.push(...result.data.schedules)
987-
} else {
988-
console.warn(`API 응답 형식 오류 (${apiType}):`, result)
989979
}
990980
} catch (error) {
991-
console.error(`API 호출 중 오류 발생 (${apiType}):`, error)
992981
continue
993982
}
994983
}
995984

996985
if (allSchedules.length > 0) {
997986
const transformedSchedules = transformApiResponse(allSchedules)
998-
console.log('총 스케줄 수:', transformedSchedules.length)
999-
console.log('변환된 스케줄 상세:')
1000-
transformedSchedules.forEach((schedule) => {
1001-
console.log(` - ${schedule.name} (${schedule.dataType || 'N/A'}):`,
1002-
schedule.stages.map(s => `${s.stage} (${s.startDate.toISOString().split('T')[0]} ~ ${s.endDate.toISOString().split('T')[0]})`).join(', '))
1003-
})
1004987
setRecruitmentScheduleData(transformedSchedules)
1005988
} else {
1006989
setRecruitmentScheduleData([])
@@ -2216,9 +2199,6 @@ export default function Dashboard() {
22162199
for (const key of uniqueKeys) {
22172200
if (activity.counts.hasOwnProperty(key)) {
22182201
value = activity.counts[key]
2219-
if (value > 0 && process.env.NODE_ENV === 'development') {
2220-
console.log(`키 매칭 성공: ${company.name} (${company.key}) -> ${key} = ${value}`)
2221-
}
22222202
break
22232203
}
22242204
}
@@ -2231,13 +2211,6 @@ export default function Dashboard() {
22312211
return data
22322212
})
22332213

2234-
// 디버깅: 생성된 데이터 확인 (개발 환경에서만)
2235-
if (process.env.NODE_ENV === 'development') {
2236-
console.log('companyRecruitmentChartData 생성됨:', result)
2237-
console.log('activity.counts의 키들:', companyRecruitmentApiData.activities[0]?.counts ? Object.keys(companyRecruitmentApiData.activities[0].counts) : [])
2238-
console.log('recruitmentCompanies:', recruitmentCompanies.map((c: { name: string; key: string }) => ({ name: c.name, key: c.key })))
2239-
}
2240-
22412214
// 이전 값 업데이트
22422215
previousCompanyRecruitmentChartDataRef.current = result
22432216
return result
@@ -3601,7 +3574,6 @@ export default function Dashboard() {
36013574
} catch (error: any) {
36023575
setHasError(true)
36033576
setErrorMessage(error?.message || '알 수 없는 오류가 발생했습니다.')
3604-
console.error('대시보드 초기화 에러:', error)
36053577
}
36063578
}, [])
36073579

app/dashboard/recruitment-schedule/page.tsx

Lines changed: 0 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -259,16 +259,6 @@ export default function RecruitmentSchedulePage() {
259259
// API 호출 (params에 이미 data_type이 포함되어 있음)
260260
const apiUrl = `https://speedjobs-backend.skala25a.project.skala-ai.com/recruitment-schedule/companies?${params.toString()}`
261261

262-
// 디버깅: API URL 로깅
263-
console.log('채용 일정 API 호출:', apiUrl)
264-
console.log('파라미터:', {
265-
type: params.get('type'),
266-
data_type: params.get('data_type'),
267-
start_date: params.get('start_date'),
268-
end_date: params.get('end_date'),
269-
job_role: params.get('job_role'),
270-
})
271-
272262
const response = await fetch(apiUrl, {
273263
method: 'GET',
274264
headers: {
@@ -285,33 +275,16 @@ export default function RecruitmentSchedulePage() {
285275
const result: ApiResponse = await response.json()
286276

287277
if (result.status === 200 && result.code === 'SUCCESS' && result.data && result.data.schedules) {
288-
console.log(`API 응답 성공: ${result.data.schedules.length}개 스케줄`)
289-
// 각 스케줄의 data_type 확인
290-
result.data.schedules.forEach((schedule: ApiCompanySchedule) => {
291-
console.log(` - ${schedule.company_name}: data_type=${schedule.data_type || 'N/A'}, stages=${schedule.stages.length}개`)
292-
schedule.stages.forEach((stage) => {
293-
console.log(` - ${stage.stage}: ${stage.start_date} ~ ${stage.end_date}`)
294-
})
295-
})
296278
allSchedules.push(...result.data.schedules)
297279
} else {
298-
console.warn('⚠️ API 응답 형식 오류:', result)
299280
throw new Error(result.message || '데이터를 불러오는데 실패했습니다.')
300281
}
301282

302283
if (allSchedules.length > 0) {
303284
const transformedSchedules = transformApiResponse(allSchedules)
304-
console.log('변환된 스케줄:', transformedSchedules.length, '개')
305-
transformedSchedules.forEach((schedule) => {
306-
console.log(` - ${schedule.name}: dataType=${schedule.dataType || 'N/A'}, stages=${schedule.stages.length}개`)
307-
schedule.stages.forEach((stage) => {
308-
console.log(` - ${stage.stage}: ${stage.startDate.toISOString().split('T')[0]} ~ ${stage.endDate.toISOString().split('T')[0]}`)
309-
})
310-
})
311285
setServerSchedules(transformedSchedules)
312286
} else {
313287
// 데이터가 없어도 빈 배열로 설정 (에러 아님)
314-
console.warn('⚠️ 불러온 스케줄이 없습니다. API 응답:', result)
315288
setServerSchedules([])
316289
}
317290
} catch (error: any) {
@@ -517,39 +490,23 @@ export default function RecruitmentSchedulePage() {
517490

518491
// 신입 공고: data_type 필터 적용
519492
if (activeTab === '신입') {
520-
console.log('필터링 전:', result.length, '개 스케줄')
521-
console.log('현재 필터:', dataFilter)
522-
result.forEach((schedule) => {
523-
console.log(` - ${schedule.name}: dataType=${schedule.dataType || 'N/A'}`)
524-
})
525-
526493
result = result.filter((schedule) => {
527494
// 전체 보기: actual과 predicted 모두 표시 (dataType이 없는 경우도 포함)
528495
if (dataFilter === 'all') {
529496
return true // 모든 데이터 표시
530497
}
531498
if (dataFilter === 'actual') {
532499
const matches = schedule.dataType === 'actual'
533-
if (!matches) {
534-
console.log(` 필터링됨: ${schedule.name} (dataType=${schedule.dataType}, 필터=actual)`)
535-
}
536500
return matches
537501
}
538502
// 예측치만 표시
539503
if (dataFilter === 'predicted') {
540504
// dataType이 정확히 'predicted'인지 확인 (문자열 비교)
541505
const matches = schedule.dataType === 'predicted'
542-
console.log(` 체크: ${schedule.name}, dataType="${schedule.dataType}", 타입=${typeof schedule.dataType}, 매칭=${matches}`)
543-
if (!matches) {
544-
console.log(` ❌ 필터링됨: ${schedule.name} (dataType=${schedule.dataType}, 필터=predicted)`)
545-
} else {
546-
console.log(` ✅ 표시됨: ${schedule.name} (dataType=${schedule.dataType})`)
547-
}
548506
return matches
549507
}
550508
return true
551509
})
552-
console.log('필터링 후:', result.length, '개 스케줄')
553510
}
554511

555512
// 경력 공고: 직군 필터 적용 (선택된 직군만 표시)
@@ -728,13 +685,6 @@ export default function RecruitmentSchedulePage() {
728685
<div>
729686
<Tabs value={activeTab} onValueChange={(v) => setActiveTab(v as '신입' | '경력')}>
730687
<TabsContent value="신입" className="mt-0">
731-
{(() => {
732-
console.log('📅 Calendar에 전달되는 데이터:', finalFilteredSchedules.length, '개')
733-
finalFilteredSchedules.forEach((schedule) => {
734-
console.log(` - ${schedule.name}: dataType=${schedule.dataType || 'N/A'}, stages=${schedule.stages.length}개`)
735-
})
736-
return null
737-
})()}
738688
<Calendar
739689
currentDate={currentDate}
740690
companySchedules={finalFilteredSchedules}

0 commit comments

Comments
 (0)