Đặc tả Yêu cầu Phần mềm

Module Quản lý Tệp tin
FILE
Phiên bản1.0
Hệ thốngHệ thống Cổng Thông tin Tuyển dụng
ModuleFILE - Quản lý Tệp tin
Cơ sở dữ liệufile_db
Ngày2026-08-17
Tác giảNam Nguyen
Trạng tháiBản nháp

Mục lục

1. Giới thiệu

1.1 Mục đích

Tài liệu này định nghĩa các yêu cầu phần mềm cho module Quản lý Tệp tin của Hệ thống Cổng Thông tin Tuyển dụng.

1.2 Phạm vi

Module Quản lý Tệp tin xử lý:

1.3 Phụ thuộc Module

ModuleLoại Phụ thuộcMô tả
AUTHĐồng bộ (Gọi API)Xác thực danh tính người dùng và quyền RBAC
LOGBất đồng bộ (RabbitMQ)Phát sự kiện vòng đời tệp tin (đã tải lên, đã xóa)

1.4 Định nghĩa

Thuật ngữĐịnh nghĩa
FRYêu cầu Chức năng
NFRYêu cầu Phi chức năng
UCTrường hợp Sử dụng
MIME TypeMultipurpose Internet Mail Extensions - định danh loại tệp tin
RBACKiểm soát Truy cập Dựa trên Vai trò
Tải lên Hàng loạtTải lên nhiều tệp tin trong một yêu cầu duy nhất
Kế thừa QuyềnQuyền kế thừa từ thư mục cha đến các tệp tin/thư mục con
Hạn ngạch Lưu trữGiới hạn lưu trữ tối đa cho mỗi người dùng hoặc tổ chức
Chính sách Lưu trữCác quy tắc cấu hình cho danh mục tệp tin (loại được phép, giới hạn kích thước, thời gian lưu trữ)
OpenSearchCông cụ tìm kiếm và phân tích được sử dụng để lưu trữ nhật ký và tìm kiếm toàn văn

2. Tổng quan Module

Khía cạnhGiá trị
Mã ModuleFILE
Tên ModuleQuản lý Tệp tin
Mô tảTải lên, tải xuống, liệt kê, quản lý thư mục, quyền và quản lý vòng đời tệp tin với local filesystem
Cơ sở dữ liệufile_db
Bảngsys_files, sys_file_permissions, sys_storage_usage, sys_storage_quotas, sys_storage_policies
Stack Công nghệNestJS, Drizzle ORM, PostgreSQL, Multer + fs (local filesystem)

3. Yêu cầu Chức năng

