Entity
@Entity
@Getter @Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "mentoring_fields")
public class MentoringField {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String fieldName;
@OneToMany(mappedBy = "mentoringField", fetch = FetchType.LAZY, orphanRemoval = true)
private List<MentorMentoringField> mentors;
}
Controller
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/mentoringField")
public class MentoringFieldController {
private final MentoringFieldService mentoringFieldService;
@PostMapping
public void insert(@RequestBody MentoringFieldRequest request) {
mentoringFieldService.save(request);
}
@DeleteMapping("{id}")
public void deleteData(@PathVariable("id") Long id) {
mentoringFieldService.deleteData(id);
}
@GetMapping
public List<MentoringFieldResponse> getAll() {
List<MentoringFieldResponse> all = mentoringFieldService.findAll();
return all;
}
}
Service
@Service
@RequiredArgsConstructor
@Transactional
public class MentoringFieldService {
private final MentoringFieldRepository fieldRepository;
private final MentorRepository mentorRepository;
public void save(MentoringFieldRequest request) {
MentoringField field = MentoringField.builder()
.id(request.getMentoringFieldId())
.fieldName(request.getFieldName())
.mentors(null)
.build();
fieldRepository.save(field);
}
public void deleteData(Long id) {
fieldRepository.deleteById(id);
}
public List<MentoringFieldResponse> findAll() {
List<MentoringField> all = fieldRepository.findAll();
return all.stream().map(m -> new MentoringFieldResponse(m)).toList();
}
}
Repository
@Repository
public interface MentoringFieldRepository extends JpaRepository<MentoringField, Long> {
}
Request
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class MentoringFieldRequest {
private Long mentoringFieldId;
private String fieldName;
private Long mentorId;
}
Response
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class MentoringFieldResponse {
private Long id;
private String fieldName;
private List<MentorDto> mentors;
public MentoringFieldResponse(MentoringField mentoringField) {
this.id = mentoringField.getId();
this.fieldName = mentoringField.getFieldName();
this.mentors = mentoringField.getMentors() != null ?
mentoringField.getMentors()
.stream()
.map(MentorMentoringField::getMentor)
.map(MentorDto::new)
.toList()
:new ArrayList<>();
}
}
Dto
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class MentoringFieldDto {
private Long id;
private String fieldName;
public MentoringFieldDto(MentoringField mentoringField) {
this.id = mentoringField.getId();
this.fieldName = mentoringField.getFieldName();
}
}