Files
auto-virtual-tryon-frontend/app/api/reviews/[orderId]/submit/route.ts

37 lines
1.1 KiB
TypeScript

import { adaptReviewSubmission } from "@/lib/adapters/reviews";
import { backendRequest } from "@/lib/http/backend-client";
import {
jsonSuccess,
parseJsonBody,
parsePositiveIntegerParam,
withErrorHandling,
} from "@/lib/http/response";
import type { SubmitReviewResponseDto } from "@/lib/types/backend";
import { parseReviewActionPayload } from "@/lib/validation/review-action";
type RouteContext = {
params: Promise<{
orderId: string;
}>;
};
export async function POST(request: Request, context: RouteContext) {
return withErrorHandling(async () => {
const { orderId: rawOrderId } = await context.params;
const orderId = parsePositiveIntegerParam(rawOrderId, "orderId");
const rawPayload = await parseJsonBody(request);
const payload = parseReviewActionPayload(rawPayload);
const response = await backendRequest<SubmitReviewResponseDto>(
`/reviews/${orderId}/submit`,
{
method: "POST",
body: JSON.stringify(payload),
},
);
return jsonSuccess(adaptReviewSubmission(response.data), {
mode: "proxy",
});
});
}