Mã Yêu cầu Module Yêu cầu Trường hợp Sử dụng Ưu tiên Mô tả
FR-001 FILE Tải lên Tệp tin UC-05 Cao Hệ thống sẽ nhận tệp tin qua multipart/form-data. Server lưu tệp tin vào local filesystem và tạo bản ghi metadata. Trả về bản ghi tệp tin cho client.
FR-002 FILE Tải xuống Tệp tin UC-06 Cao Hệ thống sẽ đọc tệp tin từ local filesystem và trả về nội dung cho client. Kiểm tra quyền truy cập trước khi trả về.
FR-003 FILE Liệt kê Tệp tin UC-02 Trung bình Hệ thống sẽ truy vấn tệp tin theo người dùng, nhà tuyển dụng và danh mục với hỗ trợ phân trang. Kết quả được lọc theo kiểm soát truy cập.
FR-004 FILE Xóa Tệp tin UC-09 Trung bình Hệ thống sẽ xóa mềm metadata tệp tin và xóa vật lý tệp tin trên local filesystem. Trạng thái tệp tin được đặt thành DELETED.
FR-005 FILE Kiểm soát Truy cập Tệp tin UC-11 Cao Hệ thống sẽ kiểm tra quyền sở hữu tệp tin hoặc quyền RBAC trước khi tạo URL tải xuống. Người dùng chỉ có thể truy cập tệp tin của riêng họ trừ khi có vai trò admin/HR trong tổ chức.
FR-006 FILE Dọn dẹp Tệp tin Tạm - Trung bình Hệ thống sẽ chạy tác vụ định kỳ (cron) để xóa các tệp tin TEMP cũ hơn 24 giờ. Xóa vật lý tệp tin trên local filesystem và xóa bản ghi metadata.
FR-007 FILE Tải lên CV/Hồ sơ UC-05 Cao Hệ thống sẽ cho phép người dùng đã xác thực tải lên tệp tin CV/hồ sơ (PDF, DOC, DOCX) với kích thước tối đa 10MB. Tệp tin được lưu trữ dưới danh mục RESUME với đường dẫn theo phạm vi người dùng. Hệ thống kiểm tra loại tệp tin, lưu tệp tin vào local filesystem và tạo metadata. Chỉ cho phép một CV đang hoạt động cho mỗi người dùng - tải lên CV mới sẽ thay thế CV trước đó.
FR-008 FILE Tạo Thư mục UC-01 Trung bình Hệ thống sẽ cho phép người dùng đã xác thực tạo thư mục trong cấu trúc thư mục được ủy quyền. Tên thư mục không được chứa ký tự đặc biệt (/, \, :, *, ?, ", <, >, |). Hệ thống kiểm tra tính duy nhất của tên thư mục trong thư mục cha. Metadata thư mục được lưu trong sys_files với type=FOLDER.
FR-009 FILE Tìm kiếm Tệp tin/Thư mục UC-03 Trung bình Hệ thống sẽ cung cấp tìm kiếm toàn văn trên tên và metadata tệp tin/thư mục. Tìm kiếm hỗ trợ bộ lọc: danh mục, mime_type, khoảng ngày, chủ sở hữu và trạng thái. Kết quả được phân trang và sắp xếp theo mức độ liên quan hoặc ngày. Tìm kiếm tuân theo kiểm soát truy cập - người dùng chỉ thấy các tệp tin mà họ có quyền truy cập.
FR-010 FILE Đổi tên Tệp tin/Thư mục UC-04 Trung bình Hệ thống sẽ cho phép người dùng được ủy quyền đổi tên tệp tin và thư mục. Tên mới phải duy nhất trong thư mục cha. Nếu tệp tin với tên tương tự tồn tại, hệ thống sẽ thêm hậu tố số (ví dụ: file(1).pdf). Hệ thống kiểm tra định dạng tên và cập nhật metadata. Việc đổi tên được ghi nhật ký để kiểm toán.
FR-011 FILE Tải lên Nhiều Tệp tin UC-07 Trung bình Hệ thống sẽ hỗ trợ tải lên hàng loạt nhiều tệp tin trong một yêu cầu. Mỗi tệp tin được kiểm tra riêng biệt về loại và kích thước. Hệ thống xử lý tất cả tệp tin và trả về kết quả tải lên dưới dạng mảng. Các tải lên thất bại không chặn các tải thành công - báo cáo một phần được cung cấp.
FR-012 FILE Sao chép Tệp tin UC-08 Thấp Hệ thống sẽ cho phép người dùng được ủy quyền sao chép tệp tin sang thư mục khác. Sao chép tạo bản ghi tệp tin mới với cùng đường dẫn file vật lý (hard link hoặc copy). Thư mục đích phải nằm trong phạm vi ủy quyền của người dùng. Hệ thống xử lý tên trùng lặp tại đích bằng cách thêm hậu tố số.
FR-013 FILE Di chuyển Tệp tin UC-10 Trung bình Hệ thống sẽ cho phép người dùng được ủy quyền di chuyển tệp tin giữa các thư mục. Di chuyển cập nhật metadata parent_folder_id của tệp tin. Nguồn và đích phải nằm trong phạm vi ủy quyền của người dùng. Hệ thống xử lý tên trùng lặp tại đích. Việc di chuyển được ghi nhật ký để kiểm toán.
FR-014 FILE Quản lý Quyền UC-13 Cao Hệ thống sẽ cho phép quản trị viên quản lý quyền tệp tin/thư mục ở cấp người dùng, vai trò và tổ chức. Các loại quyền: XEM, TẢI XUỐNG, SỬA, XÓA. Quyền có thể kế thừa từ thư mục cha. Thay đổi quyền được ghi nhật ký để kiểm toán.
FR-015 FILE Ghi nhật ký Lịch sử Truy cập UC-12 Trung bình Hệ thống sẽ ghi nhật ký tất cả sự kiện truy cập tệp tin (xem, tải xuống, sửa, xóa) với mã người dùng, thời gian, địa chỉ IP và loại hành động. Nhật ký được lưu trữ trong OpenSearch thông qua module LOG. Nhật ký truy cập được lưu giữ trong 90 ngày theo mặc định. Nhật ký hỗ trợ kiểm toán và yêu cầu tuân thủ.
FR-016 FILE Theo dõi Sử dụng Lưu trữ UC-14 Trung bình Hệ thống sẽ theo dõi sử dụng lưu trữ theo người dùng, tổ chức và toàn cục. Dữ liệu sử dụng bao gồm tổng kích thước, số lượng tệp tin và phân tích theo danh mục. Hệ thống cung cấp dữ liệu sử dụng lưu trữ qua API cho bảng điều khiển quản trị. Dữ liệu sử dụng được cập nhật bất đồng bộ thông qua phương pháp sự kiện.
FR-017 FILE Quản lý Hạn ngạch Lưu trữ UC-16 Trung bình Hệ thống sẽ cho phép quản trị viên đặt hạn ngạch lưu trữ cho mỗi người dùng và tổ chức. Giới hạn hạn ngạch: tổng kích thước tối đa, số lượng tệp tin tối đa. Hệ thống từ chối tải lên khi vượt quá hạn ngạch. Cảnh báo hạn ngạch được kích hoạt ở ngưỡng sử dụng 80% và 95%.
FR-018 FILE Cấu hình Chính sách Lưu trữ UC-17 Thấp Hệ thống sẽ cho phép quản trị viên cấu hình chính sách lưu trữ cho mỗi danh mục: loại mime được phép, kích thước tệp tin tối đa, thời gian lưu trữ và cài đặt mã hóa. Thay đổi chính sách có hiệu lực cho các tải lên mới. Các tệp tin hiện tại giữ nguyên cài đặt chính sách ban đầu.

4. Trường hợp Sử dụng

4.1 Sơ đồ Trường hợp Sử dụng

Sơ đồ Trường hợp Sử dụng - Đầy đủ
Hình 1: Sơ đồ Trường hợp Sử dụng Quản lý Tệp tin (Đầy đủ)
Sơ đồ Trường hợp Sử dụng - Cốt lõi
Hình 2: Sơ đồ Trường hợp Sử dụng Quản lý Tệp tin (Cốt lõi)
Sơ đồ Hệ thống bên ngoài
Hình 3: Trường hợp Sử dụng — Hệ thống bên ngoài

4.2 UC-01: Tạo Thư mục

Khía cạnhMô tả
ActorNgười dùng đã xác thực
Điều kiện tiên quyếtNgười dùng đã đăng nhập; người dùng có quyền ghi trong thư mục đích
Lưu trình Chính1. Người dùng điều hướng đến thư mục đích
2. Người dùng nhấp vào "Tạo Thư mục" và nhập tên thư mục
3. Client gửi POST /files/folders với name và parent_folder_id
4. Hệ thống kiểm tra tên thư mục (không có ký tự đặc biệt, duy nhất trong thư mục cha)
5. Hệ thống tạo bản ghi thư mục trong sys_files với type=FOLDER
6. Hệ thống trả về bản ghi thư mục với folder_id
Lưu trình Thay thế4a. Tên không hợp lệ (ký tự đặc biệt) → Hệ thống trả về 400 "Tên thư mục không hợp lệ"
4b. Tên đã tồn tại → Hệ thống trả về 409 "Thư mục đã tồn tại"
4c. Không có quyền ghi → Hệ thống trả về 403 Forbidden
Điều kiện hậuThư mục được tạo trong cơ sở dữ liệu; thư mục có thể truy cập trong trình duyệt tệp tin
FR liên quanFR-008

4.3 UC-02: Liệt kê Tệp tin/Thư mục

Khía cạnhMô tả
ActorNgười dùng đã xác thực
Điều kiện tiên quyếtNgười dùng đã đăng nhập
Lưu trình Chính1. Client yêu cầu danh sách tệp tin/thư mục với bộ lọc tùy chọn (user_id, employer_id, category, parent_folder_id)
2. Hệ thống áp dụng bộ lọc kiểm soát truy cập
3. Hệ thống truy vấn sys_files với phân trang
4. Hệ thống trả về danh sách tệp tin/thư mục với tổng số, sắp xếp theo tên hoặc ngày
Lưu trình Thay thế2a. Không có bộ lọc được cung cấp → Hệ thống trả về tệp tin của người dùng hiện tại
2b. Bộ lọc nhà tuyển dụng → Hệ thống trả về tất cả tệp tin của nhà tuyển dụng đó (chỉ admin/HR)
2c. parent_folder_id → Hệ thống trả về các mục con của thư mục đó
Điều kiện hậuDanh sách tệp tin/thư mục phân trang được trả về với metadata (không có nội dung tệp tin)
FR liên quanFR-003, FR-005

4.4 UC-03: Tìm kiếm Tệp tin/Thư mục

Khía cạnhMô tả
ActorNgười dùng đã xác thực
Điều kiện tiên quyếtNgười dùng đã đăng nhập
Lưu trình Chính1. Người dùng nhập từ khóa tìm kiếm (từ khóa, bộ lọc)
2. Client gửi GET /files/search với query, category, mime_type, khoảng ngày
3. Hệ thống thực hiện tìm kiếm toàn văn trên tên tệp tin và metadata
4. Hệ thống áp dụng bộ lọc kiểm soát truy cập
5. Hệ thống trả về kết quả tìm kiếm với phân trang, sắp xếp theo mức độ liên quan
Lưu trình Thay thế3a. Không tìm thấy kết quả → Hệ thống trả về danh sách trống với total_count=0
4a. Người dùng không có quyền truy cập bất kỳ tệp tin khớp nào → Hệ thống trả về danh sách trống
Điều kiện hậuKết quả tìm kiếm được trả về với metadata tệp tin
FR liên quanFR-009, FR-005

4.5 UC-04: Xem & Đổi tên Tệp tin/Thư mục

Khía cạnhMô tả
ActorNgười dùng đã xác thực (chủ sở hữu hoặc admin)
Điều kiện tiên quyếtNgười dùng đã đăng nhập; tệp tin/thư mục tồn tại với trạng thái ACTIVE
Lưu trình Chính1. Người dùng chọn tệp tin/thư mục và nhấp vào "Đổi tên"
2. Người dùng nhập tên mới
3. Client gửi PATCH /files/:id với tên mới
4. Hệ thống kiểm tra người dùng có quyền sửa
5. Hệ thống kiểm tra tên mới (duy nhất trong thư mục cha, không có ký tự đặc biệt)
6. Hệ thống cập nhật metadata tệp tin
7. Hệ thống ghi nhật ký sự kiện đổi tên để kiểm toán
8. Hệ thống trả về bản ghi tệp tin đã cập nhật
Lưu trình Thay thế4a. Không có quyền sửa → Hệ thống trả về 403 Forbidden
5a. Tên đã tồn tại → Hệ thống thêm hậu tố số (ví dụ: file(1).pdf)
5b. Tên không hợp lệ → Hệ thống trả về 400 "Tên không hợp lệ"
Điều kiện hậuTệp tin/thư mục đã đổi tên; sự kiện đổi tên được ghi nhật ký để kiểm toán
FR liên quanFR-010, FR-005

4.6 UC-05: Tải lên Tệp tin

Khía cạnhMô tả
ActorNgười dùng đã xác thực
Điều kiện tiên quyếtNgười dùng đã đăng nhập; người dùng có token phiên hợp lệ
Lưu trình Chính1. Người dùng chọn tệp tin để tải lên (ví dụ: hồ sơ, ảnh đại diện)
2. Client gửi yêu cầu POST /files/upload (multipart/form-data) với tệp tin và category
3. Hệ thống kiểm tra loại và kích thước tệp tin theo giới hạn danh mục
4. Hệ thống tạo tên file UUID và lưu tệp tin vào local filesystem (uploads/{user_id}/{category}/{uuid})
5. Hệ thống tạo bản ghi metadata trong sys_files với trạng thái ACTIVE
6. Hệ thống trả về bản ghi tệp tin cho client
Lưu trình Thay thế3a. Loại tệp tin không hợp lệ → Hệ thống trả về 400 Lỗi Xác thực
3b. Tệp tin quá lớn → Hệ thống trả về 413 Payload Too Large
4a. Lưu filesystem thất bại → Hệ thống trả về 500 Lỗi Server
Điều kiện hậuTệp tin đã lưu trên local filesystem; metadata tệp tin được lưu trong cơ sở dữ liệu với trạng thái ACTIVE; tệp tin có thể truy cập qua endpoint tải xuống
FR liên quanFR-001

Sơ đồ Hoạt động

Sơ đồ Hoạt động Tải lên
Hình 4: Sơ đồ Hoạt động Tải lên Tệp tin

Sơ đồ Tuần tự

Sơ đồ Tuần tự Tải lên
Hình 5: Sơ đồ Tuần tự Tải lên Tệp tin

4.7 UC-06: Tải xuống Tệp tin

Khía cạnhMô tả
ActorNgười dùng đã xác thực
Điều kiện tiên quyếtNgười dùng đã đăng nhập; tệp tin tồn tại với trạng thái ACTIVE
Lưu trình Chính1. Client yêu cầu tải xuống tệp tin bằng file ID
2. Hệ thống kiểm tra người dùng có quyền truy cập (chủ sở hữu hoặc admin/HR tổ chức)
3. Hệ thống đọc tệp tin từ local filesystem (file_path)
4. Hệ thống trả về nội dung tệp tin (file stream)
Lưu trình Thay thế2a. Người dùng không được ủy quyền → Hệ thống trả về 403 Forbidden
2b. Tệp tin không tìm thấy hoặc đã DELETED → Hệ thống trả về 404 Not Found
3a. Tệp tin không tồn tại trên filesystem → Hệ thống trả về 404 Not Found
Điều kiện hậuTệp tin đã được người dùng được ủy quyền tải xuống
FR liên quanFR-002, FR-005

Sơ đồ Hoạt động

Sơ đồ Hoạt động Tải xuống
Hình 6: Sơ đồ Hoạt động Tải xuống Tệp tin

Sơ đồ Tuần tự

Sơ đồ Tuần tự Tải xuống
Hình 7: Sơ đồ Tuần tự Tải xuống Tệp tin

4.8 UC-07: Tải lên Nhiều Tệp tin

Khía cạnhMô tả
ActorNgười dùng đã xác thực
Điều kiện tiên quyếtNgười dùng đã đăng nhập; người dùng có quyền ghi trong thư mục đích
Lưu trình Chính1. Người dùng chọn nhiều tệp tin để tải lên
2. Client gửi POST /files/batch với mảng metadata tệp tin
3. Hệ thống kiểm tra từng tệp tin riêng biệt về loại và kích thước
4. Hệ thống lưu tệp tin vào local filesystem cho tất cả tệp tin hợp lệ
5. Hệ thống tạo bản ghi tệp tin với trạng thái TEMP
6. Server lưu tệp tin vào local filesystem
7.
8.
9. Hệ thống trả về kết quả tải lên dưới dạng mảng (thành công/một phần)
Lưu trình Thay thế3a. Một số tệp tin không hợp lệ → Hệ thống trả về thành công một phần với chi tiết lỗi cho từng tệp tin
6a. Một số tải lên thất bại → Client có thể thử lại các tải lên thất bại riêng lẻ
7a. Một số xác nhận không được nhận → Dọn dẹp tệp tin tạm xóa các bản ghi bị bỏ rơi
Điều kiện hậuCác tệp tin hợp lệ đã lưu trên filesystem; metadata tệp tin được lưu; tệp tin không hợp lệ bị từ chối với chi tiết lỗi
FR liên quanFR-011

4.9 UC-08: Sao chép Tệp tin

Khía cạnhMô tả
ActorNgười dùng đã xác thực
Điều kiện tiên quyếtNgười dùng đã đăng nhập; tệp tin nguồn tồn tại; người dùng có quyền đọc trên nguồn và quyền ghi trên đích
Lưu trình Chính1. Người dùng chọn tệp tin và nhấp vào "Sao chép đến..."
2. Người dùng chọn thư mục đích
3. Client gửi POST /files/:id/copy với destination_folder_id
4. Hệ thống kiểm tra quyền truy cập (đọc nguồn, ghi đích)
5. Hệ thống tạo bản ghi tệp tin mới với cùng đường dẫn file vật lý
6. Hệ thống xử lý tên trùng lặp tại đích (thêm hậu tố số)
7. Hệ thống trả về bản ghi tệp tin mới
Lưu trình Thay thế4a. Không có quyền đọc trên nguồn → Hệ thống trả về 403 Forbidden
4b. Không có quyền ghi trên đích → Hệ thống trả về 403 Forbidden
6a. Tên trùng lặp → Hệ thống thêm (1), (2), v.v.
Điều kiện hậuBản ghi tệp tin mới được tạo; tệp tin vật lý được sao chép trên filesystem; tệp tin có thể truy cập tại đích
FR liên quanFR-012, FR-005

4.10 UC-09: Xóa Tệp tin/Thư mục

Khía cạnhMô tả
ActorNgười dùng đã xác thực (chủ sở hữu tệp tin hoặc admin)
Điều kiện tiên quyếtNgười dùng đã đăng nhập; tệp tin/thư mục tồn tại với trạng thái ACTIVE
Lưu trình Chính1. Client yêu cầu xóa tệp tin/thư mục bằng ID
2. Hệ thống kiểm tra người dùng là chủ sở hữu hoặc có vai trò admin
3. Nếu là thư mục: Hệ thống đánh dấu đệ quy tất cả các mục con là DELETED
4. Hệ thống đặt trạng thái tệp tin thành DELETED và timestamp deleted_at
5. Hệ thống xóa vật lý tệp tin trên local filesystem (fs.unlink)
6. Hệ thống trả về phản hồi thành công
Lưu trình Thay thế2a. Người dùng không được ủy quyền → Hệ thống trả về 403 Forbidden
2b. Tệp tin đã DELETED → Hệ thống trả về 404 Not Found
5a. Xóa filesystem thất bại → Ghi log lỗi, tệp tin vẫn đánh dấu DELETED
Điều kiện hậuMetadata tệp tin/thư mục đã xóa mềm; tệp tin vật lý đã bị xóa trên filesystem; tệp tin không còn truy cập được
FR liên quanFR-004, FR-005

Sơ đồ Hoạt động

Sơ đồ Hoạt động Xóa
Hình 8: Sơ đồ Hoạt động Xóa Tệp tin

Sơ đồ Tuần tự

Sơ đồ Tuần tự Xóa
Hình 9: Sơ đồ Tuần tự Xóa Tệp tin

4.11 UC-10: Di chuyển Tệp tin

Khía cạnhMô tả
ActorNgười dùng đã xác thực (chủ sở hữu tệp tin hoặc admin)
Điều kiện tiên quyếtNgười dùng đã đăng nhập; tệp tin tồn tại; người dùng có quyền ghi trên cả nguồn và đích
Lưu trình Chính1. Người dùng chọn tệp tin và nhấp vào "Di chuyển đến..."
2. Người dùng chọn thư mục đích
3. Client gửi POST /files/:id/move với destination_folder_id
4. Hệ thống kiểm tra quyền truy cập (ghi nguồn, ghi đích)
5. Hệ thống cập nhật parent_folder_id của tệp tin
6. Hệ thống xử lý tên trùng lặp tại đích (thêm hậu tố số)
7. Hệ thống ghi nhật ký sự kiện di chuyển để kiểm toán
8. Hệ thống trả về bản ghi tệp tin đã cập nhật
Lưu trình Thay thế4a. Không có quyền ghi → Hệ thống trả về 403 Forbidden
4b. Đích là thư mục con của nguồn → Hệ thống trả về 400 "Không thể di chuyển thư mục vào chính nó"
6a. Tên trùng lặp → Hệ thống thêm (1), (2), v.v.
Điều kiện hậuTệp tin đã di chuyển sang thư mục mới; sự kiện di chuyển được ghi nhật ký để kiểm toán
FR liên quanFR-013, FR-005

4.12 UC-11: Kiểm tra Quyền Truy cập

Khía cạnhMô tả
ActorHệ thống (nội bộ)
Điều kiện tiên quyếtNhận yêu cầu từ người dùng; tệp tin/thư mục tồn tại
Lưu trình Chính1. Hệ thống nhận yêu cầu truy cập tệp tin
2. Hệ thống kiểm tra người dùng là chủ sở hữu tệp tin → cấp quyền truy cập
3. Hệ thống kiểm tra vai trò của người dùng trong tổ chức (admin/HR) → cấp quyền truy cập
4. Hệ thống kiểm tra quyền rõ ràng trong sys_file_permissions → cấp/từ chối
5. Hệ thống kiểm tra quyền thư mục cha (kế thừa) → cấp/từ chối
6. Hệ thống trả về quyết định truy cập (ALLOW/DENY)
Lưu trình Thay thế2a. Người dùng không phải chủ sở hữu → Tiếp tục bước 3
3a. Người dùng không phải admin/HR → Tiếp tục bước 4
4a. Không tìm thấy quyền rõ ràng → Tiếp tục bước 5
5a. Không tìm thấy quyền thư mục → DENY truy cập
Điều kiện hậuQuyết định truy cập được trả về; quyết định được ghi nhật ký nếu DENY
FR liên quanFR-005

4.13 UC-12: Ghi nhật ký Lịch sử Truy cập

Khía cạnhMô tả
ActorHệ thống (nội bộ)
Điều kiện tiên quyếtSự kiện truy cập tệp tin đã xảy ra (xem, tải xuống, sửa, xóa)
Lưu trình Chính1. Hệ thống phát hiện sự kiện truy cập tệp tin
2. Hệ thống thu thập: user_id, file_id, action, timestamp, địa chỉ IP
3. Hệ thống phát sự kiện vào RabbitMQ (hàng đợi: log.events)
4. Module LOG tiêu thụ sự kiện và lưu trữ trong OpenSearch
5. Lịch sử truy cập sẵn sàng cho các truy vấn kiểm toán
Lưu trình Thay thế3a. RabbitMQ không khả dụng → Sự kiện được xếp hàng cục bộ, thử lại khi kết nối lại
Điều kiện hậuSự kiện truy cập được ghi nhật ký; kiểm toán được duy trì
FR liên quanFR-015

4.14 UC-13: Quản lý Quyền

Khía cạnhMô tả
ActorQuản trị viên
Điều kiện tiên quyếtAdmin đã đăng nhập; admin có vai trò admin hệ thống hoặc admin tổ chức
Lưu trình Chính1. Admin chọn tệp tin/thư mục và mở bảng "Quyền"
2. Admin thêm/cập nhật/xóa quyền cho người dùng, vai trò hoặc tổ chức
3. Admin đặt loại quyền: XEM, TẢI XUỐNG, SỬA, XÓA
4. Admin tùy chọn bật kế thừa quyền từ thư mục cha
5. Client gửi PUT /files/:id/permissions với mảng quyền
6. Hệ thống kiểm tra admin có vai trò quản lý quyền
7. Hệ thống cập nhật bảng sys_file_permissions
8. Hệ thống ghi nhật ký thay đổi quyền để kiểm toán
9. Hệ thống trả về quyền đã cập nhật
Lưu trình Thay thế6a. Admin không được ủy quyền → Hệ thống trả về 403 Forbidden
7a. Xung đột quyền → Hệ thống áp dụng quy tắc hạn chế nhất
Điều kiện hậuQuyền được cập nhật; thay đổi có hiệu lực ngay lập tức; nhật ký kiểm toán được ghi lại
FR liên quanFR-014

4.15 UC-14: Theo dõi Sử dụng Lưu trữ

Khía cạnhMô tả
ActorHệ thống (Tác vụ Cron)
Điều kiện tiên quyếtHệ thống đang chạy; file_db có thể truy cập
Lưu trình Chính1. Tác vụ cron chạy định kỳ (mỗi giờ)
2. Hệ thống tính toán sử dụng lưu trữ cho mỗi người dùng: total_size, file_count
3. Hệ thống tính toán sử dụng lưu trữ cho mỗi tổ chức
4. Hệ thống tính toán sử dụng lưu trữ toàn cục
5. Hệ thống lưu dữ liệu sử dụng trong bảng sys_storage_usage
6. Hệ thống cung cấp dữ liệu sử dụng qua API GET /files/storage-usage
Lưu trình Thay thế2a. Tính toán thất bại → Hệ thống ghi nhật ký lỗi, thử lại ở chu kỳ tiếp theo
Điều kiện hậuDữ liệu sử dụng lưu trữ được cập nhật; sẵn sàng cho bảng điều khiển quản trị
FR liên quanFR-016

4.16 UC-15: Quản lý Cấu trúc Thư mục

Khía cạnhMô tả
ActorHệ thống (Tác vụ Cron)
Điều kiện tiên quyếtHệ thống đang chạy; file_db có thể truy cập
Lưu trình Chính1. Tác vụ cron chạy định kỳ (hàng ngày)
2. Hệ thống quét cấu trúc thư mục để tìm thư mục bị bỏ rơi
3. Hệ thống kiểm tra tính toàn vẹn cấp bậc thư mục
4. Hệ thống dọn dẹp các thư mục trống không có mục con
5. Hệ thống cập nhật metadata cấu trúc thư mục
6. Hệ thống ghi nhật ký các sự kiện dọn dẹp
Lưu trình Thay thế4a. Thư mục có mục con → Hệ thống bỏ qua việc xóa
5a. Phát hiện vấn đề toàn vẹn → Hệ thống ghi nhật ký cảnh báo
Điều kiện hậuCấu trúc thư mục được dọn dẹp; thư mục bị bỏ rơi được xóa
FR liên quanFR-015

4.17 UC-16: Quản lý Hạn ngạch Lưu trữ

Khía cạnhMô tả
ActorQuản trị viên
Điều kiện tiên quyếtAdmin đã đăng nhập; admin có vai trò admin hệ thống
Lưu trình Chính1. Admin điều hướng đến cài đặt Hạn ngạch Lưu trữ
2. Admin đặt giới hạn hạn ngạch cho mỗi người dùng hoặc tổ chức: max_total_size, max_file_count
3. Client gửi PUT /files/quotas với cấu hình hạn ngạch
4. Hệ thống kiểm tra ủy quyền của admin
5. Hệ thống lưu hạn ngạch trong bảng sys_storage_quotas
6. Hệ thống kiểm tra hạn ngạch tại mỗi lần tải lên
7. Hệ thống từ chối tải lên khi vượt quá hạn ngạch
Lưu trình Thay thế4a. Admin không được ủy quyền → Hệ thống trả về 403 Forbidden
6a. Vượt quá hạn ngạch → Hệ thống trả về 413 "Vượt quá hạn ngạch lưu trữ"
6b. Hạn ngạch ở 80% → Hệ thống gửi thông báo cảnh báo
6c. Hạn ngạch ở 95% → Hệ thống gửi thông báo nghiêm trọng
Điều kiện hậuGiới hạn hạn ngạch được cấu hình; tải lên được kiểm tra theo hạn ngạch
FR liên quanFR-017

4.18 UC-17: Cấu hình Chính sách Lưu trữ

Khía cạnhMô tả
ActorQuản trị viên
Điều kiện tiên quyếtAdmin đã đăng nhập; admin có vai trò admin hệ thống
Lưu trình Chính1. Admin điều hướng đến cài đặt Chính sách Lưu trữ
2. Admin chọn hoặc tạo chính sách cho danh mục (RESUME, AVATAR, v.v.)
3. Admin cấu hình: mime_types được phép, max_file_size, retention_period, encryption
4. Client gửi PUT /files/policies với cấu hình chính sách
5. Hệ thống kiểm tra ủy quyền của admin
6. Hệ thống lưu chính sách trong bảng sys_storage_policies
7. Chính sách có hiệu lực cho các tải lên mới trong danh mục đó
Lưu trình Thay thế5a. Admin không được ủy quyền → Hệ thống trả về 403 Forbidden
7a. Tệp tin hiện tại → Giữ nguyên cài đặt chính sách ban đầu
Điều kiện hậuChính sách lưu trữ được cấu hình; tải lên mới được kiểm tra theo chính sách
FR liên quanFR-018

4.19 UC-05 (Mở rộng): Tải lên CV/Hồ sơ

Khía cạnhMô tả
ActorNgười dùng đã xác thực (Ứng viên)
Điều kiện tiên quyếtNgười dùng đã đăng nhập; người dùng có token phiên hợp lệ
Lưu trình Chính1. Người dùng điều hướng đến trang tải lên CV/Hồ sơ
2. Người dùng chọn tệp tin CV (PDF, DOC, DOCX) với kích thước tối đa 10MB
3. Client gửi yêu cầu tải lên với original_name, mime_type, category=RESUME
4. Hệ thống kiểm tra loại tệp tin được phép (PDF, DOC, DOCX) và kích thước <= 10MB
5. Hệ thống kiểm tra tệp tin RESUME đang hoạt động hiện có cho người dùng này
6a. Nếu tìm thấy CV hiện có: Hệ thống đặt trạng thái tệp tin cũ thành REPLACED
6b. Nếu không có CV hiện có: Hệ thống chuyển sang bước 7
7. Hệ thống lưu tệp tin vào local filesystem và tạo bản ghi tệp tin với trạng thái TEMP
8. Server lưu tệp tin vào local filesystem
9. Client xác nhận hoàn tất tải lên qua POST /files/confirm
10.
11. Hệ thống trả về bản ghi tệp tin với file_id
Lưu trình Thay thế4a. Loại tệp tin không hợp lệ → Hệ thống trả về 400 "Chỉ cho phép tệp tin PDF, DOC, DOCX"
4b. Tệp tin quá lớn (>10MB) → Hệ thống trả về 413 "Kích thước tệp tin vượt quá giới hạn 10MB"
5a. Lưu filesystem thất bại → Client có thể thử lại
9a. Xác nhận không được nhận trong vòng 24 giờ → Dọn dẹp tệp tin tạm xóa bản ghi
Điều kiện hậuCV đã lưu trên filesystem trong thư mục RESUME của người dùng; metadata tệp tin được lưu với trạng thái ACTIVE; CV trước đó (nếu có) được đánh dấu là REPLACED; CV có thể truy cập qua URL tải xuống
FR liên quanFR-007, FR-001

Sơ đồ Hoạt động

Sơ đồ Hoạt động Tải lên CV
Hình 10: Sơ đồ Hoạt động Tải lên CV/Hồ sơ

Sơ đồ Tuần tự

Sơ đồ Tuần tự Tải lên CV
Hình 11: Sơ đồ Tuần tự Tải lên CV/Hồ sơ

5. Yêu cầu Phi chức năng

Mã Yêu cầu Danh mục Yêu cầu Mục tiêu
NFR-001 Hiệu suất Thời gian phản hồi tải lên tệp tin < 2000ms (p95) cho tệp tin ≤ 10MB
NFR-002 Bảo mật Giới hạn kích thước tải lên Theo danh mục: RESUME 10MB, AVATAR 5MB, OTHER 10MB
NFR-003 Khả dụng Uptime dịch vụ tệp tin 99.9%
NFR-004 Khả năng mở rộng Tải lên đồng thời 100+ tải lên đồng thời
NFR-005 Lưu trữ Kích thước tệp tin tối đa theo danh mục RESUME: 10MB, AVATAR: 5MB, OTHER: 10MB
NFR-006 Bảo trì Tần suất dọn dẹp tệp tin tạm Mỗi 1 giờ (tệp tin cũ hơn 24h)
NFR-007 Hiệu suất Thời gian phản hồi tìm kiếm < 1000ms (p95) cho tìm kiếm toàn văn
NFR-008 Hiệu suất Thời gian phản hồi tải lên hàng loạt < 2000ms để tạo multipart upload (tối đa 20 tệp tin)
NFR-009 Bảo mật Độ trễ kiểm tra kiểm soát truy cập < 100ms (p95) mỗi yêu cầu
NFR-010 Tuân thủ Thời gian lưu trữ nhật ký truy cập 90 ngày (có thể cấu hình)
NFR-011 Lưu trữ Độ chính xác theo dõi sử dụng lưu trữ +- 1% so với sử dụng thực tế

6. Ma trận Truy xuất Nguồn gốc Yêu cầu

Mã Yêu cầu Yêu cầu Trường hợp Sử dụng Bảng CSDL Endpoint API
FR-001Tải lên Tệp tinUC-05sys_filesPOST /files/upload (multipart)
FR-002Tải xuống Tệp tinUC-06sys_filesGET /files/:id/download
FR-003Liệt kê Tệp tinUC-02sys_filesGET /files
FR-004Xóa Tệp tinUC-09sys_filesDELETE /files/:id
FR-005Kiểm soát Truy cập Tệp tinUC-11sys_files, sys_file_permissions (join auth_users, auth_members)Tất cả endpoint tệp tin (middleware)
FR-006Dọn dẹp Tệp tin Tạm-sys_filesCron job (nội bộ)
FR-007Tải lên CV/Hồ sơUC-05 (mở rộng)sys_filesPOST /files/upload (multipart)
FR-008Tạo Thư mụcUC-01sys_filesPOST /files/folders
FR-009Tìm kiếm Tệp tin/Thư mụcUC-03sys_filesGET /files/search
FR-010Đổi tên Tệp tin/Thư mụcUC-04sys_filesPATCH /files/:id
FR-011Tải lên Nhiều Tệp tinUC-07sys_filesPOST /files/batch
FR-012Sao chép Tệp tinUC-08sys_filesPOST /files/:id/copy
FR-013Di chuyển Tệp tinUC-10sys_filesPOST /files/:id/move
FR-014Quản lý QuyềnUC-13sys_file_permissionsPUT /files/:id/permissions
FR-015Ghi nhật ký Lịch sử Truy cậpUC-12OpenSearch (qua module LOG)RabbitMQ (bất đồng bộ)
FR-016Theo dõi Sử dụng Lưu trữUC-14sys_storage_usageGET /files/storage-usage
FR-017Quản lý Hạn ngạch Lưu trữUC-16sys_storage_quotasPUT /files/quotas
FR-018Cấu hình Chính sách Lưu trữUC-17sys_storage_policiesPUT /files/policies