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에 대한 정보를 찾고, 음식을 저장하는 것이 제일 최적이라고 생각하긴하는데..뭔가 더 좋은 방법이 있을것같기도하다
반응형