feat: modify inquiry save requestParameter to formdata add files
This commit is contained in:
parent
59b1f3198c
commit
b4dfc2211f
@ -13,6 +13,7 @@ export async function GET(request: Request) {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await axios.get(`${process.env.NEXT_PUBLIC_INQUIRY_API_URL}/api/qna/detail?${queryStringFormatter(params)}`)
|
const response = await axios.get(`${process.env.NEXT_PUBLIC_INQUIRY_API_URL}/api/qna/detail?${queryStringFormatter(params)}`)
|
||||||
|
console.log('response.data detail:: ', response.data)
|
||||||
if (response.status === 200) {
|
if (response.status === 200) {
|
||||||
return NextResponse.json(response.data)
|
return NextResponse.json(response.data)
|
||||||
}
|
}
|
||||||
|
|||||||
15
src/app/api/qna/file/route.ts
Normal file
15
src/app/api/qna/file/route.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import axios from 'axios'
|
||||||
|
import { NextResponse } from 'next/server'
|
||||||
|
|
||||||
|
export async function GET(request: Request) {
|
||||||
|
const { searchParams } = new URL(request.url)
|
||||||
|
const encodeFileNo = searchParams.get('encodeFileNo')
|
||||||
|
|
||||||
|
if (!encodeFileNo) {
|
||||||
|
return NextResponse.json({ error: 'fileNo is required' }, { status: 400 })
|
||||||
|
}
|
||||||
|
const response = await axios.get(`${process.env.NEXT_PUBLIC_INQUIRY_API_URL}/api/file/downloadFile?encodeFileNo=${encodeFileNo}`)
|
||||||
|
console.log('response.data:: ', response.data)
|
||||||
|
|
||||||
|
return NextResponse.json(response.data)
|
||||||
|
}
|
||||||
@ -17,7 +17,7 @@ export async function GET(request: Request) {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await axios.get(`${process.env.NEXT_PUBLIC_INQUIRY_API_URL}/api/qna/list?${queryStringFormatter(params)}`)
|
const response = await axios.get(`${process.env.NEXT_PUBLIC_INQUIRY_API_URL}/api/qna/list?${queryStringFormatter(params)}`)
|
||||||
|
console.log('response.data:: ', response.data)
|
||||||
if (response.status === 200) {
|
if (response.status === 200) {
|
||||||
return NextResponse.json(response.data)
|
return NextResponse.json(response.data)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,13 +2,21 @@ import axios from 'axios'
|
|||||||
import { NextResponse } from 'next/server'
|
import { NextResponse } from 'next/server'
|
||||||
|
|
||||||
export async function POST(request: Request) {
|
export async function POST(request: Request) {
|
||||||
const body = await request.json()
|
const formData = await request.formData()
|
||||||
|
console.log('formData:: ', formData)
|
||||||
|
// const body = await request.json()
|
||||||
|
// console.log('body:: ', body)
|
||||||
|
|
||||||
const response = await axios.post(`${process.env.NEXT_PUBLIC_INQUIRY_API_URL}/api/qna/save`, body)
|
try {
|
||||||
|
const response = await axios.post(`${process.env.NEXT_PUBLIC_INQUIRY_API_URL}/api/qna/save`, formData)
|
||||||
|
console.log('response.data:: ', response.data)
|
||||||
|
|
||||||
if (response.status === 200) {
|
if (response.status === 200) {
|
||||||
return NextResponse.json(response.data)
|
return NextResponse.json(response.data)
|
||||||
|
}
|
||||||
|
return NextResponse.json({ error: response.data }, { status: response.status })
|
||||||
|
} catch (error) {
|
||||||
|
console.error('error:: ', error)
|
||||||
|
return NextResponse.json({ error: 'Failed to save qna' }, { status: 500 })
|
||||||
}
|
}
|
||||||
|
|
||||||
return NextResponse.json({ error: 'Failed to save qna' }, { status: response.status })
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,8 +1,9 @@
|
|||||||
'use client'
|
'use client'
|
||||||
|
|
||||||
|
import { useInquiry } from '@/hooks/useInquiry'
|
||||||
import { Inquiry } from '@/types/Inquiry'
|
import { Inquiry } from '@/types/Inquiry'
|
||||||
|
|
||||||
export default function Answer({ inquiryDetail }: { inquiryDetail: Inquiry}) {
|
export default function Answer({ inquiryDetail, downloadFile }: { inquiryDetail: Inquiry; downloadFile: (encodeFileNo: number) => Promise<File> }) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="inquiry-answer-wrap">
|
<div className="inquiry-answer-wrap">
|
||||||
@ -21,7 +22,7 @@ export default function Answer({ inquiryDetail }: { inquiryDetail: Inquiry}) {
|
|||||||
<ul className="file-list">
|
<ul className="file-list">
|
||||||
{inquiryDetail?.ansListFile?.map((file) => (
|
{inquiryDetail?.ansListFile?.map((file) => (
|
||||||
<li className="file-item" key={file.fileNo}>
|
<li className="file-item" key={file.fileNo}>
|
||||||
<button className="file-item-bx">
|
<button className="file-item-bx" onClick={() => downloadFile(Number(file.encodeFileNo))}>
|
||||||
<div className="file-item-name">{file.srcFileNm} </div>
|
<div className="file-item-name">{file.srcFileNm} </div>
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@ -12,7 +12,7 @@ export default function Detail() {
|
|||||||
const params = useParams()
|
const params = useParams()
|
||||||
const id = params.id
|
const id = params.id
|
||||||
|
|
||||||
const { inquiryDetail } = useInquiry(Number(id), '5200')
|
const { inquiryDetail, downloadFile } = useInquiry(Number(id), '5200')
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -66,7 +66,7 @@ export default function Detail() {
|
|||||||
<ul className="file-list">
|
<ul className="file-list">
|
||||||
{inquiryDetail?.listFile?.map((file) => (
|
{inquiryDetail?.listFile?.map((file) => (
|
||||||
<li className="file-item">
|
<li className="file-item">
|
||||||
<button className="file-item-bx">
|
<button className="file-item-bx" onClick={() => downloadFile(Number(file.encodeFileNo))}>
|
||||||
<div className="file-item-name">{file.srcFileNm} </div>
|
<div className="file-item-name">{file.srcFileNm} </div>
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
@ -75,7 +75,7 @@ export default function Detail() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{inquiryDetail?.answerYn === 'Y' && inquiryDetail && <Answer inquiryDetail={inquiryDetail} />}
|
{inquiryDetail?.answerYn === 'Y' && inquiryDetail && <Answer inquiryDetail={inquiryDetail} downloadFile={downloadFile} />}
|
||||||
|
|
||||||
<div className="sale-edit-btn">
|
<div className="sale-edit-btn">
|
||||||
<button className="btn-frame n-blue icon" onClick={() => router.push('/inquiry/list')}>
|
<button className="btn-frame n-blue icon" onClick={() => router.push('/inquiry/list')}>
|
||||||
|
|||||||
@ -11,7 +11,7 @@ export default function RegistForm() {
|
|||||||
const { session } = useSessionStore()
|
const { session } = useSessionStore()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
|
||||||
/// TODO: 세션 정보 적용
|
// TODO: 세션 정보 적용 | 현재는 test용 정보 적용
|
||||||
// useEffect(() => {
|
// useEffect(() => {
|
||||||
// setInquiryRequest({ ...inquiryRequest, regId: session?.userId ?? '', regUserNm: session?.userNm ?? '' })
|
// setInquiryRequest({ ...inquiryRequest, regId: session?.userId ?? '', regUserNm: session?.userNm ?? '' })
|
||||||
// }, [session])
|
// }, [session])
|
||||||
@ -24,7 +24,7 @@ export default function RegistForm() {
|
|||||||
qnaClsSmlCd: null,
|
qnaClsSmlCd: null,
|
||||||
title: '',
|
title: '',
|
||||||
contents: null,
|
contents: null,
|
||||||
regId: '',
|
regId: 'X112',
|
||||||
regUserNm: 'TEST',
|
regUserNm: 'TEST',
|
||||||
regUserTelNo: null,
|
regUserTelNo: null,
|
||||||
storeId: null,
|
storeId: null,
|
||||||
@ -46,7 +46,7 @@ export default function RegistForm() {
|
|||||||
|
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
if (confirm('お問い合わせを登録しますか? Hanwha Japanの担当者にお問い合わせメールが送信されます。')) {
|
if (confirm('お問い合わせを登録しますか? Hanwha Japanの担当者にお問い合わせメールが送信されます。')) {
|
||||||
const res = await saveInquiry(inquiryRequest)
|
const res = await saveInquiry({ inquiryRequest, files: attachedFiles })
|
||||||
alert('保存されました。')
|
alert('保存されました。')
|
||||||
router.push(`/inquiry/${res.qnaNo}`)
|
router.push(`/inquiry/${res.qnaNo}`)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,7 +12,8 @@ export function useInquiry(
|
|||||||
inquiryDetail: Inquiry | null
|
inquiryDetail: Inquiry | null
|
||||||
isLoadingInquiryDetail: boolean
|
isLoadingInquiryDetail: boolean
|
||||||
isSavingInquiry: boolean
|
isSavingInquiry: boolean
|
||||||
saveInquiry: (inquiryRequest: InquiryRequest) => Promise<InquirySaveResponse>
|
saveInquiry: (params: { inquiryRequest: InquiryRequest; files: File[] }) => Promise<InquirySaveResponse>
|
||||||
|
downloadFile: (encodeFileNo: number) => Promise<File>
|
||||||
} {
|
} {
|
||||||
const { session } = useSessionStore()
|
const { session } = useSessionStore()
|
||||||
const queryClient = useQueryClient()
|
const queryClient = useQueryClient()
|
||||||
@ -50,8 +51,16 @@ export function useInquiry(
|
|||||||
})
|
})
|
||||||
|
|
||||||
const { mutateAsync: saveInquiry, isPending: isSavingInquiry } = useMutation({
|
const { mutateAsync: saveInquiry, isPending: isSavingInquiry } = useMutation({
|
||||||
mutationFn: async (inquiryRequest: InquiryRequest) => {
|
mutationFn: async ({ inquiryRequest, files }: { inquiryRequest: InquiryRequest; files: File[] }) => {
|
||||||
const resp = await axiosInstance(null).post<{ data: InquirySaveResponse }>('/api/qna/save', inquiryRequest)
|
const formData = new FormData()
|
||||||
|
Object.entries(inquiryRequest).forEach(([key, value]) => {
|
||||||
|
formData.append(key, value ?? '')
|
||||||
|
})
|
||||||
|
files.forEach((file) => {
|
||||||
|
formData.append('files', file)
|
||||||
|
})
|
||||||
|
|
||||||
|
const resp = await axiosInstance(null).post<{ data: InquirySaveResponse }>('/api/qna/save', formData)
|
||||||
return resp.data.data
|
return resp.data.data
|
||||||
},
|
},
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
@ -59,6 +68,11 @@ export function useInquiry(
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const downloadFile = async (encodeFileNo: number) => {
|
||||||
|
const resp = await axiosInstance(null).get<File>(`/api/qna/file`, { params: { encodeFileNo } })
|
||||||
|
return resp.data
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
inquiryList: inquiryList ?? [],
|
inquiryList: inquiryList ?? [],
|
||||||
inquiryDetail: inquiryDetail ?? null,
|
inquiryDetail: inquiryDetail ?? null,
|
||||||
@ -66,5 +80,6 @@ export function useInquiry(
|
|||||||
isLoadingInquiryDetail,
|
isLoadingInquiryDetail,
|
||||||
isSavingInquiry,
|
isSavingInquiry,
|
||||||
saveInquiry,
|
saveInquiry,
|
||||||
|
downloadFile,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user