19 lines
1.6 KiB
TypeScript
19 lines
1.6 KiB
TypeScript
import {sameOrigin} from '../../../lib/meshkee/session';
|
|
import { tenantApi } from '../../../lib/meshkee/api';
|
|
import { validateContact } from '../../../lib/meshkee/contact';
|
|
export async function POST(request:Request) {
|
|
if(!sameOrigin(request))return Response.json({message:'درخواست نامعتبر است.'},{status:403});
|
|
if(!request.headers.get('content-type')?.includes('application/json'))return Response.json({message:'فرمت درخواست نامعتبر است.'},{status:415});
|
|
const raw=await request.text();
|
|
if(raw.length>20000)return Response.json({message:'متن پیام بیش از حد طولانی است.'},{status:413});
|
|
let input;
|
|
try{input=JSON.parse(raw)}catch{return Response.json({message:'درخواست نامعتبر است.'},{status:400})}
|
|
if(!input||typeof input!=='object'||Array.isArray(input))return Response.json({message:'درخواست نامعتبر است.'},{status:400});
|
|
const {data,errors}=validateContact(input);
|
|
if(Object.keys(errors).length)return Response.json({message:'اطلاعات فرم را بررسی کنید.',errors},{status:400});
|
|
try {
|
|
await tenantApi('/contact-submissions',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(Object.fromEntries(Object.entries(data).filter(([,value])=>value)))});
|
|
return Response.json({message:'پیام شما با موفقیت ثبت شد. از ارتباط شما سپاسگزاریم.'},{status:201});
|
|
}catch{return Response.json({message:'پیام ارسال نشد. لطفاً دوباره تلاش کنید یا با ما تماس بگیرید.'},{status:502})}
|
|
}
|