Initial
This commit is contained in:
122
listify-api/src/lists/lists.controller.ts
Normal file
122
listify-api/src/lists/lists.controller.ts
Normal 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user