API tính quãng đường người dùng đi được

Một phần của tài liệu Xây dựng hệ thống cảnh báo tình trạng giao thông trên nền tảng web (Trang 130 - 132)

10 Phụ lục của đề tài

10.2.1API tính quãng đường người dùng đi được

10.2.1.1 Đặt vấn đề

Hiện tại ứng dụng Utraffic đang bước vào giai đoạn thử nghiệm nên rất cần người sử dụng cũng như dữ liệu được cung cấp từ người dùng để hệ thống có thể hiển thị tình trạng giao thông một cách chính xác hơn. Do đó để thu hút người dùng cài đặt và sử dụng ứng dụng, chúng tôi đã chuẩn bị cho việc triển khai các ưu đãi như dựa vào khoảng cách mà người dùng đi được (khi mở ứng dụng để thu thập dữ liệu) thì người dùng có thể đổi thẻ cào hoặc tiền (thông qua ví MoMo) từ khoảng cách đó. Vì vậy chúng tôi quyết định viết API tính khoảng cách người dùng đi được từ độ dài các segment mà người dùng đã đi qua để đáp ứng giải pháp này.

10.2.1.2 Hiện thực

• Collection Distances để lưu khoảng cách và điểm của người dùng, bao gồm

các field:

– _id: Sử dụng Id mặc định của mongoDB

– distance: Tổng khoảng cách mà người dùng đã đi được, khoảng cách này sẽ được server cập nhập liên tục mỗi 2 phút.

– point_received: Điểm tích lũy của người dùng.

– last_time_updated: Thời gian cập nhật khoảng cách mới nhất.

• Migrate data

– Migration là một cách thuận tiện để thay đổi cấu trúc collection và dữ

liệu trong database một cách dễ dàng. Bằng cách sử dụng migration bạn không cần phải viết câu truy vấn bằng tay, nó có thể giúp bạn thay đổi database một cách độc lập. Tưởng tượng mỗi migration tương ứng với 1 version của database. Ban đầu, schema là rỗng, và mỗi lần migration thì sẽ thêm hoặc xóa hoặc chỉnh sửa các field, documents hay là collections trong MongoDB.

– Với sự thuận tiện của Migration, nó đã đáp ứng được nhu cầu cần thêm

một thêm collection mới tên là Distances để lưu thông tin quãng đường mà người dùng đã đi được, cũng như khởi tạo các giá trị ban đầu cho từng user trong collection Distances

– Để khởi tạo các giá trị ban đầu trong collection Distances thì chúng

tôi đã cho duyệt qua từng user có trong collection Users để lấy giá trị trong Users gán vào Distances. Cụ thể là _id gán vào field user, cre- atedAt gán vào field last_time_updated cũng như gán field distance và point_received bằng 0

– Hiện thực migrate data:

∗ Cần phải tạo dữ cho collection Distances ứng với các user đã có sẵn trong hệ thống từ trước. Thư viện sử dụng migrate-mongo [63]

∗ Đối với các user mới đăng kí thì cần phải tạo mới một document cho

collection Distances với distance và point_received bằng 0.

∗ Các bước migrate data:

· Tạo file migrate-monogo-config.js chứa các thông tin của database và nội dung script để migrate data.

· Sử dụng các câu lệnh để migrate data.

• Mô tả : API trả về tổng khoảng cách người dùng đã đi được (km) dựa trên

các segment đã đi qua và lưu lần lượt các kết quả vào collection Distances đã được tạo.

• Để tính quãng đường đi được của người dùng, ta sẽ tính bằng phương pháp

tích lũy, cứ mỗi 2 phút sẽ tính tổng độ dài khoảng 100 segment mà người dùng đó đã đi qua (hạn chế cập nhật nhiều quá server sẽ bị quá tải). Độ dài các segment được lấy từ field length của collection Segments. Chúng tôi sẽ duyệt qua 100 SegmentReports có createdAt sau thời gian last_time_updated của từng user để lấy được tổng khoảng cách của 100 segments đó(new_distance), sau đó cập nhật lại field distance và last_time_updated trong collection Dis- tances. Cụ thể là distance = distance + new_distance và last_time_updated được gán từ createdAt của SegmentReport cuối cùng.

• Để mỗi 2 phút cập nhật quãng đường đi được của người dùng 1 lần, chúng tôi đã sử dụng thư viện node-cron [65] để làm việc này.

• Cơ sở để chúng tôi chọn tính toán khoảng 100 segment sau mỗi hai phút là

vì hệ thống sẽ lấy dữ liệu từ người dùng thông qua ứng dụng cứ mỗi 8 giây một lần một cách tự động, như vậy trung bình khoảng hai phút sẽ có khoảng 15 báo cáo dữ liệu của người dùng gửi về hệ thống. Vì vậy việc tính toán 100 segment sau mỗi hai phút là đủ an toàn để không mất mát dữ liệu.

• Thông tin về API:

– URL: <hostname>/api/get-distance

– Method: GET

– Yêu cầu xác thực: Có (user đã đăng nhập thành công)

– Kết quả trả về: JSON Object chứa thông tin khoảng cách đã đi được của

người dùng trong hệ thống. 1 { 2 " code ": 2 0 0, 3 " message ": " success ", 4 " data ": 4.4 3 6 5 }

Một phần của tài liệu Xây dựng hệ thống cảnh báo tình trạng giao thông trên nền tảng web (Trang 130 - 132)