feat: add trip invitation creation and acceptance flow

This commit is contained in:
Bastian Wagner
2026-08-17 15:21:08 +02:00
parent baae15dcbc
commit 6954024622
9 changed files with 456 additions and 1 deletions

View File

@@ -0,0 +1,68 @@
import {
Body,
Controller,
Delete,
Get,
Param,
Post,
UseGuards,
} from '@nestjs/common';
import { OidcAuthGuard } from '../../../../libs/auth/src';
import type { AuthenticatedUser } from '../../../../libs/auth/src';
import {
TripInvitationsService,
TripMembershipGuard,
TripRoles,
} from '../../../../libs/trips/src';
import type { TripInvitation, TripMember } from '../../../../libs/trips/src';
import { CurrentUser } from '../auth/current-user.decorator';
interface CreateTripInvitationDto {
email: string;
}
@Controller()
export class TripInvitationsController {
constructor(private readonly invitationsService: TripInvitationsService) {}
@Post('trips/:tripId/invitations')
@UseGuards(OidcAuthGuard, TripMembershipGuard)
@TripRoles('OWNER')
create(
@Param('tripId') tripId: string,
@CurrentUser() currentUser: AuthenticatedUser,
@Body() dto: CreateTripInvitationDto,
): Promise<{ invitation: TripInvitation; rawToken: string }> {
return this.invitationsService.createInvitation(
tripId,
currentUser.id,
dto.email,
);
}
@Get('trips/:tripId/invitations')
@UseGuards(OidcAuthGuard, TripMembershipGuard)
@TripRoles('OWNER')
list(@Param('tripId') tripId: string): Promise<TripInvitation[]> {
return this.invitationsService.listInvitations(tripId);
}
@Delete('trips/:tripId/invitations/:invitationId')
@UseGuards(OidcAuthGuard, TripMembershipGuard)
@TripRoles('OWNER')
remove(
@Param('tripId') tripId: string,
@Param('invitationId') invitationId: string,
): Promise<void> {
return this.invitationsService.removeInvitation(tripId, invitationId);
}
@Post('invitations/:token/accept')
@UseGuards(OidcAuthGuard)
accept(
@Param('token') token: string,
@CurrentUser() currentUser: AuthenticatedUser,
): Promise<TripMember> {
return this.invitationsService.acceptInvitation(token, currentUser.id);
}
}