Xem toàn bộ series bài viết hướng dẫn xây dựng ứng dụng Questions Management tại đây.
Trong bài viết trước, chúng ta đã chuẩn bị tất cả các cấu hình cần thiết để có thể xây dựng API xoá options theo question id như: một đối tượng document Option chứa thông tin của một option, một OptionRepository để thao tác với MongoDB, một OptionController định nghĩa các API của Core Option Service sẽ bắt đầu với “/option” và thông tin về kết nối đến MongoDB server được cấu hình trong tập tin application.properties. Bây giờ, chúng ta sẽ tiến hành xây dựng API này các bạn nhé!
Để xây dựng API xoá options theo question id, mình sẽ thêm mới một method trong class OptionController để expose một DELETE request với request parameter là “questionId”. QuestionId là id của question mà chúng ta cần xoá:
1 2 3 4 |
@DeleteMapping("") public Mono<ResponseEntity<Void>> deleteByQuestionId(@RequestParam String questionId) { } |
Các bước để xoá options theo question id bao gồm:
Đầu tiên, chúng ta sẽ tìm tất cả các option thuộc về question id này bằng cách sử dụng phương thức findByQuestionId() trong class OptionRepository.
1 |
optionRepository.findByQuestionId(questionId) |
Với mỗi record được trả về, chúng ta sẽ sử dụng phương thức delete() của OptionRepository để delete record đó.
1 2 |
optionRepository.findByQuestionId(questionId) .flatMap(o -> optionRepository.delete(o)) |
Ở đây, dù có hay không các option thuộc về question id mà chúng ta cần xoá, chúng ta cũng sẽ trả về status là HTTP 200 OK.
1 2 3 |
return optionRepository.findByQuestionId(questionId) .flatMap(o -> optionRepository.delete(o)) .then(Mono.just(new ResponseEntity<Void>(HttpStatus.OK))); |
Toàn bộ nội dung của phương thức deleteByQuestionId() lúc này sẽ như sau:
1 2 3 4 5 6 |
@DeleteMapping("") public Mono<ResponseEntity<Void>> deleteByQuestionId(@RequestParam String questionId) { return optionRepository.findByQuestionId(questionId) .flatMap(o -> optionRepository.delete(o)) .then(Mono.just(new ResponseEntity<Void>(HttpStatus.OK))); } |
Đến đây thì chúng ta đã hoàn thành việc xây dựng API xoá option thep question id cho Core Option Service rồi đó các bạn, hãy test thử xem sao nhé!
Giả sử hiện tại mình đang có những option sau đây:
thì khi mình delete tất cả các option với question id là 5b4bd6ff2da618063872fc3b, kết quả sẽ là: