2.2.1. Thiết kế xử lý
Đề tài sử dụng lược đồ tuần tự (Sequence Diagram) để mô tả phương thức xử lý vấn đề của hệ thống. Sau đây là một số lược đồ tuần tự cho các chức năng của hệ
22 thống.
2.2.1.1. Lược đồ tuần tự thao tác đăng nhập
Nhằm giúp cho việc đăng nhập dễ dàng hơn, ứng dụng hỗ trợ cho người dùng đăng nhập bằng số điện thoại hoặc Facebook.
a. Đăng nhập bằng số điện thoại
Hình 2.8: Lược đồ tuần tự thao tác đăng nhập bằng số điện thoại Mô tả: Người dùng có thể đăng nhập bằng số điện thoại.
- Người dùng nhập số điện thoại để thực hiện login (1). - Số điện thoại được gửi xuống phần xử lý để (2).
- Phần xử lý gửi yêu cầu đăng nhập bằng số điện thoại lên firebase authentication (3).
23 dùng (4).
- Thông tin xác thực sẽ được gửi về lại ứng dụng (5).
- Hiển thị màn hình xác thực để người dùng nhập mã xác thực (6). - Người dùng nhập mã xác thực nhận được từ tin nhắn (7).
- Mã xác thực được gửi xuống tầng xử lý để tiến hành kiểm tra (8). - Tầng xử lý tiến hành kiểm tra mã xác thực (9).
- Hiển thị lỗi xác thực nếu có (10).
- Chuyển tới màn hình nhập thông tin cá nhân nếu người dùng là người dùng mới của ứng dụng (11.1).
- Chuyển tới màn hình chính nếu người dùng đã nhập thông tin cá nhân vào hệ thống (11.2).
24
b. Đăng nhập bằng Facebook.
Hình 2.9: Lược đồ tuần tự thao tác đăng nhập bằng Facebook Mô tả: Cho phép người dùng đăng nhập bằng tài khoản Facebook. - Người dùng chọn đăng nhập bằng Facebook (1).
- Yêu cầu được xử lý xuống phần xử lý (2).
- Phần xử lý gửi yêu cầu đến Facebook login manager để thực hiện đăng nhập bằng tài khoản Facebook (3).
- Facebook login Manager hiển thị giao diện cho phép người dùng đăng nhập bằng Facebook (4).
- Người dùng tiến hành đăng nhập bằng tài khoản Facebook của mình (5). - Facebook login manager trả lại thông tin đăng nhập cho ứng dụng (6).
- Phần xử lý sử dụng thông tin đã nhận để gửi yêu cầu đăng nhập đến Firebase Authentication (7).
25
- Phần xử lý điều hướng đến màn hình nhập thông tin cá nhân nếu người dùng là người dùng mới của ứng dụng (9.1).
- Phần xử lý điều hướng đến màn hình chính nếu người dùng là người dùng cũ của ứng dụng (9.2).
2.2.1.2. Lược đồ tuần tự thao tác tìm trọ
Hình 2.10: Lược đồ tuần tự thao tác tìm trọ Mô tả: Người dùng thực hiện các thao tác cần thiết để tìm trọ. - Hiển thị màn hình tìm trọ cho người dùng (1).
- Người dùng có thể nhập một đoạn văn bản bất kỳ để tìm kiếm (2).
- Người dùng có thể lọc kết quả tìm bằng cách chọn mở bộ lọc (3), sau khi bộ lọc được hiển thị (4), người dùng đặt giá trị cho các bộ lọc (5) để giới hạn kết quả tìm kiếm.
26 hợp.
- Yêu cầu tìm kiếm được truyền từ giao diện xuống thành phần xử lý (7). - Thành phần xử lý tổng hợp, phân tích yêu cầu (8), sau đó gửi yêu cầu lấy dữ
liệu đến tầng dịch vụ (9).
- Dựa trên yêu cầu nhận được, tầng dịch vụ sẽ lấy dữ liệu phù hợp từ Firebase hoặc Algolia (10).
- Kết quả danh sách trọ sẽ được trả về lại cho tầng dịch vụ (11), sau đó chuyển tiếp về cho thành phần xử lý (12).
- Thành phần xử lý xử lý danh sách trọ, lưu danh sách trọ vào bộ nhớ tạm thời của ứng dụng (13).
- Danh sách trọ được đưa về giao diện (14), tầng giao diện sẻ hiển thị lên cho người dùng xem (15).
27
2.2.1.3. Lược đồ tuần tự thao tác tìm kiếm dịch vụ vận chuyển
Hình 2.11: Lược đồ tuần tự thao tác tìm kiếm dịch vụ vận chuyển Mô tả: Cho phép người dùng tìm kiếm dịch vụ vận chuyển.
- Màn hình dịch vụ vận chuyển được hiển thị cho người dùng (1). - Người dùng có thể mở bộ lọc để giới hạn tìm kiếm (2).
- Nếu người dùng nhấn chọn bộ lọc, bộ lọc sẽ được hiển thị (3) và người dùng có thể đặt các giá trị cho bộ lọc (4).
- Người dùng nhấn chọn tìm kiếm (5).
- Yêu cầu tìm kiếm được gửi xuống tầng xử lý (6).
- Tầng xử lý xử lý yêu cầu của người dùng (7) rồi gửi yêu cầu lấy dữ liệu đến tầng dịch vụ (8).
28 sách dịch vụ vận chuyển (10).
- Danh sách dịch vụ vận chuyển được chuyển tiếp về tầng xử lý (11).
- Tầng xử lý xử lý danh sách dịch vụ vận chuyển để lưu vào trong bộ nhớ tạm thời của ứng dụng (12).
- Danh sách dịch vụ vận chuyển thay đổi sẽ thông báo cho tầng giao diện cập nhật nội dung.
- Danh sách dịch vụ vận chuyển được hiển thị lên cho người dùng xem (14).
2.2.1.4. Lược đồ tuần tự thao tác tạo bài đăng tìm người ở ghép
Hình 2.12: Lược đồ tuần tự thao tác tạo bài đăng tìm người ở ghép
Mô tả: Cho phép người dùng tạo mới một bài đăng tìm người ở ghép trên ứng dụng.
29
- Người dùng chọn tạo bài đăng tìm người ở ghép trên màn hình tìm người ở ghép(1).
- Ứng dụng hiển thị màn hình tạo bài đăng tìm người ở ghép (2).
- Người dùng nhập nội dung bài đăng tìm người ở ghép (3). Sau đó, bấm chọn nút tạo để chuyển thông tin bài đăng tìm người ở ghép đến tầng xử lý (4). - Tầng xử lý kiểm tra nội dung bài đăng tìm người ở ghép (5), nếu nội dung đã
phù hợp với yêu cầu của ứng dụng thì gửi yêu cầu tạo đến tầng dịch vụ (6). - Dựa vào yêu cầu của tầng xử lý, tầng dịch vụ thực hiện tạo bài đăng tìm
người ở ghép đến Firestore (7).
- Kết quả tạo bài đăng được trả về tầng dịch vụ (8). Sau đó, tầng dịch vụ chuyển tiếp dữ liệu về tầng xử lý (9).
- Tầng xử lý xử lý kết quả tạo (10), nếu thành công thì lưu bài đăng tìm người ở ghép vào bộ nhớ tạm thời của ứng dụng, còn không thì yêu cầu tầng giao diện hiển thị lỗi.
- Kết quả tạo bài đăng tìm người ở ghép được hiển thị lên giao diện (11) để cho người dùng biết (12).
30
2.2.1.5. Lược đồ tuần tự thao tác tạo bài đăng bán đồ dùng cũ
Hình 2.13: Lược đồ tuần tự thao tác tạo bài đăng bán đồ dùng cũ Mô tả: Cho phép người dùng tạo mới một bài đăng bán đồ dùng cũ trên ứng dụng.
- Người dùng chọn tạo bài đăng trên màn hình đồ dùng cũ (1). - Ứng dụng hiển thị màn hình tạo bài đăng bán đồ dùng cũ (2).
- Người dùng nhập nội dung bài đăng bán đồ dùng cũ (3). Sau đó, bấm chọn nút tạo để chuyển thông tin bài đăng bán đồ dùng cũ đến tầng xử lý (4).
31
đã phù hợp với yêu cầu của ứng dụng thì gửi yêu cầu tạo đến tầng dịch vụ (6).
- Dựa vào yêu cầu của tầng xử lý, tầng dịch vụ thực hiện tạo bài đăng bán đồ dùng cũ đến Firestore (7).
- Kết quả tạo bài đăng được trả về tầng dịch vụ (8). Sau đó, tầng dịch vụ chuyển tiếp dữ liệu về tầng xử lý (9).
- Tầng xử lý xử lý kết quả tạo (10), nếu thành công thì lưu bài đăng bán đồ dùng cũ vào bộ nhớ tạm thời của ứng dụng, còn không thì yêu cầu tầng giao diện hiển thị lỗi.
- Kết quả tạo bài đăng tìm người ở ghép được hiển thị lên giao diện (11) để cho người dùng biết (12).
2.2.1.6. Lược đồ tuần tự thao tác chat
32
Mô tả: Cho phép người dùng chat với một người dùng khác. - Ứng dụng hiển thị màn hình chat (1).
- Người dùng chọn người chat (2).
- Ứng dụng hiển thị màn hình chat chi tiết (3).
- Người dùng nhập tin nhắn cần gửi (4), sau đó nhấn gửi (5). - Nội dung tin nhắn được gửi đến tầng xử lý (6).
- Tầng xử lý yêu cầu gửi tin nhắn đến tầng dịch vụ (7).
- Tin nhắn được lưu vào cơ sở dữ liệu (8), rồi gửi kết quả lưu về lại tầng dịch vụ (9).
- Tầng dịch vụ chuyển tiếp kết quả lưu trữ về tầng xử lý (10).
- Kết quả được tầng xử lý xử lý (11), nếu có lỗi thì thông báo cho người dùng, còn không thì lưu nội dung tin nhắn vào bộ nhớ tạm thời của ứng dụng, rồi yêu cầu cập nhật lại tin nhắn (12).
33
2.2.2. Thiết kế cơ sở dữ liệu 2.2.2.1. Lược đồ cơ sở dữ liệu 2.2.2.1. Lược đồ cơ sở dữ liệu
34
2.2.2.2. Mô tả các bảng dữ liệu
Bảng dữ liệu User: Lưu thông tin về tài khoản người dùng.
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 UserId
UUID Là duy nhất Khóa chính để phân biệt các tài khoản với nhau
2 Name String Tên hiển thị
3 PhoneNumber String Số điện thoại của
người sử dụng
4 Hometown String Quê quán của người
dùng
5 Job Number Nghề nghiệp của người
dùng
6 Gender Number Giới tính của người
dùng
7 Birthday Datetime Ngày sinh của người
dùng
8 Avatar String Hình đại diện của
người dùng
9 Role Number Vai trò của người dùng
Bảng 2.9: Danh sách các thuộc tính bảng User
Bảng dữ liệu Inn: Lưu thông tin phòng trọ
STT Tên thuộc tín Kiểu dữ liệu Ràng buộc Ý nghĩa
35
biệt các phòng trọ với nhau
2 Name String Tên phòng trọ
3 OwnerId UUID Khóa ngoại
Khóa ngoại đến bảng User để xác định ai là chủ trọ
4 Price Number Giá phòng
5 Area Number Diện tích phòng
6 Deposit Number Tiền đặt cọc
7 ElectricPrice Number Tiền điện
8 WaterPrice Number Tiền nước
9 Wifi Boolean Có Wifi hay không
10 Packing Boolean Có chỗ gửi xe hay
không
11 ExactAddress String Địa chỉ chính xác của
phòng trọ
12 FullAddressObjec
t Object
Lưu giữ thông tin quận huyện của nhà trọ
13 PhoneNumber String Số điện thoại chủ trọ
14 AirConditioner Boolean Có điều hòa hay
không
15 Closet Boolean Có tủ áo quần hay
36
16 Tivi Boolean Có tivi hay không
17 WashingMachine Boolean Có máy giặt hay
không
18 MaxRoommate Number Số người ở tối đa
được phép
19 Kitchen Boolean Có nhà bếp hay
không
20 PetsAllow Boolean Cho phép nuôi thú
cưng hay không
21 Refrigerator Boolean Có tử lạnh hay không
22 Bed Boolean Có giường ngủ hay
không
23 Images Array Hình ảnh nhà trọ
24 Notes String Mô tả trọ
25 Attention String Mô tả các chú ý
26 Coordinate Geo Vị trí của trọ trên bản
đồ
27 AvailableStatus Boolean Trạng thái khả dụng của trọ
28 CreatedAt Datetime Ngày tạo
Bảng 2.10: Danh sách các thuộc tính bảng Inn
Bảng dữ liệu Logistic: Lưu thông tin dịch vụ vận chuyển
STT Thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
37
biệt các dịch vụ vận chuyển với nhau
2 Name String Tên dịch vụ vận
chuyển
3 Price String Giá dịch vụ vận
chuyển 4 Area Array Danh sách vùng hoạt động của dịch vụ vận chuyển 5 City Number Tỉnh/thành phố nơi dịch vụ vận chuyển hoạt động 6 District Number Quận/Huyện nơi dịch vụ vận chuyển hoạt động
7 ExactAddress String Địa chỉ của dịch vụ
vận chuyển 8 FullAdressObject Object Địa chỉ của dịch vụ vận chuyển dưới dạng Object 9 Image String Hình ảnh dịch vụ vận chuyển
10 OwnerId UUID Khóa ngoại
Khóa ngoại đến bảng User để xác định ai là chủ dịch vụ vận chuyển
38 11 Contact String
Số điện thoại liên hệ với dịch vụ vận chuyển
12 CreatedAt Datetime Ngày tạo dịch vụ vận
chuyển Bảng 2.11: Danh sách các thuộc tính bảng Logistic
Bảng dữ liệu Roommate: Lưu thông tin bài đăng tìm người ở ghép
STT Thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 Id UUID Khóa chính
Khóa chính để phân biết các bài đăng tìm người ở ghép với nhau
2 Content String Nội dung bài đăng
3 Age String Độ tuổi tìm kiếm
4 City String Tỉnh/thành phố tìm
kiếm
5 District String Quận/huyện tìm kiếm
6 Gender Number Giới tính cần tìm
7 Job Number Công việc của người
ở chung mong muốn
8 HaveInnContent Boolean
Có thông tin trọ bổ sung hay không. Đối với những người đã thuê phòng và tìm kiếm người ở chung.
39
9 InnAddress String Địa chỉ trọ có sẵn
10 InnArea Number Diện tích phòng có
sẵn
11 InnDeposit Number Tiền đặt cọc
12 InnElectricPrice Number Tiền điện
13 InnWaterPrice Number Tiền nước
14 InnPrice Number Tiền trọ
15 InnName Number Tên trọ
16 InnOwner UUID Khóa ngoại
Khóa ngoại đến bảng User để biết ai là chủ trọ
17 OwnerID UUID Khóa ngoại
Liên kết đến bảng User để biết ai là người đăng
18 IsActive Boolean Trạng thái bài đăng
19 CreatedAt Datetime Ngày đăng
Bảng 2.12: Danh sách các thuộc tính bảng Roommate
Bảng dữ liệu Houseware: Lưu thông tin bài đăng bán đồ dùng cũ
STT Thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 Id UUID Khóa chính
Khóa chính để phân biệt các bài đăng bán đồ dùng cũ với nhau
2 Content String Nội dung bài đăng
40
4 District String Quận/huyện bán
5 IsActive Boolean Trạng thái bài đăng
6 CreatedAt Datetime Ngày đăng bài
Bảng 2.13: Danh sách các thuộc tính bảng Houseware
Bảng dữ liệu Message: Lưu thông tin cuộc trò chuyện
STT Thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 SendBy UUID Khóa ngoại
Khóa ngoại liên kết đến người dùng là người gửi tin nhắn.
2 ReceivedBy UUID Khóa ngoại
Khóa ngoại liên kết đến người dùng là người nhận tin nhắn
3 Text String Nội dung tin nhắn
4 SendAt Datetime Thời gian gửi
Bảng 2.14: Danh sách các thuộc tính bảng Message
Bảng dữ liệu Item: Lưu thông tin các đồ dùng cũ được bán trong bài đăng bán đồ dùng cũ
STT Thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 Id UUID Khóa chính Khóa chính để phân
biệt các đồ dùng cũ.
2 Description String Mô tả cho đồ dùng cũ
3 Price Number Giá của đồ dùng cũ
4 HousewareId UUID Khóa ngoại Khóa ngoại liên kết đến bảng Houseware
41
để biết đồ dùng này thuộc bài đăng nào Bảng 2.15: Danh sách các thuộc tính bảng Item
Bảng dữ liệu Review: Lưu thông tin các bài đánh giá trọ hoặc dịch vụ vận chuyển.
STT Thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 Id UUID Khóa chính
Khóa chính phân biệt giữa các Review khác nhau
2 PostId UUID Khóa ngoại Liên kết tới bài post
3 Text String Nội dung bài review
4 Star Number Số sao được đánh giá
5 SendAt Datetime Cho biết thời gian viết
đánh giá
6 SendBy UUID Khóa ngoại
Liên kết đến bảng User để biết ai là người viết đánh giá
7 Type String Loại bài post
Bảng 2.16: Danh sách các thuộc tính bảng Review
Bảng dữ liệu Comment: Lưu thông tin bình luận cho bài đăng tìm người ở ghép và bài đăng bán đồ cũ.
STT Thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 Id UUID Khóa chính
Khóa chính phân biệt giữa các bình luận khác nhau
42
3 Text String Nội dung bình luận
4 SendAt Datetime Cho biết thời gian viết
bình luận
5 SendBy UUID Khóa ngoại
Liên kết đến bảng User để biết ai là người viết bình luận
6 Type String Loại bài post