NestJS

필드 상태를 특정 값으로 변경하는 (PATCH) API 구현하기

mmalmmizal 2025. 6. 22. 15:07
USER의 역할을 초기값 FAN -> PLAYER로 승격시키기 (관리자 전용)

 

 

현재 내가 관리하는 USER 테이블의 isPlayer 값을 'PLAYER'로 변경하는 요청을 작성해보려고 한다. 

 

isPlayer 필드는 User_Type이라는 enum 타입을 사용하는데, 'PLAYER' 혹은 'FAN'이라는 문자열을 값으로 가진다.

enum User_Type {
  PLAYER
  FAN
}

 

서비스 로직 상 DB에 없는 address로 최초 지갑 연결이 되면 새로운 user를 생성한다. 생성되는 user의 초기 isPlayer 값은 'FAN'으로 지정되게 구현하였는데 더 나은 방법이 있는지 모색중이다. 

 

SoulBase/libs/util/src/hooks/useAccount.ts

const registerUser = async (address: string, name: string) => {
  await fetch('/users/connectWallet', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ address: address, name: name, isPlayer: 'FAN' }),
  });
};

 

 

admin 컨트롤러에서 'update-user-to-player' PATCH API를 구현하고 URL 파라미터 id를 받는다. 

import { Controller, Param, Patch } from "@nestjs/common";
import { ApiTags } from "@nestjs/swagger";
import { UsersRestService } from "../models/users/rest/users.service";

@ApiTags('admin')
@Controller('admin')
export class AdminController {
 constructor(private readonly usersService: UsersRestService) {}    

@Patch('update-user-to-player/:id')
 async updateUsertoPlayer( @Param('id') id: string) {
   return await this.usersService.updateUsertoPlayer(id);
 }  
}

 

userService의 updateUsertoPlayer 메서드에서 실질적인 isPlayer 값을 'PLAYER'로 입력한다.

NestJS에서 @Param()으로 받은 값은 무조건 string 타입이기 때문에 id를 숫자로 변환해주어야 한다.

  updateUsertoPlayer(id:string) {//userId에 해당하는 유저를 플레이어로 승격
    return this.prisma.user.update({
      where: { id: Number(id)  },
      data: {
        isPlayer: 'PLAYER'
      },
    });
  }

 

 

swagger로 테스트 

url path로 받은 id(string)을 내부에서 number로 변환

성공적으로 필드 값이 업데이트된 것을 확인할 수 있다.