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로 변환
성공적으로 필드 값이 업데이트된 것을 확인할 수 있다.