NestJS TypeORM의 Many to Many 구현 2- 관계형 구성 및 User, Book의 CRUD구현
이제 본격적으로 각 테이블간 관계형을 작성하도록 하겠습니다.
이전글 : NestJS TypeORM의 Many to Many 구현 1- 셋팅 및 각 테이블 생성
사진1) TypeORM Entity |
사진1에서 보면 가장 오른쪽부터 User, User_Book_Join 그리고 마지막은 Book entity입니다. Many To Many를 구현할때 TypeORM으로 자동 생성(@ManyToMany)할수 있지만 현재 DB스키마에는 JoinTable에 리뷰도 작성해야 하기때문에 직접 entity를 만든 것입니다.
사진2) 사진1을 run후 MySQL Table |
사진1의 코드를 저장한 다음 'npm run start'를 하면 사진2와 같이 각 테이블들이 관계를 갖게 된다.
이제 User의 CRUD를 구성하도록 하겠습니다. 먼저 Dto를 만들어야 합니다.
// create-user.dto.ts : src/users/dto
export class CreateUserDto {
full_name: string;
}
user를 생성할때 'full_name'하나만 있으면 되기 때문에 위 코드처럼 작성해 줍니다.
// update-user.dto.ts : src/users/dto
import { PartialType } from '@nestjs/mapped-types';
import { CreateUserDto } from './create-user.dto';
export class UpdateUserDto extends PartialType(CreateUserDto) {}
user를 업데이트 할때 기존의 CreateUserDto를 참고해서 UpdateUserDto에 적용한다.
// users.service.ts : src/users
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { CreateUserDto } from './dto/create-user.dto';
import { User } from './entities/user.entity';
@Injectable()
export class UsersService {
constructor(
// User레파지토리를 UsersService에서 사용할수 있게 추가함
@InjectRepository(User)
private readonly userRepository: Repository<User>,
) {}
async create(createUserDto: CreateUserDto) {
// users 레코드 생성
const createData = this.userRepository.create(createUserDto);
// 생성한 users레코드 삽입
await this.userRepository.save(createData);
// 생성한 레코드를 Controller로 return
return createData;
}
}
}
이제 서비스를 위와 같이 작성하면 Controller에가서 코드를 작성합니다.
// users.controller.ts : src/users
import { Body, Controller, Post } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UsersService } from './users.service';
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Post()
create(@Body() createUserDto: CreateUserDto) {
return this.usersService.create(createUserDto);
}
}
이제 실제 NestJS서버가 동작을 해서 유저를 생성하는지 알아봐야 합니다.
API테스트는 Postman으로 진행했습니다.
사진3) Post요청 |
사진4) DB확인 |
Post요청시 제대로 응답도 오고 DB에 레코드가 생성된 것도 확인하였습니다. 나머지 API 및 Book의 CRUD는 아래 GitHub링크를 참고해 주시기 바랍니다.
위 예제 GitHub 링크 및 Branch : ManyToMany2
댓글
댓글 쓰기