src/user/entities/user.entity.ts
@Entity()
export class User extends BaseEntity {
@Column({ unique: true, nullable: false })
account: string;
@Column({ nullable: false })
password: string;
@Column({ nullable: false })
name: string;
@Column({ unique: true, nullable: false })
email: string;
@Column()
phone: string;
@Column({ type: 'enum', enum: UserRole, default: UserRole.SILVER })
role: UserRole;
toResponse() {
return new UserResponse(
this.id,
this.account,
this.name,
this.email,
this.phone,
this.role,
this.createdAt,
this.updatedAt,
)
}
}
src/user/entities/user.role.ts
export enum UserRole {
VIP = 'ADMIN',
GOLD = 'GOLD',
SILVER = 'SILVER',
FAMILY = 'FAMILY',
}
jwt 발급을 위해 필요한 패키지를 받아줍니다
pnpm install @nestjs/jwt
password encode를 위해 필요한 패키지를 받아줍니다
pnpm install bcrypt
일단 서비스는 유저 저장과, 로그인, 조회만 작성해보도록 하겠습니다
src/user/user.service.ts
export class UserService {
constructor(
@InjectRepository(User)
private readonly userRepository: Repository<User>,
private readonly jwtService: JwtService,
) {}
async create(request: UserSaveRequest) {
const user = await request.toEntity();
const resultUser = await this.userRepository.save(user);
return resultUser.toResponse();
}
async signIn(request: UserSignInRequest) {
const user = await this.userRepository.findOneBy({ account: request.account });
await UserServiceUtil.checkValid(user, request.password);
const token = await UserServiceUtil.getToken(this.jwtService, user.id);
return UserSignInResponse.of(token);
}
async findUser(id: number) {
const user = await this.userRepository.findOneBy({ id: id });
return user.toResponse();
}
}