fix: modify error handling when status 403

This commit is contained in:
Dayoung 2025-06-04 15:47:47 +09:00
parent 50617c7b7f
commit 9a91727c98
3 changed files with 16 additions and 20 deletions

View File

@ -87,11 +87,11 @@ export async function GET(request: NextRequest, { params }: { params: Promise<{
if (checkRole(survey, sessionParams)) { if (checkRole(survey, sessionParams)) {
return NextResponse.json(survey) return NextResponse.json(survey)
} else { } else {
return NextResponse.json({ error: 'Forbidden' }, { status: 403 }) return NextResponse.json({ error: '権限がありません。' }, { status: 403 })
} }
} catch (error) { } catch (error: any) {
console.error('Error fetching survey:', error) console.error('Error fetching survey:', error)
return NextResponse.json({ error: 'Failed to fetch survey' }, { status: 500 }) return NextResponse.json({ error: 'データの取得に失敗しました。' }, { status: 500 })
} }
} }

View File

@ -5,7 +5,7 @@ import { useEffect, useState } from 'react'
import ButtonForm from './ButtonForm' import ButtonForm from './ButtonForm'
import BasicForm from './BasicForm' import BasicForm from './BasicForm'
import RoofForm from './RoofForm' import RoofForm from './RoofForm'
import { useParams, useSearchParams, useRouter } from 'next/navigation' import { useParams, useSearchParams } from 'next/navigation'
import { useSurvey } from '@/hooks/useSurvey' import { useSurvey } from '@/hooks/useSurvey'
import { useSessionStore } from '@/store/session' import { useSessionStore } from '@/store/session'
@ -70,7 +70,6 @@ const basicInfoForm: SurveyBasicRequest = {
export default function DetailForm() { export default function DetailForm() {
const idParam = useSearchParams().get('id') const idParam = useSearchParams().get('id')
const routeId = useParams().id const routeId = useParams().id
const router = useRouter()
const modeset = Number(routeId) ? 'READ' : idParam ? 'EDIT' : 'CREATE' const modeset = Number(routeId) ? 'READ' : idParam ? 'EDIT' : 'CREATE'
const id = Number(routeId) ? Number(routeId) : Number(idParam) const id = Number(routeId) ? Number(routeId) : Number(idParam)
@ -102,18 +101,11 @@ export default function DetailForm() {
constructionPoint: session.builderNm ?? null, constructionPoint: session.builderNm ?? null,
constructionPointId: session.builderNo ?? null, constructionPointId: session.builderNo ?? null,
})) }))
}, [session]) }, [session?.isLoggedIn])
// 설문 데이터 로딩 및 업데이트 // 설문 데이터 로딩 및 업데이트
useEffect(() => { useEffect(() => {
if (isLoadingSurveyDetail || !session?.isLoggedIn) return if (isLoadingSurveyDetail || !session?.isLoggedIn) return
if (surveyDetail === null && mode !== 'CREATE') {
alert('権限がありません。')
router.replace('/survey-sale')
return
}
if (surveyDetail && (mode === 'EDIT' || mode === 'READ')) { if (surveyDetail && (mode === 'EDIT' || mode === 'READ')) {
const { id, uptDt, regDt, detailInfo, ...rest } = surveyDetail const { id, uptDt, regDt, detailInfo, ...rest } = surveyDetail
setBasicInfoData((prev) => ({ setBasicInfoData((prev) => ({
@ -129,7 +121,7 @@ export default function DetailForm() {
} }
} }
} }
}, [surveyDetail, mode, session?.isLoggedIn, isLoadingSurveyDetail]) }, [mode, session?.isLoggedIn, isLoadingSurveyDetail])
const data = { const data = {
basic: basicInfoData, basic: basicInfoData,

View File

@ -1,10 +1,11 @@
import type { SurveyBasicInfo, SurveyDetailRequest, SurveyRegistRequest } from '@/types/Survey' import type { SurveyBasicInfo, SurveyDetailRequest, SurveyRegistRequest } from '@/types/Survey'
import { useMemo } from 'react' import { useMemo, useEffect } from 'react'
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
import { useSurveyFilterStore } from '@/store/surveyFilterStore' import { useSurveyFilterStore } from '@/store/surveyFilterStore'
import { useSessionStore } from '@/store/session' import { useSessionStore } from '@/store/session'
import { useAxios } from './useAxios' import { useAxios } from './useAxios'
import { queryStringFormatter } from '@/utils/common-utils' import { queryStringFormatter } from '@/utils/common-utils'
import { useRouter } from 'next/navigation'
export const requiredFields = [ export const requiredFields = [
{ {
@ -75,6 +76,7 @@ export function useSurvey(id?: number): {
const { keyword, searchOption, isMySurvey, sort, offset } = useSurveyFilterStore() const { keyword, searchOption, isMySurvey, sort, offset } = useSurveyFilterStore()
const { session } = useSessionStore() const { session } = useSessionStore()
const { axiosInstance } = useAxios() const { axiosInstance } = useAxios()
const router = useRouter()
const { const {
data: surveyListData, data: surveyListData,
@ -109,9 +111,8 @@ export function useSurvey(id?: number): {
const { data: surveyDetail, isLoading: isLoadingSurveyDetail } = useQuery({ const { data: surveyDetail, isLoading: isLoadingSurveyDetail } = useQuery({
queryKey: ['survey', id], queryKey: ['survey', id],
queryFn: async () => { queryFn: async () => {
if (id === undefined) throw new Error('id is required') if (!session?.isLoggedIn || id === 0 || id === undefined) return null
if (id === null || isNaN(id)) return null try {
if (session?.isLoggedIn) {
const resp = await axiosInstance(null).get<SurveyBasicInfo>(`/api/survey-sales/${id}`, { const resp = await axiosInstance(null).get<SurveyBasicInfo>(`/api/survey-sales/${id}`, {
params: { params: {
role: session?.role, role: session?.role,
@ -121,10 +122,13 @@ export function useSurvey(id?: number): {
}, },
}) })
return resp.data return resp.data
} catch (error: any) {
alert(error.response?.data.error)
router.replace('/survey-sale')
return null
} }
return null
}, },
enabled: id !== undefined, enabled: id !== 0 && id !== undefined && session?.isLoggedIn,
}) })
const { mutateAsync: createSurvey, isPending: isCreatingSurvey } = useMutation({ const { mutateAsync: createSurvey, isPending: isCreatingSurvey } = useMutation({