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á option 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á option, mình sẽ thêm mới một method trong class OptionController để expose một DELETE request “{id}” với id là id của option mà chúng ta cần xoá:
1 2 3 4 |
@DeleteMapping("/{id}") public Mono<ResponseEntity<Void>> deleteOption(@PathVariable(value = "id") String optionId) { } |
Các bước để xoá một option bao gồm:
Đầu tiên, chúng ta cần phải kiểm tra là option mà chúng ta muốn xoá có tồn tại hay không dựa vào id mà người dùng truyền vào.
Spring Data MongoDB Reactive đã hỗ trợ cho chúng ta phương thức để tìm kiếm theo id nên chúng ta chỉ cần gọi để sử dụng mà thôi.
1 |
optionRepository.findById(optionId) |
Trong trường hợp option này tồn tại, chúng ta sẽ delete nó và trả về HTTP status code là 200 OK.
1 2 3 |
optionRepository.findById(optionId) .flatMap(existingOption -> optionRepository.delete(existingOption) .then(Mono.just(new ResponseEntity<Void>(HttpStatus.OK)))) |
Còn nếu nó không tồn tại thì trả về kết quả HTTP status code là 404 Not Found.
1 2 3 4 |
return optionRepository.findById(optionId) .flatMap(existingOption -> optionRepository.delete(existingOption) .then(Mono.just(new ResponseEntity<Void>(HttpStatus.OK)))) .defaultIfEmpty(new ResponseEntity<>(HttpStatus.NOT_FOUND)); |
Toàn bộ nội dung của phương thức deleteOption() lúc này sẽ như sau:
1 2 3 4 5 6 7 |
@DeleteMapping("/{id}") public Mono<ResponseEntity<Void>> deleteOption(@PathVariable(value = "id") String optionId) { return optionRepository.findById(optionId) .flatMap(existingOption -> optionRepository.delete(existingOption) .then(Mono.just(new ResponseEntity<Void>(HttpStatus.OK)))) .defaultIfEmpty(new ResponseEntity<>(HttpStatus.NOT_FOUND)); } |
Đến đây thì chúng ta đã hoàn thành việc xây dựng API xoá option 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 request để xoá option với id là 5ae874c345286708520dd0e5, kết quả sẽ là: