From 0173d9822aefa53a903e4fd3b3fe2720216a6f4e Mon Sep 17 00:00:00 2001 From: erickimme Date: Thu, 19 Oct 2023 18:53:16 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[=EC=99=84=EB=A3=8C]=20=EB=B2=84=EA=B7=B8?= =?UTF-8?q?=20=EC=88=98=EC=A0=95:=20=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=9E=90=EA=B8=B0=EC=86=8C=EA=B0=9C,=20=EB=8B=89?= =?UTF-8?q?=EB=84=A4=EC=9E=84=20=EB=B3=80=EA=B2=BD=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20using=20nameChanged=20pa?= =?UTF-8?q?rameter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/events/events.controller.ts | 15 ++++++-- src/events/events.service.ts | 14 +++++-- src/users/dto/update-user.dto.ts | 11 ++++-- src/users/users.controller.ts | 30 +-------------- src/users/users.service.ts | 63 +++++++++++++++++++++----------- 5 files changed, 73 insertions(+), 60 deletions(-) diff --git a/src/events/events.controller.ts b/src/events/events.controller.ts index b120949..e717dd4 100644 --- a/src/events/events.controller.ts +++ b/src/events/events.controller.ts @@ -45,6 +45,7 @@ export class EventsController { private readonly awsS3Service: AwsS3Service ) {} + // 이벤트 생성 @Post() @UseGuards(JwtAuthGuard) // passport를 사용하여 인증 확인 @ApiBearerAuth() // Swagger 문서에 Bearer 토큰 인증 추가 @@ -56,6 +57,7 @@ export class EventsController { return this.eventsService.create(userId, createEventDto); } + // 이벤트 이미지 업로드 @Post('upload') @UseGuards(JwtAuthGuard) // passport를 사용하여 인증 확인 @ApiBearerAuth() // Swagger 문서에 Bearer 토큰 인증 추가 @@ -88,6 +90,7 @@ export class EventsController { }; } + // 이벤트 전체 조회 @Get() @ApiOperation({ summary: 'Event 전체 조회' }) @ApiOkResponse({ type: EventEntity, isArray: true }) @@ -107,6 +110,7 @@ export class EventsController { return event; } + // 이벤트 상세 조회 @Get(':eventId') @ApiOperation({ summary: 'Event 상세 조회' }) @ApiOkResponse({ type: EventEntity }) @@ -128,6 +132,7 @@ export class EventsController { }; } + // 이벤트 참가 신청 @Put(':eventId/join') @UseGuards(JwtAuthGuard) // passport를 사용하여 인증 확인 @ApiBearerAuth() // Swagger 문서에 Bearer 토큰 인증 추가 @@ -144,16 +149,17 @@ export class EventsController { const isJoin = await this.eventsService.isJoin(eventId, userId); if (!isJoin) { this.eventsService.join(+eventId, userId); - this.eventsService.createRsvpLog(eventId, userId, 'applied'); // 로그 생성 + this.eventsService.createRsvpLog(eventId, userId, 'applied'); // 참가 신청 로그 생성 return `${eventId}번 모임 참석 신청!`; } if (isJoin) { this.eventsService.cancelJoin(isJoin.guestEventId); - this.eventsService.createRsvpLog(eventId, userId, 'canceled'); // 로그 생성 + this.eventsService.createRsvpLog(eventId, userId, 'canceled'); // 참가 취소 로그 생성 return `${eventId}번 모임 신청 취소!`; } } + // 이벤트 수정 @Patch(':eventId') @ApiOperation({ summary: 'Host로서 Event 수정' }) @ApiOkResponse({ type: EventEntity }) @@ -167,6 +173,7 @@ export class EventsController { return this.eventsService.update(eventId, updateEventDto); } + // 이벤트 삭제 @Delete(':eventId') @ApiOperation({ summary: 'Host로서 Event 삭제' }) @ApiOkResponse({ description: 'isDeleted: true / soft Delete' }) @@ -177,7 +184,7 @@ export class EventsController { return this.eventsService.remove(eventId); } - // 북마크 추가 + // 관심있는 이벤트 북마크 추가 @Post(':eventId/bookmark') @UseGuards(JwtAuthGuard) @ApiBearerAuth() @@ -187,7 +194,7 @@ export class EventsController { return this.eventsService.addBookmark(eventId, userId, 'bookmarked'); } - // 북마크 제거 + // 관심있는 이벤트 북마크 제거 @Delete(':eventId/bookmark') @UseGuards(JwtAuthGuard) @ApiBearerAuth() diff --git a/src/events/events.service.ts b/src/events/events.service.ts index e4937a9..9c54112 100644 --- a/src/events/events.service.ts +++ b/src/events/events.service.ts @@ -36,6 +36,7 @@ export class EventsService { return file.path } + // 이벤트 전체 조회 findAll() { return this.prisma.event.findMany({ where: { @@ -64,6 +65,7 @@ export class EventsService { }); } + // 이벤트 상세 조회 async findOne(eventId: number) { const event = await this.prisma.event.findUnique({ where: { eventId, isDeleted: false }, @@ -99,6 +101,7 @@ export class EventsService { return event; } + // 이벤트 조회 로그 async createViewLog(eventId: number) { await this.prisma.viewlog.create({ data: { @@ -108,6 +111,7 @@ export class EventsService { }); } + // 이벤트 참가여부 확인 async isJoin(eventId: number, userId: number) { const isJoin = await this.prisma.guestEvent.findFirst({ where: { @@ -118,6 +122,7 @@ export class EventsService { return isJoin; } + // 이벤트 참가 신청 async join(eventId: number, userId: number) { await this.prisma.guestEvent.create({ data: { @@ -127,12 +132,14 @@ export class EventsService { }); } + // 이벤트 참가 취소 async cancelJoin(guestEventId: number) { await this.prisma.guestEvent.delete({ where: { guestEventId }, }); } + // 이벤트 신청/취소 로그 async createRsvpLog(eventId: number, userId: number, status: string) { await this.prisma.rsvpLog.create({ data: { @@ -144,6 +151,7 @@ export class EventsService { }); } + // 이벤트 수정 update(eventId: number, updateEventDto: UpdateEventDto) { return this.prisma.event.update({ where: { eventId }, @@ -151,6 +159,7 @@ export class EventsService { }); } + // 이벤트 삭제 remove(eventId: number) { return this.prisma.event.update({ where: { eventId }, @@ -160,7 +169,7 @@ export class EventsService { }); } - // 북마크 추가 + // 관심있는 북마크 추가 async addBookmark(eventId: number, userId: number, status: string) { return await this.prisma.eventBookmark.create({ data: { @@ -172,9 +181,8 @@ export class EventsService { }); } - // 북마크 제거 + // 관심있는 이벤트 북마크 제거 async removeBookmark(eventId: number, userId: number, status: string) { - // 먼저 eventBookmarkId를 찾습니다. const eventBookmark = await this.prisma.eventBookmark.findFirst({ where: { EventId: eventId, diff --git a/src/users/dto/update-user.dto.ts b/src/users/dto/update-user.dto.ts index 86f4333..225be6f 100644 --- a/src/users/dto/update-user.dto.ts +++ b/src/users/dto/update-user.dto.ts @@ -1,6 +1,5 @@ // src/users/dto/update-user.dto.ts -import { ApiProperty, PartialType } from '@nestjs/swagger'; -import { CreateUserDto } from './create-user.dto'; +import { ApiProperty } from '@nestjs/swagger'; import { IsNotEmpty, IsString, Matches, MaxLength, MinLength } from 'class-validator'; export class UpdateUserDto { @@ -38,8 +37,14 @@ export class UpdateUserDto { @IsString() @IsNotEmpty() @ApiProperty({ - description: 'password', + description: 'password confirm', example: 'abc123456789!', }) confirmPassword: string; + + @ApiProperty({ + description: 'nickname changed', + example: false, + }) + nameChanged: boolean; } diff --git a/src/users/users.controller.ts b/src/users/users.controller.ts index 79c1b31..5fa4585 100644 --- a/src/users/users.controller.ts +++ b/src/users/users.controller.ts @@ -1,11 +1,11 @@ /* eslint-disable prettier/prettier */ // src/users/users.controller.ts -import { Controller, Req, Get, Post, Body, Patch, Param, Delete, NotFoundException, UseGuards, Res } from '@nestjs/common'; +import { Controller, Req, Get, Post, Body, Patch, Param, Delete, NotFoundException, UseGuards } from '@nestjs/common'; import { UsersService } from './users.service'; import { CreateUserDto } from './dto/create-user.dto'; import { UpdateUserDto } from './dto/update-user.dto'; import { DeleteUserDto } from './dto/delete-user.dto'; -import { ApiBearerAuth, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiResponse, ApiTags, ApiBody, ApiConsumes } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiResponse, ApiTags, ApiBody, ApiConsumes, ApiProperty } from '@nestjs/swagger'; import { UserEntity } from './entities/user.entity'; import { JwtAuthGuard } from 'src/auth/guards/jwt-auth.guard'; import { User } from '@prisma/client'; @@ -35,32 +35,6 @@ export class UsersController { return new UserEntity(await this.usersService.create(createUserDto)); } - //이메일 중복 검증 - @Post('checkEmail') - @ApiBody({}) - @ApiOperation({ summary: '이메일 중복 확인' }) - async checkEmail(@Body() { email }: { email: string }) { - const existingUser = await this.usersService.findByEmail({ email }); - if (existingUser) { - return { message: '201' }; - } else{ - return { message: '200'}; - } - } - - //닉네임 중복 검증 - @Post('checkNickname') - @ApiBody({}) - async checkNickname(@Body() { nickname }: { nickname: string }) { - const existingNickname = await this.usersService.findByNickname({ nickname }); - if (existingNickname) { - return{ message: '201' }; - } else { - //return res.status(200).json({ message: 'Nickname is available.' }); - return { message: '200' }; - } - } - // 2. 전체 유저 리스트를 조회한다. @Get() @UseGuards(JwtAuthGuard) // passport를 사용하여 인증 확인 diff --git a/src/users/users.service.ts b/src/users/users.service.ts index 085daf0..c9210fe 100644 --- a/src/users/users.service.ts +++ b/src/users/users.service.ts @@ -105,9 +105,8 @@ export class UsersService { // 5. user 정보 수정한다. async update(id: number, updateUserDto: UpdateUserDto) { - // console.log('updateUserDto in users.service:', updateUserDto); - const { nickname, intro, confirmPassword } = updateUserDto; - + const { nickname, intro, confirmPassword, nameChanged } = updateUserDto; + const user = await this.prisma.user.findUnique({ where: { userId: id }, }); @@ -115,32 +114,52 @@ export class UsersService { throw new BadRequestException('유저 정보가 존재하지 않습니다.'); } - // 중복된 닉네임 확인 - const existingNickname = await this.prisma.userDetail.findUnique({ - where: { nickname }, + + if (!nameChanged) { + // nameChanged == false 면 닉네임에는 변화가 없다는 것임으로 닉네임을 제외한 나머지 정보만 업데이트 + // 패스워드, 패스워드 확인 일치 여부 확인 + const isPasswordMatching = await bcrypt.compare(confirmPassword, user.password); + if (!isPasswordMatching) { + throw new BadRequestException('패스워드가 일치하지 않습니다.'); + } + + // userdetail page 자기소개 업데이트 + const updatedUser = await this.prisma.userDetail.update({ + where: { userDetailId: user.userId}, + data: { + intro: intro, + }, }); - if (existingNickname) { - throw new ConflictException('이미 존재하는 닉네임입니다.'); - } - - // 패스워드, 패스워드 확인 일치 여부 확인 - const isPasswordMatching = await bcrypt.compare(confirmPassword, user.password); - if (!isPasswordMatching) { - throw new BadRequestException('패스워드가 일치하지 않습니다.'); + return updatedUser; + } - - - // userdetail page 업데이트 - const updatedUser = await this.prisma.userDetail.update({ - where: { userDetailId: user.userId}, + else { + // nameChanged = true 면 닉네임을 바꿨다는 거니까 닉네임을 포함해서 업데이트 + // 중복된 닉네임 확인 + const existingNickname = await this.prisma.userDetail.findUnique({ + where: { nickname }, + }); + + if (existingNickname) { + throw new ConflictException('이미 존재하는 닉네임입니다.'); + } + + // 패스워드, 패스워드 확인 일치 여부 확인 + const isPasswordMatching = await bcrypt.compare(confirmPassword, user.password); + if (!isPasswordMatching) { + throw new BadRequestException('패스워드가 일치하지 않습니다.'); + } + + // userdetail page 닉네임, 자기소개, 업데이트 + const updatedUser = await this.prisma.userDetail.update({ + where: { userDetailId: user.userId}, data: { intro: intro, nickname: nickname }, - }); - + }); return updatedUser; - + } } // 6. 회원 탈퇴를 한다. From 9fc95f67970304fe4d5dc7f4281887551ecd7b98 Mon Sep 17 00:00:00 2001 From: erickimme Date: Fri, 20 Oct 2023 00:05:33 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[=EC=99=84=EB=A3=8C]=20pull=20from=20origin?= =?UTF-8?q?=20main?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/events/events.controller.ts | 13 ------------- src/users/users.service.ts | 2 +- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/src/events/events.controller.ts b/src/events/events.controller.ts index 90d16d6..d763eac 100644 --- a/src/events/events.controller.ts +++ b/src/events/events.controller.ts @@ -13,7 +13,6 @@ import { ParseIntPipe, UploadedFile, UseInterceptors, - Query, } from '@nestjs/common'; import { EventsService } from './events.service'; import { CreateEventDto } from './dto/create-event.dto'; @@ -53,7 +52,6 @@ export class EventsController { @ApiOperation({ summary: '호스트로 Event 생성' }) @ApiCreatedResponse({ type: EventEntity }) create(@Req() req: RequestWithUser, @Body() createEventDto: CreateEventDto) { - console.log("here", createEventDto) const { userId } = req.user; // request에 user 객체가 추가되었고 userId에 값 할당 return this.eventsService.create(userId, createEventDto); @@ -150,7 +148,6 @@ export class EventsController { const isJoin = await this.eventsService.isJoin(eventId, userId); if (!isJoin) { -<<<<<<< HEAD this.eventsService.join(+eventId, userId); this.eventsService.createRsvpLog(eventId, userId, 'applied'); // 참가 신청 로그 생성 return `${eventId}번 모임 참석 신청!`; @@ -159,16 +156,6 @@ export class EventsController { this.eventsService.cancelJoin(isJoin.guestEventId); this.eventsService.createRsvpLog(eventId, userId, 'canceled'); // 참가 취소 로그 생성 return `${eventId}번 모임 신청 취소!`; -======= - this.eventsService.join(eventId, userId); - this.eventsService.createRsvpLog(eventId, userId, 'applied'); // 로그 생성 - return `${eventId}번 모임 참석 신청`; - } - if (isJoin) { - this.eventsService.cancelJoin(isJoin.guestEventId); - this.eventsService.createRsvpLog(eventId, userId, 'canceled'); // 로그 생성 - return `${eventId}번 모임 참석 취소 `; ->>>>>>> 91ef7e642d08985b48033ecbc88dc73bf311dfa8 } } diff --git a/src/users/users.service.ts b/src/users/users.service.ts index c9210fe..c59fd6b 100644 --- a/src/users/users.service.ts +++ b/src/users/users.service.ts @@ -135,7 +135,7 @@ export class UsersService { } else { // nameChanged = true 면 닉네임을 바꿨다는 거니까 닉네임을 포함해서 업데이트 - // 중복된 닉네임 확인 + // 중복된 닉네임 확인 const existingNickname = await this.prisma.userDetail.findUnique({ where: { nickname }, });