Bỏ qua, đến nội dung

@digiforce-nc/plugin-field-sequence

Plugin cung cấp kiểu field mã tự tăng — tự động sinh mã duy nhất theo pattern tùy chỉnh (ví dụ: INV-2024-0001), hỗ trợ pattern đa phần (string + integer với cron reset), đảm bảo an toàn đồng thời qua bảng sequences.

Plugin này làm gì?

Hãy hình dung: bạn cần mã đơn hàng DH-2024-00001, mã hóa đơn HD-00123, mã nhân viên NV-001... tự động tăng theo quy tắc riêng. Plugin này quản lý sequence counter an toàn đồng thời (concurrent-safe) thông qua bảng sequences riêng biệt, với pattern system linh hoạt cho phép kết hợp chuỗi cố định và số tự tăng có thể reset theo lịch cron.

Bốn nhiệm vụ chính

#Nhiệm vụChi tiết
1Pattern systemKết hợp phần tĩnh (string) và phần tự tăng (integer) trong một template
2Concurrent-safe counterBảng sequences đảm bảo không trùng mã khi nhiều request đồng thời
3Cron resetCounter tự reset theo lịch (hàng ngày, hàng tháng, hàng năm)
4Repair mechanismapp.on('repair') sửa counter khi dữ liệu không đồng bộ

Kiến trúc

Tổng quan

Luồng sinh mã khi tạo bản ghi

Pattern system

Pattern gồm nhiều phần, mỗi phần có type riêng:

TypeMô tảVí dụ
stringChuỗi cố định"DH-", "-"
integerSố tự tăng với padding00001, 00002, ...

Phần integer có thêm cấu hình:

Thuộc tínhMô tả
digitsSố chữ số (padding zeros) — ví dụ: 5 → 00001
startGiá trị bắt đầu (mặc định 1)
cycleBiểu thức cron để reset counter (ví dụ: 0 0 1 1 * = đầu năm)

Database: bảng sequences

CộtKiểuMô tả
idBIGINTPrimary key
collectionSTRINGTên collection chứa field
fieldSTRINGTên field sequence
keyINTEGERCounter hiện tại
lastGeneratedAtDATEThời điểm sinh mã gần nhất

Hooks

HookSự kiệnHành động
beforeSaveTạo bản ghi mớiSinh mã sequence, tăng counter
afterDestroyXóa fieldDọn dẹp row trong bảng sequences
app.on('repair')Sửa chữa hệ thốngĐồng bộ counter với giá trị max thực tế trong bảng

Concurrent safety

Plugin sử dụng bảng sequences thay vì tính MAX() từ dữ liệu — tránh race condition khi nhiều request tạo bản ghi đồng thời. Counter được tăng atomic trong một transaction.


Ví dụ sử dụng

Cấu hình field sequence

typescript
const orderCodeField = {
  name: 'orderCode',
  type: 'sequence',
  interface: 'sequence',
  patterns: [
    { type: 'string', options: { value: 'DH-' } },
    { type: 'integer', options: { digits: 5, start: 1, cycle: '0 0 1 1 *' } },
  ],
};

Mã tạo ra theo thời gian

Đầu năm 2024: DH-00001, DH-00002, ...
Đầu năm 2025: DH-00001 (reset), DH-00002, ...

Thành phần client

Thành phầnMô tả
SequenceFieldProviderProvider cung cấp context cho cấu hình pattern
SequenceFieldInterfaceĐịnh nghĩa interface cho field sequence

Dependencies

PackageVai trò
@digiforce-nc/serverServer framework — đăng ký hooks
@digiforce-nc/databaseDatabase ORM — field type + bảng sequences
@digiforce-nc/clientClient framework — đăng ký component

Mục lục chi tiết