Questions Management – Core Category Service – Xây dựng API tìm category theo id

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 tìm category theo id như: một đối tượng document Category chứa thông tin của một category, một CategoryRepository để thao tác với MongoDB, một CategoryController định nghĩa các API của Core Category Service sẽ bắt đầu với “/category” 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 tìm category theo id, mình sẽ thêm mới một method để expose một GET request “{id}” với id là id của category mà chúng ta cần tìm:

Các bước để tìm category theo id bao gồm:

Đầu tiên, chúng ta cũng cần phải kiểm tra là category mà chúng ta cần tìm 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.

Trong trường hợp category này tồn tại, chúng ta sẽ return category này sử dụng phương thức map() với HTTP status code là 200:

Trong trường hợp category này không tồn tại trong database thì chúng ta sẽ trả về kết quả HTTP status code là 404 Not Found.

Toàn bộ nội dung của phương thức findCategoryById() sẽ như sau:

Đến đây thì chúng ta đã hoàn thành việc xây dựng API để tìm category theo id cho Core Category Service, hãy test thử xem sao nhé các bạn.

Giả sử hiện tại trong database mình đang có những category sau:

Questions Management – Core Category Service – Xây dựng API tìm category theo id

thì khi mình request để tìm category với id là 5b297751366e2605cf3c0d3e:

Questions Management – Core Category Service – Xây dựng API tìm category theo id

Kết quả sẽ là:

Questions Management – Core Category Service – Xây dựng API tìm category theo id



Bây giờ chúng ta sẽ thêm mới Unit Test cho code mà chúng ta vừa thêm vào, các bạn nhé!

Trong bài viết trước, mình đã tạo mới class test cho CategoryController tên là CategoryControllerTest, đối tượng Mock cho CategoryRepository và inject đối tượng Mock này vào class CategoryController:

Khởi tạo mock mỗi khi chạy một test case:

Giờ mình sẽ thêm mới hai phương thức để test cho phương thức của findCategoryById() của class CategoryController như sau:

Một phương thức để test cho trường hợp có category dựa vào id truyền vào:

Một phương thức để test cho trường hợp không có category dựa vào id truyền vào:

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ả.

2 thoughts on “Questions Management – Core Category Service – Xây dựng API tìm category theo id

  1. anh ơi tên phương thức là categoryController.getCategoryById(“123”); mà trong test lại
    categoryController.findCategoryById(“123”); hình như anh viết nhầm phải ko ạ

Add Comment