Skip to content

Commit

Permalink
Merge pull request #223 from boostcampwm-2024/feature/api/rename
Browse files Browse the repository at this point in the history
[BE] 유저 닉네임 변경 API 추가
  • Loading branch information
uuuo3o authored Nov 28, 2024
2 parents f37ecdf + b6f8456 commit d41658b
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 2 deletions.
6 changes: 6 additions & 0 deletions BE/src/auth/dto/rename-user.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { ApiProperty } from '@nestjs/swagger';

export class RenameUserDto {
@ApiProperty({ description: '변경할 닉네임' })
nickname: string;
}
20 changes: 19 additions & 1 deletion BE/src/auth/user.controller.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
import { Controller, Get, Req, UseGuards } from '@nestjs/common';
import { Body, Controller, Get, Patch, Req, UseGuards } from '@nestjs/common';
import { Request } from 'express';
import {
ApiBearerAuth,
ApiBody,
ApiOperation,
ApiResponse,
ApiTags,
} from '@nestjs/swagger';
import { UserService } from './user.service';
import { JwtAuthGuard } from './jwt-auth-guard';
import { ProfileResponseDto } from './dto/profile-response.dto';
import { RenameUserDto } from './dto/rename-user.dto';

@Controller('/api/user')
@ApiTags('프로필 API')
Expand All @@ -27,4 +29,20 @@ export class UserController {
getProfile(@Req() request: Request) {
return this.userService.getProfile(parseInt(request.user.userId, 10));
}

@Patch('/rename')
@UseGuards(JwtAuthGuard)
@ApiOperation({
summary: '유저 닉네임 변경 API',
})
@ApiBody({
type: RenameUserDto,
})
@ApiBearerAuth()
renameUser(@Req() request: Request, @Body() body: RenameUserDto) {
const userId = parseInt(request.user.userId, 10);
const newName = body.nickname;

return this.userService.renameUser(userId, newName);
}
}
22 changes: 21 additions & 1 deletion BE/src/auth/user.service.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import { Injectable } from '@nestjs/common';
import {
BadRequestException,
Injectable,
NotFoundException,
} from '@nestjs/common';
import { UserRepository } from './user.repository';
import { ProfileResponseDto } from './dto/profile-response.dto';

Expand All @@ -10,4 +14,20 @@ export class UserService {
const user = await this.userRepository.findOneBy({ id: userId });
return new ProfileResponseDto(user.nickname, user.email);
}

async renameUser(userId: number, newName: string) {
const user = await this.userRepository.findOneBy({ id: userId });
if (!user) {
throw new NotFoundException('존재하지 않는 유저입니다.');
}

const isDuplicated = await this.userRepository.existsBy({
nickname: newName,
});
if (isDuplicated) {
throw new BadRequestException('이미 존재하는 닉네임입니다.');
}

return this.userRepository.update({ id: userId }, { nickname: newName });
}
}

0 comments on commit d41658b

Please sign in to comment.