This commit is contained in:
Bastian Wagner
2026-06-09 09:45:33 +02:00
commit 537c7cbbee
124 changed files with 27283 additions and 0 deletions

View File

@@ -0,0 +1,122 @@
import {
Body,
Controller,
Delete,
Get,
Param,
Patch,
Post,
Req,
UnauthorizedException,
UseGuards,
} from '@nestjs/common';
import { JwtAuthGuard } from '../auth/jwt-auth.guard';
import { AuthService } from '../auth/auth.service';
import { CreateListDto } from './dto/create-list.dto';
import { AddListItemDto, UpdateListItemDto } from './dto/list-item.dto';
import { UpdateListDto } from './dto/update-list.dto';
import { ListsService } from './lists.service';
import type { AuthenticatedRequest } from '../auth/auth.types';
@Controller('lists')
@UseGuards(JwtAuthGuard)
export class ListsController {
constructor(
private readonly authService: AuthService,
private readonly listsService: ListsService,
) {}
@Post()
createList(
@Req() request: AuthenticatedRequest,
@Body() createDto: CreateListDto,
) {
return this.listsService.createList(this.requireUserId(request), createDto);
}
@Get()
listLists(@Req() request: AuthenticatedRequest) {
return this.listsService.listLists(this.requireUserId(request));
}
@Get(':listId')
getList(
@Req() request: AuthenticatedRequest,
@Param('listId') listId: string,
) {
return this.listsService.getList(this.requireUserId(request), listId);
}
@Patch(':listId')
updateList(
@Req() request: AuthenticatedRequest,
@Param('listId') listId: string,
@Body() updateDto: UpdateListDto,
) {
return this.listsService.updateList(
this.requireUserId(request),
listId,
updateDto,
);
}
@Delete(':listId')
deleteList(
@Req() request: AuthenticatedRequest,
@Param('listId') listId: string,
) {
return this.listsService.deleteList(this.requireUserId(request), listId);
}
@Post(':listId/items')
addItem(
@Req() request: AuthenticatedRequest,
@Param('listId') listId: string,
@Body() addDto: AddListItemDto,
) {
return this.listsService.addItem(
this.requireUserId(request),
listId,
addDto,
);
}
@Patch(':listId/items/:itemId')
async updateItem(
@Req() request: AuthenticatedRequest,
@Param('listId') listId: string,
@Param('itemId') itemId: string,
@Body() updateDto: UpdateListItemDto,
) {
const userId = this.requireUserId(request);
return this.listsService.updateItem(
userId,
listId,
itemId,
updateDto,
await this.authService.getUserDisplayName(userId),
);
}
@Delete(':listId/items/:itemId')
deleteItem(
@Req() request: AuthenticatedRequest,
@Param('listId') listId: string,
@Param('itemId') itemId: string,
) {
return this.listsService.deleteItem(
this.requireUserId(request),
listId,
itemId,
);
}
private requireUserId(request: AuthenticatedRequest): string {
if (!request.user?.sub) {
throw new UnauthorizedException('Authenticated user is required.');
}
return request.user.sub;
}
}