From a907049db8c614c8c106a3d58e31ad83065bbeee Mon Sep 17 00:00:00 2001 From: Seokyun Ha Date: Thu, 26 Sep 2024 23:12:55 +0900 Subject: [PATCH] Fix/notice like 2 (#123) --- .pre-commit-config.yaml | 4 +-- package.json | 1 + src/auth/auth.controller.ts | 2 +- .../noticeLike/noticeLike.controller.spec.ts | 14 ++++++-- src/popo/noticeLike/noticeLike.controller.ts | 33 +++++++++++++------ .../equip/reserve.equip.controller.ts | 8 ++--- .../place/reserve.place.controller.ts | 7 ++-- 7 files changed, 48 insertions(+), 21 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 45a24c1..1f7071f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,9 +5,9 @@ repos: name: Run ESLint entry: npm run lint language: system - types: [javascript] + types: [javascript, ts] - id: npm-run-format name: Run Prettier entry: npm run format language: system - types: [javascript] + types: [javascript, ts] diff --git a/package.json b/package.json index 14132f3..3dc12cb 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "start:dev": "nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "node dist/main", + "dev": "nest start --watch", "format": "prettier --w **/*.ts", "format:check": "prettier --c **/*.ts", "lint": "eslint . --ext .ts --ignore-pattern dist/", diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts index 71a9680..d9c2fa4 100644 --- a/src/auth/auth.controller.ts +++ b/src/auth/auth.controller.ts @@ -58,7 +58,7 @@ export class AuthController { @Get('me/reservation') @UseGuards(JwtAuthGuard) - async getOwnReservations(@Req() req) { + async getOwnReservations(@Req() req: Request) { const user = req.user as JwtPayload; const existUser = await this.userService.findOneByEmail(user.email); diff --git a/src/popo/noticeLike/noticeLike.controller.spec.ts b/src/popo/noticeLike/noticeLike.controller.spec.ts index 9fdc422..856ad55 100644 --- a/src/popo/noticeLike/noticeLike.controller.spec.ts +++ b/src/popo/noticeLike/noticeLike.controller.spec.ts @@ -3,6 +3,7 @@ import { NoticeLikeController } from './noticeLike.controller'; import { NoticeLikeService } from './noticeLike.service'; import { createMock, DeepMocked } from '@golevelup/ts-jest'; import { NoticeLike } from './noticeLike.entity'; +import { JwtPayload } from 'src/auth/strategies/jwt.payload'; describe('NoticeLikeController', () => { let controller: NoticeLikeController; @@ -58,7 +59,11 @@ describe('NoticeLikeController', () => { const noticeId = 1; noticeLikeService.findByUserIdAndNoticeId.mockResolvedValue(null); - await expect(controller.delete(userId, noticeId)).rejects.toThrow(); + const user = { uuid: '1' } as JwtPayload; + + await expect( + controller.delete(userId, noticeId, { user: user }), + ).rejects.toThrow(); }); it('should delete like', async () => { @@ -70,10 +75,15 @@ describe('NoticeLikeController', () => { notice_id: 1, created_at: new Date(), }; + + const user = { uuid: '1' } as JwtPayload; + const mockedDeletedResult = { affected: 1, raw: null }; noticeLikeService.findByUserIdAndNoticeId.mockResolvedValue(like); noticeLikeService.delete.mockResolvedValue(mockedDeletedResult); - expect(await controller.delete(userId, noticeId)).toBe(mockedDeletedResult); + expect(await controller.delete(userId, noticeId, { user: user })).toBe( + mockedDeletedResult, + ); }); }); diff --git a/src/popo/noticeLike/noticeLike.controller.ts b/src/popo/noticeLike/noticeLike.controller.ts index 3538ac9..8d06b7b 100644 --- a/src/popo/noticeLike/noticeLike.controller.ts +++ b/src/popo/noticeLike/noticeLike.controller.ts @@ -4,12 +4,13 @@ import { Controller, Delete, Get, + Param, Post, - Query, Req, UseGuards, } from '@nestjs/common'; import { ApiBody, ApiTags } from '@nestjs/swagger'; +import { Request } from 'express'; import { JwtAuthGuard } from 'src/auth/guards/jwt-auth.guard'; import { NoticeLikeDto } from './noticeLike.dto'; @@ -29,7 +30,10 @@ export class NoticeLikeController { @Post() @UseGuards(JwtAuthGuard) @ApiBody({ type: NoticeLikeDto }) - async create(@Body() dto: NoticeLikeDto, @Req() req): Promise { + async create( + @Body() dto: NoticeLikeDto, + @Req() req: Request, + ): Promise { const user = req.user as JwtPayload; if (user.uuid != dto.user_id) { @@ -39,16 +43,19 @@ export class NoticeLikeController { return this.noticeLikeService.save(dto); } - @Get('count') - countLikes(@Query('notice_id') notice_id: number): Promise { + @Get('count/:notice_id') + countLikes(@Param('notice_id') notice_id: number): Promise { return this.noticeLikeService.countLikes(notice_id); } - @Get('status') + @Get('status/:user_id/:notice_id') async getStatus( - @Query('user_id') user_id: string, - @Query('notice_id') notice_id: number, + @Param('user_id') user_id: string, + @Param('notice_id') notice_id: number, ): Promise { + if (!user_id || !notice_id) { + return false; + } return (await this.noticeLikeService.findByUserIdAndNoticeId( user_id, notice_id, @@ -57,12 +64,18 @@ export class NoticeLikeController { : false; } - @Delete() + @Delete(':user_id/:notice_id') @UseGuards(JwtAuthGuard) async delete( - @Query('user_id') user_id: string, - @Query('notice_id') notice_id: number, + @Param('user_id') user_id: string, + @Param('notice_id') notice_id: number, + @Req() req: Request | any, ) { + const user = req.user as JwtPayload; + if (user.uuid != user_id) { + throw new BadRequestException('User ID does not match.'); + } + const target = await this.noticeLikeService.findByUserIdAndNoticeId( user_id, notice_id, diff --git a/src/popo/reservation/equip/reserve.equip.controller.ts b/src/popo/reservation/equip/reserve.equip.controller.ts index ca00859..7c35d7a 100644 --- a/src/popo/reservation/equip/reserve.equip.controller.ts +++ b/src/popo/reservation/equip/reserve.equip.controller.ts @@ -13,7 +13,7 @@ import { UseGuards, } from '@nestjs/common'; import { ApiQuery, ApiTags } from '@nestjs/swagger'; - +import { Request } from 'express'; import { ReserveEquipService } from './reserve.equip.service'; import { CreateReserveEquipDto } from './reserve.equip.dto'; import { MailService } from '../../../mail/mail.service'; @@ -38,7 +38,7 @@ export class ReserveEquipController { @Post() @UseGuards(JwtAuthGuard) - async post(@Req() req, @Body() dto: CreateReserveEquipDto) { + async post(@Req() req: Request, @Body() dto: CreateReserveEquipDto) { const user = req.user as JwtPayload; const saveDto = Object.assign(dto, { booker_id: user.uuid }); @@ -118,7 +118,7 @@ export class ReserveEquipController { @Get('user') @UseGuards(JwtAuthGuard) - async getMyReservation(@Req() req) { + async getMyReservation(@Req() req: Request) { const user = req.user as JwtPayload; const reservations = await this.reserveEquipService.find({ @@ -166,7 +166,7 @@ export class ReserveEquipController { @Delete(':uuid') @UseGuards(JwtAuthGuard) - async delete(@Param('uuid') uuid: string, @Req() req) { + async delete(@Param('uuid') uuid: string, @Req() req: Request) { const reservation = await this.reserveEquipService.findOneByUuid(uuid); const user = req.user as JwtPayload; diff --git a/src/popo/reservation/place/reserve.place.controller.ts b/src/popo/reservation/place/reserve.place.controller.ts index a798c6c..95784bd 100644 --- a/src/popo/reservation/place/reserve.place.controller.ts +++ b/src/popo/reservation/place/reserve.place.controller.ts @@ -59,7 +59,10 @@ export class ReservePlaceController { @Post() @UseGuards(JwtAuthGuard) - async createWithNameAndId(@Req() req, @Body() dto: CreateReservePlaceDto) { + async createWithNameAndId( + @Req() req: Request, + @Body() dto: CreateReservePlaceDto, + ) { const user = req.user as JwtPayload; const existPlace = await this.placeService.findOneByUuidOrFail( dto.place_id, @@ -290,7 +293,7 @@ export class ReservePlaceController { @Delete(':uuid') @UseGuards(JwtAuthGuard) - async delete(@Param('uuid') uuid: string, @Req() req) { + async delete(@Param('uuid') uuid: string, @Req() req: Request) { const reservation = await this.reservePlaceService.findOneByUuidOrFail(uuid); const user = req.user as JwtPayload;