2.1.3.3.12. Use case quản lý cấp độ
Tương tự mục 4.1.3.3.11.
2.2. Phân tích thiết kế hệ thống 2.2.1. Thiết kế xử lý 2.2.1. Thiết kế xử lý
Sử dụng lược đồ tuần tự (sequence diagram) để mô tả phương thức xử lý một số vấn đề của hệ thống.
39
2.2.1.1. Lược đồ xử lí thao tác đăng kí
Ảnh 2.9: Lược đồ tuần tự cho thao tác đăng kí
Mơ tả: Phần đăng kí được xử lý lưu trữ với 2 loại thông tin gồm Account để lưu trữ thông tin đăng nhập và User để lưu trữ thông tin người dùng.
- Đầu tiên, ứng dụng hiển thị giao diện đăng kí và người dùng nhập thơng
tin đăng kí cần thiết (1).
- Thành phần giao diện sẽ kiểm tra lỗi cú pháp (2) và thông báo lỗi nếu có (3).
- Nếu khơng có lỗi cú pháp, thơng tin đăng kí sẽ được chuyển sang thành
phần xử lý (4).
- Ứng dụng gửi yêu cầu đăng kí tới server (5) để xử lý đăng kí tài khoản,
nếu có lỗi (tài khoản tồn tại, thông tin không hợp lệ…) xảy ra sẽ trả về lỗi (6) và thông báo cho người dùng (7).
- Nếu tài khoản tạo thành công, server sẽ gửi mã xác thực đến email đăng
40
- Sau khi nhận được phản hồi tạo User thành công (11), ứng dụng điều hướng tới màn hình xác thực tài khoản (12) và hiển thị cho người dùng (13).
- Người dùng nhập mã xác thực (14) và thành phần xử lí sẽ tiến hành gửi
yêu cầu xác thực tới server (15, 16).
- Ứng dụng nhận kết quả phản hồi từ server (17) và hiển thị kết quả lên màn hình (18).
2.2.1.2. Lược đồ xử lí thao tác đăng bài
Ảnh 2.10: Lược đồ tuần tự cho thao tác đăng bài Mô tả: Người dùng muốn đăng bài để hỏi đáp, chia sẻ kiến thức…. Mô tả: Người dùng muốn đăng bài để hỏi đáp, chia sẻ kiến thức….
41
- Đầu tiên, người dùng nhấn mục tạo bài đăng trên thanh điều hướng chính
(1).
- Ứng dụng điều hướng tới màn hình tạo bài đăng (2) và hiển thị (3).
- Người dùng thêm tiêu đề và nội dung cho bài đăng (4).
- Người dùng có thể tùy chọn thêm một hoặc nhiều ảnh:
+ Chọn nút thêm ảnh (5) để mở thư viện (6) và chọn ảnh (7). + Sau đó, người dùng có thể thêm mơ tả phía dưới ảnh (8).
- Người dùng cũng có thể tùy chọn thêm lĩnh vực cụ thể cho bài viết: + Khi nhấn nút thêm lĩnh vực (9), ứng dụng sẽ gửi yêu cầu đến thành phần xử lí (10) để yêu cầu server lấy danh sách lĩnh vực (11).
+ Sau khi ứng dụng nhận được danh sách lĩnh vực từ server và hiển thị lên giao diện (12, 13), người dùng có thể chọn lĩnh vực cùng với cấp độ cho từng lĩnh vực cụ thể (14).
- Sau khi đã nhập đủ thông tin (15), người dùng nhấn đăng để chuyển thông tin xuống thành phần xử lí (16).
- Nếu bài đăng có chứa ảnh, thành phần xử lí sẽ tiến hành gửi ảnh lên Firebase Storage để lưu trữ (17) và nhận về URL tương ứng (18).
- Thành phần xử lý gửi yêu cầu tạo bài đăng đến server (19).
- Nếu tạo thành công (20), bài đăng được thêm vào danh sách bài đăng ở
42
2.2.1.3. Lược đồ xử lí thao tác trả lời (bình luận)
Ảnh 2.11: Lược đồ tuần tự cho thao tác trả lời Mô tả: Người dùng muốn trả lời bài đăng cụ thể. Mô tả: Người dùng muốn trả lời bài đăng cụ thể.
- Đầu tiên, người dùng vào màn hình danh sách bài đăng để chọn bài đăng
cụ thể (1).
- Khi đó, (2) thành phần xử lí sẽ nhận được yêu cầu và gửi yêu cầu đến server để lấy thông tin bài đăng (3) và danh sách trả lời của bài đăng đó (5).
- Sau khi nhận được kết quả từ server (4, 6), thành phần xử lí điều hướng
tới giao diện bài đăng chi tiết (7) và hiển thị cho người dùng (8). - Người dùng bắt đầu nhập nội dung trả lời (9).
43
- Người dùng có thể tùy chọn thêm ảnh: Chọn nút thêm ảnh (10) để mở thư
viện (11) và chọn ảnh (12).
- Sau khi hoàn tất trả lời, người dùng nhấn nút gửi (13) để gửi yêu cầu trả lời tới thành phần xử lí (14).
- Nếu trả lời có chứa ảnh, thành phần xử lí sẽ tiến hành gửi ảnh đến Firebase Storage (15) và nhận lại URL của ảnh tương ứng.
- Tiếp theo, thành phần xử lí gửi yêu cầu tạo mới trả lời đến server (16). - Cuối cùng, server trả về kết quả (17) và hiển thị trả lời mới tạo lên giao
diện.
2.2.1.4. Lược đồ xử lí thao tác đánh giá bài đăng
Ảnh 2.12: Lược đồ tuần tự cho thao tác đánh giá bài đăng
Mô tả: Khi đọc một bài đăng, người dùng có thể tương tác thơng qua việc đánh giá bài đăng.
- Đầu tiên, ứng dụng hiển thị giao diện bài đăng (1).
44
- Thao tác upvote:
+ Người dùng chọn nút upvote (2) và giao diện sẽ gọi thành phần xử lí tiếp nhận (3).
+ Thành phần xử lý sẽ gửi yêu cầu upvote đến server (4).
+ Server trả về kết quả (8) và hiển thị kết quả cho người dùng (9).
- Thao tác downvote tương tự upvote.
2.2.1.5. Lược đồ xử lí thao tác báo cáo vi phạm
Ảnh 2.13: Lược đồ tuần tự cho thao tác báo cáo vi phạm
Mơ tả: Người dùng có thể báo cáo bài đăng nếu nó vi phạm các nguyên tắc cộng đồng.
- Người dùng nhấn nút báo cáo (1) để thực hiện báo cáo bài đăng.
- Thành phần xử lí tiếp nhận (2) u cầu và gửi u cầu lấy thơng tin lí do
báo cáo đến server (3).
45
- Giao diện báo cáo hiển thị (6) và người dùng bắt đầu chọn lí do báo cáo
(7).
- Người dùng có thể tùy chọn nhập chi tiết lí do báo cáo (8).
- Người dùng nhấn nút gửi (9) báo cáo và thành phần xử lí tiếp nhận yêu
cầu (10).
- Thành phần xử lí gửi yêu cầu tạo báo cáo đến server (11).
- Ứng dụng nhận kết quả từ server (12) và hiển thị lên giao diện (13).
2.2.1.6. Lược đồ xử lí thao tác nhắn tin
Ảnh 2.14: Lược đồ tuần tự cho thao tác nhắn tin
Mơ tả: Người dùng có thể liên lạc với người dùng khác thơng qua tính năng nhắn tin.
46
+ Người dùng nhấn nút tạo mới để thực hiện tạo mới cuộc trò chuyện (1). Giao diện gửi yêu cầu lấy danh sách người dùng có thể nhắn tin được cho thanh phần xử lí (2).
+ Thành phần xử lí gửi yêu cầu lấy danh sách người dùng cho server (3) và nhận kết quả (4).
+ Sau đó, người dùng chọn tạo mới (6) từ danh sách người dùng được hiển thị (5).
- Với yêu cầu nhắn tin từ cuộc trị chuyện đã có: chọn cuộc trị chuyện được hiển thị trên màn hình danh sách trị chuyện (7).
- Sau đó, ứng dụng yêu cầu (8) thành phần xử lý gửi yêu cầu (9) lấy chi tiết cuộc trò chuyện tương ứng đến server và nhận kết quả trả về (10).
- Sau khi nhận kết quả từ server, điều hướng tới giao diện nhắn tin (11) và hiển thị cho người dùng (12).
- Người dùng có thể tùy chọn gửi tin nhắn bằng văn bản hoặc ảnh:
+ Người dùng nhập nội dung (13) và nhấn gửi (14).
+ Người dùng chọn nút hình ảnh (15) để hiện thị giao diện thư viện (16) và chọn ảnh cần gửi (17).
- Tiếp theo, yêu cầu xử lí được gửi đến thành phần xử lí.
- Nếu trường hợp tin nhắn là ảnh, thành phần xử lí sẽ tải nó lên Firebase Storage và nhận về URL của ảnh đó.
- Sau đó, thành phần xử lí tiến hành gửi tin nhắn đến server. - Ứng dụng nhận kết quả và hiển thị.
2.2.2. Thiết kế cơ sở dữ liệu
47
49
2.2.2.2. Mô tả các bảng dữ liệu
Bảng dữ liệu account: Lưu thông tin đăng nhập của người dùng
STT Tên thuộc tính Kiểu dữ liệu Ràng
buộc Ý nghĩa
1 _id ObjectId Khóa
chính ID của đối tượng 2 oid String Là duy nhất, tham chiếu với _id Dạng text của _id 3 Email String Là duy nhất với người dùng Email của người dùng
4 PasswordHash String Không
rỗng
Mật khẩu người dùng
5 AcceptTerms Boolean Khơng
rỗng
Tình trạng đồng ý điều khoản của người dùng
6 Role Int Không
rỗng Quyền truy cập của người dùng 7 VerificationToken String Chuỗi OTP xác thực khi đăng kí
8 Verified DateTime Ngày xác thực
9 ResetToken String
Chuỗi OTP xác thực khi quên mật khẩu
50
mật khẩu
11 Created DateTime Ngày tạo
12 Updated DateTime Ngày cập nhật
13 RefreshTokens List<Object> Danh sách
RefreshToken Bảng 2.22: Danh sách thuộc tính bảng account
Bảng dữ liệu client_group: Lưu thơng tin nhóm người dùng trong thông báo
STT Tên thuộc
tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 _id ObjectId Khóa chính ID của đối tượng
2 oid String
Là duy nhất, tham chiếu với _id
Dạng text của _id
3 name String Là duy nhất Tên nhóm
4 group_type String Bắt buộc Tên loại đối tượng
5 user_ids List<string> Bắt buộc Danh sách Id người dùng
Bảng 2.23: Danh sách thuộc tính bảng client_group Bảng dữ liệu comment: Lưu thông tin bình luận của bài viết Bảng dữ liệu comment: Lưu thơng tin bình luận của bài viết
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 _id ObjectId Khóa chính Id của đối tượng
2 oid String Là duy nhất, tham
chiếu với khóa chính
Dạng text của _id
3 post_id String Bắt buộc Id của bài post
trong bình luận này
4 content String Nội dung bài viết
5 image String Nội dung hình
51
6 author_id String Bắt buộc Id tác giả
7 status Boolean Bắt buộc Trạng thái tồn tại
của bài viết
8 id_edited Boolean Bắt buộc Trạng thái đã
chỉnh sửa Bảng 2.24: Danh sách thuộc tính bảng comment
Bảng dữ liệu conversation: Lưu thông tin cuộc hội thoại, thơng tin người tham gia.
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 _id ObjectId Khóa chính Id của đối tượng
2 oid String Là duy nhất, tham
chiếu với khóa chính
Dạng text của _id
3 name String Tên cuộc trò
chuyện
4 participants List<string> Bắt buộc Danh sách người
tham gia
5 status Boolean Bắt buộc Trạng thái
Bảng 2.25: Danh sách thuộc tính bảng conversation
Bảng dữ liệu downvote: Lưu thơng tin Downvote của đối tượng (Bài viết, Bình luận, Phản hồi bình luận)
STT Tên thuộc tính Kiểu dữ
liệu Ràng buộc Ý nghĩa
1 _id ObjectId Khóa chính Id của đối tượng
2 oid String Là duy nhất, tham
chiếu với khóa chính Dạng text của _id
3 object_vote_id String Tham chiếu tới oid
của đối tượng, có thể là post.oid,
comment.oid, reply_comment.oid
Id của đối tượng được downvote
52
4 downvote_by String Tham chiếu tới
user.oid
Id của người dùng thực hiện hành động downvote
5 is_deleted Boolean Bắt buộc Trạng thái
xóa/chưa xóa của đổi tượng
Bảng 2.26: Danh sách thuộc tính bảng “downvote”
Bảng dữ liệu external_login: Lưu thông tin đăng nhập bằng dịch vụ bên thứ ba của ứng dụng. Ví dụ: Google, Facebook, …
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 _id ObjectId Khóa chính Id của đối tượng
2 oid String Là duy nhất,
tham chiếu với khóa chính
Dạng text của _id
3 login_provider String Bắt buộc Tên dịch vụ sử dụng
4 email String Bắt buộc, tham
chiếu
Email người dùng sử dụng để đăng nhập Bảng 2.27: Danh sách thuộc tính bảng external_login
Bảng dữ liệu fcm_info: Lưu thông tin dịch vụ Firebase Cloud Messaging.
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 _id ObjectId Khóa chính Id của đối tượng
2 oid String Là duy nhất, tham
chiếu với khóa chính
Dạng text của _id
53
user.oid dùng
4 device_token String Bắt buộc Token của thiết
bị được cung cấp bởi Google Bảng 2.28: Danh sách thuộc tính bảng fcm_info
Bảng dữ liệu field: Lưu thông tin lĩnh vực của người dùng, của bài viết.
STT Tên thuộc tính Kiểu dữ liệu
Ràng buộc Ý nghĩa
1 _id ObjectId Khóa chính Id của đối tượng
2 oid String Là duy nhất, tham
chiếu với khóa chính
Dạng text của _id
3 value String Bắt buộc, duy nhất Tên lĩnh vực đó
4 status int Bắt buộc Trạng thái (chặn,
xóa, active, …) Bảng 2.29: Danh sách thuộc tính bảng field
Bảng dữ liệu follow: Lưu thông tin theo dõi giữa các người dùng với nhau
STT Tên thuộc tính Kiểu dữ liệu
Ràng buộc Ý nghĩa
1 _id ObjectId Khóa chính Id của đối tượng
2 oid String Là duy nhất, tham
chiếu với khóa chính
Dạng text của _id
54
4 from_id String Bắt buộc, tham chiếu
tới user.oid
Id của người chủ động theo dõi.
5 to_id String Bắt buộc, tham chiếu
tới user.oid
Id của người được người khác theo dõi.
Bảng 2.30: Danh sách thuộc tính bảng follow Bảng dữ liệu level: Lưu thơng tin các giá trị của cấp độ Bảng dữ liệu level: Lưu thông tin các giá trị của cấp độ
STT Tên thuộc tính Kiểu dữ liệu
Ràng buộc Ý nghĩa
1 _id ObjectId Khóa chính Id của đối tượng
2 oid String Là duy nhất, tham
chiếu với khóa chính
Dạng text của _id
3 name String Bắt buộc, duy nhất Tên gọi của cấp độ
4 description String Mô tả của cấp độ
5 order Int Bắt buộc Thứ tự ưu tiên
6 icon String Bắt buộc Tên file icon
9 is_active Boolean Bắt buộc Trạng thái hoạt
động Bảng 2.31: Danh sách thuộc tính bảng level
55
Bảng dữ liệu message_image: Lưu thơng tin các tin nhắn có hình ảnh hoặc file đa phương tiện
STT Tên thuộc tính Kiểu dữ liệu
Ràng buộc Ý nghĩa
1 _id ObjectId Khóa chính Id của đối tượng
2 oid String Là duy nhất, tham
chiếu với khóa chính
Dạng text của _id
3 sender_id String Tham chiếu với
user.oid
Id người gửi tin nhắn
4 convesation_id String Tham chiếu tới
conversation.oid
Id của cuộc hội thoại chứa tin nhắn này
5 is_edited Boolean Bắt buộc Trạng thái đã chỉnh
sửa
6 message_type Int Bắt buộc Loại tin nhắn
7 status Int Bắt buộc Trạng thái
Bảng 2.32: Danh sách thuộc tính bảng message_image
Bảng dữ liệu message_text: Lưu thơng tin tin nhắn có chứa nội dung văn bản
STT Tên thuộc tính Kiểu dữ liệu
Ràng buộc Ý nghĩa
1 _id ObjectId Khóa chính Id của đối tượng
56
với khóa chính
3 sender_id String Tham chiếu với user.oid Id người gửi tin
nhắn
4 convesation_id String Tham chiếu tới
conversation.oid
Id của cuộc hội thoại chứa tin nhắn này
5 is_edited Boolean Bắt buộc Trạng thái đã
chỉnh sửa
6 message_type Int Bắt buộc Loại tin nhắn
7 status Int Bắt buộc Trạng thái
8 created_date DateTime Bắt buộc Ngày tạo
9 modified_date DateTime Bắt buộc Ngày chỉnh sửa
10 content List<string> Nội dung
Bảng 2.33: Danh sách thuộc tính bảng message_text Bảng dữ liệu notification_detail: Lưu thông tin chi tiết thông báo Bảng dữ liệu notification_detail: Lưu thông tin chi tiết thông báo
ST T
Tên thuộc tính Kiểu dữ liệu
Ràng buộc Ý nghĩa
1 _id ObjectId Khóa chính Id của đối tượng
2 oid String Là duy nhất, tham
chiếu với khóa chính
Dạng text của _id
3 notification_object_
id
String Tham chiếu với
nofitication_object.
Id của
57
oid
4 creator_id String Tham chiếu tới
user.oid
Id của người thực hiện hành động tao ra thông báo
5 receiver_id String Tham chiếu tới
user.oid
Id của người nhận thông báo
6 created_date DateTime Bắt buộc Ngày tạo
7 modified_date DateTime Bắt buộc Ngày chỉnh sửa
8 is_read Boolean Bắt buộc Trạng thái đã xem
thông báo hay chưa
9 is_deleted Boolean Bắt buộc Trạng thái đã
xóa/chưa xóa của thơng báo
Bảng 2.34: Danh sách thc tính bảng notification_detail
Bảng dữ liệu notification_object: Lưu thơng tin nguồn gốc thơng báo dính tới đối tượng
STT Tên thuộc tính Kiểu dữ
liệu Ràng buộc
Ý nghĩa
1 _id ObjectId Khóa chính Id của đối tượng
2 oid String Là duy nhất, tham chiếu
với khóa chính Dạng text của _id
3 object_id String
Tham chiếu tới user.oid, post.oid, comment.oid, reply_comment.oid
Thông tin Id của đối tượng liên quan thông báo
58
4 owner_id String Tham chiếu tới user.oid Thông tin id người
sở hữu đối tượng
5 notification_type String Bắt buộc. Tham chiếu
tới notification_type.oid Loại thông báo Bảng 2.35: Danh sách thuộc tính bảng notification_object
Bảng dữ liệu object_level: Lưu thông tin cấp độ, lĩnh vực của một đối tượng, ví dụ như người dùng hoặc bài viết
STT Tên thuộc tính Kiểu dữ