|
1 | 1 | import { AuditAction, AuditResourceType, recordAudit } from '@sim/audit' |
2 | 2 | import { createLogger } from '@sim/logger' |
3 | 3 | import { type NextRequest, NextResponse } from 'next/server' |
4 | | -import { |
5 | | - invitationActionBodySchema, |
6 | | - invitationActionParamsSchema, |
7 | | -} from '@/lib/api/contracts/invitations' |
8 | | -import { getValidationErrorMessage } from '@/lib/api/server' |
| 4 | +import { acceptInvitationContract } from '@/lib/api/contracts/invitations' |
| 5 | +import { parseRequest } from '@/lib/api/server' |
9 | 6 | import { getSession } from '@/lib/auth' |
10 | 7 | import { withRouteHandler } from '@/lib/core/utils/with-route-handler' |
11 | 8 | import { acceptInvitation } from '@/lib/invitations/core' |
12 | 9 |
|
13 | 10 | const logger = createLogger('InvitationAcceptAPI') |
14 | 11 |
|
15 | 12 | export const POST = withRouteHandler( |
16 | | - async (request: NextRequest, { params }: { params: Promise<{ id: string }> }) => { |
17 | | - const parsedParams = invitationActionParamsSchema.safeParse(await params) |
18 | | - if (!parsedParams.success) { |
19 | | - return NextResponse.json( |
20 | | - { error: getValidationErrorMessage(parsedParams.error) }, |
21 | | - { status: 400 } |
22 | | - ) |
23 | | - } |
24 | | - const { id } = parsedParams.data |
| 13 | + async (request: NextRequest, context: { params: Promise<{ id: string }> }) => { |
25 | 14 | const session = await getSession() |
26 | 15 |
|
27 | 16 | if (!session?.user?.id || !session.user.email) { |
28 | 17 | return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) |
29 | 18 | } |
30 | 19 |
|
31 | | - const body = await request.json().catch(() => ({})) |
32 | | - const parsed = invitationActionBodySchema.safeParse(body) |
33 | | - if (!parsed.success) { |
34 | | - return NextResponse.json( |
35 | | - { error: getValidationErrorMessage(parsed.error, 'Invalid request body') }, |
36 | | - { status: 400 } |
37 | | - ) |
38 | | - } |
| 20 | + const parsed = await parseRequest(acceptInvitationContract, request, context) |
| 21 | + if (!parsed.success) return parsed.response |
| 22 | + |
| 23 | + const { id } = parsed.data.params |
39 | 24 |
|
40 | 25 | const result = await acceptInvitation({ |
41 | 26 | userId: session.user.id, |
42 | 27 | userEmail: session.user.email, |
43 | 28 | invitationId: id, |
44 | | - token: parsed.data.token ?? null, |
| 29 | + token: parsed.data.body.token ?? null, |
45 | 30 | }) |
46 | 31 |
|
47 | 32 | if (!result.success) { |
|
0 commit comments