@@ -49,6 +49,38 @@ async function resolveUser(req: NextRequest, deps: FreebuffSessionDeps): Promise
4949 return { userId : String ( userInfo . id ) }
5050}
5151
52+ function serverError (
53+ deps : FreebuffSessionDeps ,
54+ route : string ,
55+ userId : string | null ,
56+ error : unknown ,
57+ ) : NextResponse {
58+ const err = error instanceof Error ? error : new Error ( String ( error ) )
59+ deps . logger . error (
60+ {
61+ route,
62+ userId,
63+ errorName : err . name ,
64+ errorMessage : err . message ,
65+ errorCode : ( err as any ) . code ,
66+ cause :
67+ ( err as any ) . cause instanceof Error
68+ ? {
69+ name : ( err as any ) . cause . name ,
70+ message : ( err as any ) . cause . message ,
71+ code : ( err as any ) . cause . code ,
72+ }
73+ : ( err as any ) . cause ,
74+ stack : err . stack ,
75+ } ,
76+ '[freebuff/session] handler failed' ,
77+ )
78+ return NextResponse . json (
79+ { error : 'internal_error' , message : err . message } ,
80+ { status : 500 } ,
81+ )
82+ }
83+
5284/** POST /api/v1/freebuff/session — join queue / take over as this instance. */
5385export async function postFreebuffSession (
5486 req : NextRequest ,
@@ -57,11 +89,15 @@ export async function postFreebuffSession(
5789 const auth = await resolveUser ( req , deps )
5890 if ( 'error' in auth ) return auth . error
5991
60- const state = await requestSession ( {
61- userId : auth . userId ,
62- deps : deps . sessionDeps ,
63- } )
64- return NextResponse . json ( state , { status : 200 } )
92+ try {
93+ const state = await requestSession ( {
94+ userId : auth . userId ,
95+ deps : deps . sessionDeps ,
96+ } )
97+ return NextResponse . json ( state , { status : 200 } )
98+ } catch ( error ) {
99+ return serverError ( deps , 'POST' , auth . userId , error )
100+ }
65101}
66102
67103/** GET /api/v1/freebuff/session — read current state without mutation. */
@@ -72,17 +108,21 @@ export async function getFreebuffSession(
72108 const auth = await resolveUser ( req , deps )
73109 if ( 'error' in auth ) return auth . error
74110
75- const state = await getSessionState ( {
76- userId : auth . userId ,
77- deps : deps . sessionDeps ,
78- } )
79- if ( ! state ) {
80- return NextResponse . json (
81- { status : 'none' , message : 'Call POST to join the waiting room.' } ,
82- { status : 200 } ,
83- )
111+ try {
112+ const state = await getSessionState ( {
113+ userId : auth . userId ,
114+ deps : deps . sessionDeps ,
115+ } )
116+ if ( ! state ) {
117+ return NextResponse . json (
118+ { status : 'none' , message : 'Call POST to join the waiting room.' } ,
119+ { status : 200 } ,
120+ )
121+ }
122+ return NextResponse . json ( state , { status : 200 } )
123+ } catch ( error ) {
124+ return serverError ( deps , 'GET' , auth . userId , error )
84125 }
85- return NextResponse . json ( state , { status : 200 } )
86126}
87127
88128/** DELETE /api/v1/freebuff/session — end session / leave queue immediately. */
@@ -93,6 +133,10 @@ export async function deleteFreebuffSession(
93133 const auth = await resolveUser ( req , deps )
94134 if ( 'error' in auth ) return auth . error
95135
96- await endUserSession ( { userId : auth . userId , deps : deps . sessionDeps } )
97- return NextResponse . json ( { status : 'ended' } , { status : 200 } )
136+ try {
137+ await endUserSession ( { userId : auth . userId , deps : deps . sessionDeps } )
138+ return NextResponse . json ( { status : 'ended' } , { status : 200 } )
139+ } catch ( error ) {
140+ return serverError ( deps , 'DELETE' , auth . userId , error )
141+ }
98142}
0 commit comments