11import { useMutation } from "@tanstack/react-query"
22import { IAdmissionRequest } from "./types"
3- import { AdmissionUserInstance } from "@entry/util-config"
3+ import { AdmissionUserInstance , sendSubmissionSuccess , sendSubmissionCancel , getSessionId } from "@entry/util-config"
44import { toast } from "react-toastify"
55import { AxiosError } from "axios"
66import { useNavigate } from "react-router"
@@ -38,23 +38,29 @@ const sendErrorReport = async (
3838
3939export const useAdmissionSubmitPost = < T extends IAdmissionRequest > ( ) => {
4040 const navigate = useNavigate ( )
41- const sessionId = crypto . randomUUID ( )
41+ const sessionId = getSessionId ( ) || crypto . randomUUID ( )
4242
4343 return useMutation ( {
4444 mutationFn : async ( data : T ) => {
4545 const startTime = Date . now ( )
4646 try {
4747 const response = await AdmissionUserInstance . post ( '/api/v1/applications' , data )
48- return response . data
48+ return { data : response . data , responseTime : Date . now ( ) - startTime }
4949 } catch ( error ) {
5050 const responseTime = Date . now ( ) - startTime
5151 throw { error, responseTime }
5252 }
5353 } ,
5454
55- onSuccess : ( data ) => {
55+ onSuccess : async ( result , variables ) => {
5656 toast . success ( '원서 제출이 정상적으로 완료되었습니다.' )
5757
58+ // 원서 제출 성공 전송
59+ await sendSubmissionSuccess ( {
60+ sessionId,
61+ submissionId : result . data . id || 0 ,
62+ } )
63+
5864 setTimeout ( ( ) => {
5965 window . location . href = "https://entrydsm.kr/"
6066 } , 2000 )
@@ -64,22 +70,66 @@ export const useAdmissionSubmitPost = <T extends IAdmissionRequest>() => {
6470 const err = errorData . error as AxiosError < any >
6571 const responseTime = errorData . responseTime || 0
6672
73+ // 에러 상세 정보 생성
74+ const errorDetails = {
75+ httpStatus : err . response ?. status || 0 ,
76+ errorCode : err . code || "UNKNOWN_ERROR" ,
77+ message : err . message || "원서 제출 중 오류가 발생했습니다." ,
78+ responseData : err . response ?. data ? JSON . stringify ( err . response . data ) : "" ,
79+ requestData : JSON . stringify ( variables ) ,
80+ stackTrace : err . stack || "" ,
81+ responseTime : responseTime ,
82+ endpoint : "/api/v1/applications" ,
83+ httpMethod : "POST" ,
84+ }
85+
86+ const reason = `[${ errorDetails . httpStatus } ] ${ errorDetails . message } \n` +
87+ `ErrorCode: ${ errorDetails . errorCode } \n` +
88+ `Response: ${ errorDetails . responseData } \n` +
89+ `Request: ${ errorDetails . requestData } \n` +
90+ `ResponseTime: ${ errorDetails . responseTime } ms\n` +
91+ `Stack: ${ errorDetails . stackTrace } `
92+
6793 if ( err . response ?. status === 409 ) {
6894 toast . error ( '동일한 계정으로 제출된 원서가 존재합니다.' )
95+
96+ // 원서 제출 실패 전송
97+ await sendSubmissionCancel ( {
98+ sessionId,
99+ submissionId : 0 ,
100+ reason,
101+ } )
102+
69103 await sendErrorReport ( sessionId , err , variables , responseTime )
70104
71105 setTimeout ( ( ) => {
72106 window . location . href = "https://entrydsm.kr/"
73107 } , 2000 )
74108 } else if ( err . response ?. status === 400 || err . response ?. status === 500 || err . response ?. status === 502 || err . response ?. status === 503 ) {
75109 toast . error ( "일시적으로 처리할 수 없습니다. 다시 시도해 주세요." )
110+
111+ // 원서 제출 실패 전송
112+ await sendSubmissionCancel ( {
113+ sessionId,
114+ submissionId : 0 ,
115+ reason,
116+ } )
117+
76118 await sendErrorReport ( sessionId , err , variables , responseTime )
77119
78120 setTimeout ( ( ) => {
79121 window . location . href = "https://entrydsm.kr/"
80122 } , 2000 )
81123 } else {
82124 toast . error ( "원서 제출 중 오류가 발생했습니다." )
125+
126+ // 원서 제출 실패 전송
127+ await sendSubmissionCancel ( {
128+ sessionId,
129+ submissionId : 0 ,
130+ reason,
131+ } )
132+
83133 await sendErrorReport ( sessionId , err , variables , responseTime )
84134
85135 setTimeout ( ( ) => {
0 commit comments