Questions Management – Core Question Service – Xây dựng API thêm mới question

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 đi vào xây dựng API đầu tiên cho Core Question Service, chúng ta cần chuẩn bị một số thứ như sau:

Đầu tiên là chúng ta cần tạo mới một interface QuestionRepository extends từ interface ReactiveMongoRepository để thao tác với MongoDB database.

Nội dung của interface QuestionRepository sẽ như sau:

với đối tượng document Question:

Các bạn có thể xem thêm bài viết Reactive REST APIs với Spring Data MongoDB Reactive và Spring WebFlux để tham khảo thêm nhé!

Tiếp theo mình sẽ cấu hình phần kết nối tới MongoDB server.

Hiện tại mình đang sử dụng MongoDB server không phải là authentication mode nên mình chỉ cần khai báo như sau trong tập tin application.properties:

Mình sẽ chạy service này sử dụng port 8081 nên mình 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ờ chúng ta sẽ đi vào phần chính của bài viết này các bạn nhé!



Mình sẽ tạo mới một controller tên là QuestionController với nội dung như sau:

Với khai báo trên, mình đã expose các API cho Core Question Service với request URL bắt đầu là “/question”.

Để thao tác với MongoDB server, chúng ta cần inject QuestionRepository vào class QuestionController như sau:

Để xây dựng API thêm mới question, mình sẽ thêm mới một method để expose một POST request “/add” với data trong phần body là đối tượng document Question:

Bởi vì Spring MongoDB Reactive đã hỗ trợ cho chúng ta phương thức save() để lưu data vào MongoDB nên mình chỉ cần gọi để sử dụng phương thức này mà thôi:

Đến đây thì chúng ta đã hoàn thành việc xây dựng API thêm mới question cho Core Question Service, hãy test thử xem sao nhé các bạn.

Questions Management – Core Question Service – Xây dựng API thêm mới question



Phần cuối cùng mà chúng ta cần làm là thêm mới Unit Test cho code mà chúng ta vừa thêm vào.
Mình sẽ tạo mới một class tên là QuestionControllerTest nằm trong package src/test/java để test cho class QuestionController.

Mock class QuestionRepository:

Inject đối tượng mock của QuestionRepository vào class QuestionController:

Để sử dụng các đối tượng mock, chúng ta phải khởi tạo chúng trước mỗi lần test một phương thức nên mình sẽ thêm một phương thức với annotation @Before của JUnit như sau:

Code để test phương thức createQuestion() như sau:

Chạy “Maven test” trong STS hoặc “mvn test” với Apache Maven, các bạn sẽ không lỗi nào cả.

Add Comment