Đặc tả use case quản lý lĩnh vực

Một phần của tài liệu Xây dựng ứng dụng hỗ trợ kết nối và hỗ trợ trong học tập (Trang 51)

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). (adsbygoogle = window.adsbygoogle || []).push({});

+ 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. (adsbygoogle = window.adsbygoogle || []).push({});

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ị. (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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ữ

Một phần của tài liệu Xây dựng ứng dụng hỗ trợ kết nối và hỗ trợ trong học tập (Trang 51)