fix: modify error handling when status 403
This commit is contained in:
parent
50617c7b7f
commit
9a91727c98
@ -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 })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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({
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user