@@ -2,11 +2,12 @@ import { cookies } from "next/headers";
22import { NextResponse } from "next/server" ;
33
44import { saveAvailability } from "@/lib/event-service" ;
5+ import { createI18n , getLocaleFromRequest } from "@/lib/i18n/server" ;
56import { handleRouteError , PRIVATE_NO_STORE_HEADERS } from "@/lib/security" ;
67import { getClientIp } from "@/lib/request" ;
78import { enforceRateLimit } from "@/lib/rate-limit" ;
89import { getParticipantCookieName } from "@/lib/tokens" ;
9- import { availabilityMutationSchema } from "@/lib/validators" ;
10+ import { createAvailabilityMutationSchema } from "@/lib/validators" ;
1011
1112type Context = {
1213 params : Promise < {
@@ -15,6 +16,8 @@ type Context = {
1516} ;
1617
1718export async function PUT ( request : Request , { params } : Context ) {
19+ const i18n = createI18n ( getLocaleFromRequest ( request ) ) ;
20+
1821 try {
1922 const { slug } = await params ;
2023 const ip = getClientIp ( request ) ;
@@ -24,19 +27,19 @@ export async function PUT(request: Request, { params }: Context) {
2427 enforceRateLimit ( `availability:ip:${ slug } :${ ip } ` , {
2528 limit : 120 ,
2629 windowMs : 5 * 60 * 1000 ,
27- message : "Too many availability updates from this network. Please wait a moment and try again. " ,
30+ code : "availability_ip_rate_limited " ,
2831 } ) ;
2932
3033 enforceRateLimit ( `availability:session:${ slug } :${ cookieValue ?? ip } ` , {
3134 limit : 60 ,
3235 windowMs : 60 * 1000 ,
33- message : "Too many availability updates in a short time. Please slow down for a moment. " ,
36+ code : "availability_session_rate_limited " ,
3437 } ) ;
3538
3639 const json = await request . json ( ) ;
37- const mutation = availabilityMutationSchema . parse ( json ) ;
40+ const mutation = createAvailabilityMutationSchema ( ) . parse ( json ) ;
3841
39- const result = await saveAvailability ( slug , mutation , cookieValue ) ;
42+ const result = await saveAvailability ( slug , i18n . locale , mutation , cookieValue ) ;
4043
4144 return NextResponse . json (
4245 { ok : true , snapshot : result . snapshot } ,
@@ -46,7 +49,8 @@ export async function PUT(request: Request, { params }: Context) {
4649 ) ;
4750 } catch ( error ) {
4851 return handleRouteError ( error , {
49- fallbackMessage : "Unable to save availability." ,
52+ fallbackMessage : i18n . messages . errors . routeFallbacks . saveAvailability ,
53+ messages : i18n . messages ,
5054 route : "api/events/[slug]/availability" ,
5155 headers : PRIVATE_NO_STORE_HEADERS ,
5256 } ) ;
0 commit comments