Questions Management – Composite Option Service – Xây dựng API thêm mới option

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.

Trước khi xây dựng API thêm mới option cho Composite Option Service, có mấy việc chúng ta phải làm trước như sau:

Vì Composite Option Service sẽ thao tác liên quan đến các question và các option nên mình sẽ thêm các đối tượng model cho từng loại để chứa thông tin của chúng như sau:

Question:

Option:

Vì Composite Option Service sẽ gọi đến Core Question Service và Core Option Service nên mình sẽ thêm mới trong tập tin application.properties thông tin về chúng như sau:

Để handle việc gọi tới Core Question Service, mình sẽ tạo một interface tên là CoreQuestionService:

với implementation là CoreQuestionServiceImpl:

Để handle việc gọi tới Core Option Service, mình sẽ tạo một interface tên là CoreOptionService:

với implementation là CoreOptionServiceImpl:

Mình sẽ chạy service này sử dụng port 8183 nên mình cũng sẽ thêm property server.port trong tập tin application.properties như sau:

OK, mọi thứ chuẩn bị đã xong, bây giờ mình sẽ đi vào phần chính của bài viết này các bạn nhé!



Đầu tiên, mình sẽ tạo mới một controller tên là CompositeOptionController với nội dung như sau:

Với khai báo trên, mình cũng đã expose các API cho phần Composite Option Service với request URL bắt đầu là “/option”.

Tiếp theo mình sẽ tạo mới một CompositeOptionService để handle tất cả các thao tác liên quan đến Composite Option Service

Thao tác đầu tiên thêm mới option.

Để hiện thực thao tác này, dựa vào thông tin option cần thêm mới, chúng ta sẽ gọi qua Core Question Service xem question id mà option này thuộc về có tồn tại hay không? Nếu tồn tại, chúng ta sẽ gọi qua Core Option Service để thực hiện việc thêm mới option này.

Cụ thể mình sẽ thêm mới một abstract method vào class CompositeOptionService như sau:

Để hiện thực được phương thức addNewOption() trên, đầu tiên, chúng ta cần gọi tới Core Question Service để tìm question theo id theo questionId mà đối tượng Option cần thêm mới, thuộc về. Bằng cách thêm mới một method trong CoreQuestionService:

với phần implementation trong class CoreQuestionServiceImpl như sau:

Tiếp theo chúng ta sẽ gọi tới Core Option Service để thực hiện việc thêm mới option bằng cách thêm mới một method trong class CoreOptionService:

với phần implementation trong class CoreOptionServiceImpl như sau:

OK, bây giờ chúng ta sẽ hiện thực phương thức addNewOption() trong class CompositeOptionService các bạn nhé.

Chúng ta sẽ inject 2 class service CoreQuestionService và CoreOptionService vào trước:

Trong phương thức addNewOption(), đầu tiên chúng ta sẽ gọi Core Question Service trước:

Nếu tồn tại một question với id mà đối tượng Option cần thêm mới đang nắm giữ, một item sẽ được trả về. Khi đó chúng ta sẽ gọi tới Core Option Service để thực hiện việc thêm mới này.

Quá trình gọi qua Core Option Service cần thời gian để xử lý nên mình đã cho chạy quá trình này trên một thread khác sử dụng phương thức subscribeOn().

Điều cuối cùng chúng ta cần làm đó là thêm mới một method vào class CompositeOptionController để expose một POST request “/option/add”:

rồi khai báo autowire đối tượng CompositeOptionService vào:

để có thể sử dụng phương thức addNewOption() của CompositeOptionService mà chúng ta đã tạo ra ở trên:

OK, đến đây là chúng ta đã hoàn thành việc xây dựng API thêm mới option cho Composite Option Service rồi đó các bạn. Test thử xem sao nhé.

Hiện tại mình đang có một số question như sau:

Questions Management – Composite Option Service – Xây dựng API thêm mới option

Giả sử bây giờ mình cần thêm mới option cho question với id 5b697df545aac307e5c68be5:

Questions Management – Composite Option Service – Xây dựng API thêm mới option

Kết quả sẽ là:

Questions Management – Composite Option Service – Xây dựng API thêm mới option

Add Comment