{
글의 정보...
...
모집 분야 : [
{
필드명 : 백엔드
모집인원 : 2
종합 요구 능력치 : 10
기술 스택 : [
{
스택 이름 : 스프링
}
]
]
글 작성 및 추가 시, 프론트에서 위와 같은 JSON 데이터를 서버에 보내주면, 아래와 같은 방식으로 처리하도록 구성하였다.
@PostMapping("/recruitment")
public PostResponse recruitmentWrite(@RequestBody CreatePostRequest postDto) {
return postService.createPost(postDto);
}
@RequestBody
를 통해서 Data를 받는다.
PostMethod
를 사용한다.public PostResponse createPost(CreatePostRequest postDto) {
Post post = Post.builder()
.title(postDto.getTitle())
.recruitType(postDto.recruitTypeToEnum())
.contact(postDto.getContact())
.recruitIntroduction(postDto.getRecruitIntroduction())
.isCompleted(false)
.build();
List<CreateFieldsRequest> fieldsRequests = postDto.getFieldsList();
for (CreateFieldsRequest fieldsRequest : fieldsRequests) {
Fields fields = Fields.builder()
.post(post)
.fieldsName(fieldsRequest.getFieldsName())
.recruitCount(fieldsRequest.getRecruitCount())
.totalAbility(fieldsRequest.getTotalAbility())
.build();
fieldsRequest.getStacks()
.forEach(techStackDto -> TechStack.builder()
.fields(fields)
.stackName(techStackDto.getStackName())
.build());
}
postRepository.save(post);
return new PostResponse(post);
}
isCompleted
옵션은 기본적으로 false
로 설정해준다.List<CreateFieldsRequest>
를 꺼내온다.List<CreateTechStackRequest>
의 정보를 이용하여 TechStack 엔티티를 빌드하고, 해당 엔티티에 d에서 빌드한 Fields 엔티티를 할당해준다. (연관관계)Post
엔티티에서 Fields
생명 주기를 관리할 수 있도록 cascade = ALL, orphanremoval = true
옵션이 부여되어 있고, Fields
엔티티에서 TechStack
생명 주기를 관리할 수 있도록 cascade = ALL, orphanremoval = true
이 부여되어 있다. 그렇기 때문에 마지막으로 Post 엔티티만 저장해주면 모든것이 다 연관된 채로 저장이 완료된다.PostResponse
Dto로 매핑 및 변경하고, 프론트에 데이터를 내려준다.