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