Skip to content

Commit e50c4b5

Browse files
committed
fix: ai-report 생성 중복 요청 에러 해결 (#159)
1 parent 9a94bbd commit e50c4b5

1 file changed

Lines changed: 27 additions & 21 deletions

File tree

src/features/experience-matching/ui/analyzing/analyzing.tsx

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,38 +10,44 @@ import * as styles from "./analyzing.css";
1010

1111
import type { CustomErrorResponse } from "@/shared/api/generate/http-client";
1212

13+
let isRequesting = false;
14+
1315
export const Analyzing = ({ nextStep }: { nextStep: () => void }) => {
1416
const { company, experience, jobDescription, setReportId } = useReportStore();
15-
const { mutate } = useCreateReport();
17+
const { mutateAsync } = useCreateReport();
1618

1719
// 에러 핸들링 (임시)
1820
const [open, setOpen] = useState(false);
1921
const [errorMsg, setErrorMsg] = useState("");
2022

2123
useEffect(() => {
22-
mutate(
23-
{
24-
companyId: company?.id ?? 0,
25-
experienceId: experience?.id ?? 0,
26-
jobDescription: jobDescription,
27-
},
28-
{
29-
onSuccess: (response) => {
30-
setReportId(response?.id ?? 0);
31-
nextStep();
32-
},
33-
onError: (error: CustomErrorResponse) => {
34-
const serverMessage =
35-
error.message || "리포트 생성 중 에러가 발생했습니다";
36-
setErrorMsg(serverMessage);
37-
setOpen(true);
24+
if (isRequesting) return;
25+
isRequesting = true;
26+
27+
const handleRequest = async () => {
28+
try {
29+
const response = await mutateAsync({
30+
companyId: company?.id ?? 0,
31+
experienceId: experience?.id ?? 0,
32+
jobDescription: jobDescription,
33+
});
3834

39-
setTimeout(() => setOpen(false), 3000);
40-
},
35+
setReportId(response?.id ?? 0);
36+
nextStep();
37+
} catch (err) {
38+
const error = err as CustomErrorResponse;
39+
const serverMessage =
40+
error.message || "리포트 생성 중 에러가 발생했습니다";
41+
setErrorMsg(serverMessage);
42+
setOpen(true);
43+
setTimeout(() => setOpen(false), 3000);
44+
} finally {
45+
isRequesting = false;
4146
}
42-
);
43-
}, [nextStep, setReportId, mutate]);
47+
};
4448

49+
handleRequest();
50+
}, []);
4551
return (
4652
<>
4753
<div className={styles.layout}>

0 commit comments

Comments
 (0)