Bỏ qua, đến nội dung

@digiforce-nc/plugin-async-task-manager ​

Plugin quản lý tác vụ nền (background jobs) — theo dõi tiến trình, hỗ trợ dừng giữa chừng, và tải file kết quả.

Plugin này làm gì? ​

Một số thao tác tốn thời gian (xuất Excel, import CSV, xử lý batch...) không thể chạy đồng bộ. Plugin cung cấp AsyncTaskManager — container quản lý tác vụ nền: khởi tạo, theo dõi tiến trình, dừng, và tải kết quả.

Ba nhiệm vụ chính ​

#Nhiệm vụChi tiết
1Quản lý lifecycleTạo task, chạy background, cập nhật progress, hoàn thành/thất bại
2Task type registryPlugin khác đăng ký task type (CommandTaskType) vào container
3API điều khiểnList tasks, get progress, stop task, download file kết quả

Kiến trúc ​

Luồng thực thi tác vụ nền ​

Task Type Registry ​

Task TypePlugin nguồnMô tả
export-xlsxplugin-exportXuất collection ra Excel
import-csvplugin-importNhập dữ liệu từ CSV
bulk-updateplugin-bulk-editCập nhật hàng loạt

Database - collection asyncTasks ​

FieldMô tả
taskTypeLoại task (export-xlsx, import-csv...)
statuspending, running, completed, failed, cancelled
progressTiến trình 0-100 (%)
resultFileĐường dẫn file kết quả (nếu có)
errorMessageThông báo lỗi (nếu failed)

API endpoints ​

EndpointMô tả
asyncTasks:listDanh sách tasks của user hiện tại
asyncTasks:getChi tiết task (status, progress)
asyncTasks:stopDừng task đang chạy
asyncTasks:fetchFileTải file kết quả (stream)

Vòng đời plugin ​

ACL - Phân quyền ​

QuyềnĐối tượngMô tả
asyncTasks:*loggedInUser đã đăng nhập có thể tạo và xem tasks của mình

Ví dụ sử dụng API ​

Theo dõi tiến trình ​

typescript
const response = await agent.resource('asyncTasks').get({
  filterByTargetKey: taskId,
});
const { status, progress } = response.body.data;

Dừng task ​

typescript
await agent.resource('asyncTasks').stop({ filterByTargetKey: taskId });

Đăng ký task type (plugin developer) ​

typescript
class MyPlugin extends Plugin {
  async load() {
    const tm = this.app.pm.get('async-task-manager');
    tm.registerTaskType('my-task', {
      handler: async (task, params) => {
        for (let i = 0; i <= 100; i += 10) await task.updateProgress(i);
        return { resultFile: '/path/to/result.xlsx' };
      },
    });
  }
}

Thành phần client ​

Thành phầnMô tả
AsyncTaskManagerProviderContext provider quản lý task states
TaskProgressBarComponent hiển thị tiến trình
TaskListDanh sách tasks đang chạy/hoàn thành
TaskOriginRegistryRegistry để plugin client đăng ký UI cho task type

Dependencies ​

PackageVai trò
@digiforce-nc/serverServer framework — resource, streaming
@digiforce-nc/databaseDatabase ORM — collection definitions
@digiforce-nc/clientClient framework — UI components

Mục lục chi tiết ​