DevBoi

[NestJs] 다대일 매핑 본문

Develop/[NestJs]

[NestJs] 다대일 매핑

HiSmith 2023. 6. 19. 21:47
반응형

다대일 매핑은 한개의 객체와 여러개의 객체의 연관관계를 나타낸 객체 매핑이다.

쉽게 얘기하면 아래와 같다.

 

만약에 어떤 업체가 음식들을 등록한다고 가정했을떄,

해당 업체:푸드 는 1:N이다.

엔티티에서는 아래와 같이 정의가 가능하다.

  @JoinColumn() 
  @ManyToOne(() => Corp, (corp) => corp.foods)
  corp : Corp; //업체 매핑

 

업체는 프라이머리키를 표현해서 아래와 같이 또 표현 가능하다.

@OneToMany(() => Food, (food) => food.corp)
  foods: Food[]

 

그러면 이때 CRUD로직은 어떻게 변하는지 확인해보자

우선 해당 관련 controller ~ repoistory를 작성할 것이다.

완벽한 설계다 라는 확신은 없는데, 우선 그래도 효율적으로 짠것같긴한다.

 

(controller)

@ApiOperation({ summary: '음식 정보 생성' }) 
  @ApiParam({
    description: 'corp find by id',
    type: FoodReqDto,
    name: 'post'
  })
  @Post('')
  postCorp(@Body('food') foodReqDto :FoodReqDto) : Promise<Food>{
    return this.foodService.saveFood(foodReqDto);
  }

(service)

@Injectable()
export class FoodService {
  constructor(
    @InjectRepository(Food)
    private  foodRepository : FoodRepostiory,
    @InjectRepository(Corp)
    private  corpRepository : CorpRepostiory
    
  ){}    
  async saveFood(foodReqDto: FoodReqDto): Promise<Food> {
    const corp = await this.corpRepository.findOne(foodReqDto.corp);
    const food = new Food(foodReqDto,corp);
    return this.foodRepository.save(food);
  }

(repository)

@EntityRepository(Food)
export class FoodRepostiory extends Repository<Food>{

}

 

corpId도 그냥 같은레벨의 값으로 가져오는데.. 이부분은 좀 더 고민해봐야겠다.

생성할때 먼저 corp에 대한 정보를 찾고, 음식을 저장하는 것이 제일 최적이라고 생각하긴하는데..뭔가 더 좋은 방법이 있을것같기도하다

 

반응형

'Develop > [NestJs]' 카테고리의 다른 글

[NestJS] S3이미지 업로드 모듈 제작  (0) 2023.07.01
[NestJs] S3업로드 모듈 생성  (0) 2023.06.26
[NestJs] Api 좀 더 Restful 하게 변경  (0) 2023.06.18
[NestJs] 수정, 삭제  (0) 2023.06.18
[NestJs] Post , 생성  (0) 2023.06.18