2. Entity / 리소스 생성

Eden·2023년 7월 29일
0

nestjs 프로젝트와 database 연결이 다 됐으면 resource(User)를 생성해보자

  1. resource생성
npm g res resourcename  
npx @nestjs/cli g res resourcename

명령어 입력후

Rest api 선택

기본 제공 CRUD가 필요없다면 n 을 선택

1.entity 생성


다음과 같이 entities 폴더와 user.entity.ts 파일을 생성한다.

user.entity.ts

@Entity()
export class User {
  @PrimaryGeneratedColumn() // 자동으로 고유한 키값을 생성해 줌
  public id : string;

  @CreateDateColumn() // 생성될때 날짜 값이 저장됨
  public createAt : Date;

  @CreateDateColumn()
  public updateAt : Date;

  @Column()
  public username: string;
  
  @Column()
  public email: string;
  
  @Column()
  public password: string;

}

2.dto 생성
API 매소드를 정의할때 API 목적에 따라 사용하는 변수들이 다르기때문에 dto를 사용하여 불필요한 변수 할당을 줄인다.

다음과 같이 dto 폴더, dto 파일을 생성해준다.

  1. CRUD 만들기
    user.module에 TypeOrmModule을 import 시켜 데이터베이스와 상호작용이 가능하게 한다.
    이때 entity를 설정하여 TypeOrm이 해당 entity를 다룰 수 있도록한다.
@Module({
  imports:[TypeOrmModule.forFeature([User])],
  controllers: [UserController],
  providers: [UserService]
})

service

@Injectable()
export class UserService {
  constructor(
    @InjectRepository(User)
    private userRepository:Repository<User>,
  ) {
  } // constructor 는 객체가 생성될때 호출되며 해당 class에서 사용할 userRepository 선언한다.

  async createUser(createUserDto:CreateUserDto):Promise<User>{
    const user = await this.userRepository.create(createUserDto);
    await this.userRepository.save(user);
    return user;
  }

  async getUsers():Promise<User[]>{
    return this.userRepository.find();
  }
}

controller

@Controller('user')
export class UserController {

  constructor(private readonly userService: UserService) {}

  @Post('create')
  async createUser(
   @Body() // @Body()는 NestJS에서 컨트롤러의 라우트 핸들러(메서드)에서 요청의 본문(body) 데이터를 가져오기 위해 사용되는 데코레이터로 없으면 데이터가 넘어가지 않는다
   createUserDto: CreateUserDto
   ): Promise<User>{
    return await this.userService.createUser(createUserDto);
  }
  @Get('all')
  async getUsers():Promise<User[]>{
    return await this.userService.getUsers();
  }
  
}

이와 같이 원하는 매소드들을 만들어 사용할 수 있다.

profile
주섬주섬..

0개의 댓글