diff --git a/backend/src/routes/invitations.ts b/backend/src/routes/invitations.ts index 7fc82a2..5ff5862 100644 --- a/backend/src/routes/invitations.ts +++ b/backend/src/routes/invitations.ts @@ -20,13 +20,13 @@ function inviteLinkFor(req: Request, token: string): string { return `${baseUrl.replace(/\/$/, '')}/?invite=${token}`; } -// POST /v1/invitations (nur Vermieter/Admin) — { email, roomId?, role? } -> { invitation, inviteLink } +// POST /v1/invitations (nur Vermieter/Admin) — { email, fullName?, roomId?, role? } -> { invitation, inviteLink } invitationsRouter.post( '/invitations', requireAuth, requireRole('LANDLORD', 'ADMIN'), async (req: AuthedRequest, res: Response) => { - const { email, roomId, role } = req.body || {}; + const { email, fullName, roomId, role } = req.body || {}; if (!email || !String(email).trim()) { return res.status(400).json({ error: 'E-Mail-Adresse erforderlich' }); } @@ -64,6 +64,7 @@ invitationsRouter.post( const invitation = await prisma.invitation.create({ data: { email: normalizedEmail, + fullName: typeof fullName === 'string' && fullName.trim() ? fullName.trim() : null, token, role: invitedRole, roomId: roomId || null, @@ -124,6 +125,7 @@ invitationsRouter.get('/invitations/:token/preview', async (req: Request, res: R } res.status(200).json({ email: invitation.email, + fullName: invitation.fullName, role: invitation.role, room: invitation.room, expiresAt: invitation.expiresAt, diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 6536325..1bc324e 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -237,6 +237,7 @@ model Room { model Invitation { id String @id @default(uuid()) email String + fullName String? @map("full_name") token String @unique role UserRole @default(TENANT) roomId String? @map("room_id") diff --git a/web-dashboard/index.html b/web-dashboard/index.html index a4c62f3..ff67827 100644 --- a/web-dashboard/index.html +++ b/web-dashboard/index.html @@ -656,6 +656,10 @@