Chuyển tới nội dung chính

🔄 Quy chuẩn State Machine & Domain Events

Tài liệu này định nghĩa các chuỗi chuyển đổi trạng thái bắt buộc (Canonical State Machines) và danh mục các sự kiện miền (Domain Events) áp dụng cho mọi module trong LMS.


1. Danh mục Máy Trạng thái Chuẩn (Canonical State Machines)

Khi xây dựng logic nghiệp vụ, lập trình viên BẮT BUỘC tuân thủ đúng các chuỗi chuyển đổi trạng thái sau, không tự ý thêm các trạng thái ngoài luồng:

  • Lead (CRM): newcontactedappointmentconsultedinterestedregistered (hoặc lost).
  • Lớp học (Class): draftopen_enrollmentscheduledrunningcompletedarchived.
  • Buổi học (Session): scheduledin_progresscompleted (hoặc cancelled / rescheduled).
  • Ghi danh (Enrollment): pendingactivecompleted (hoặc suspended / transferred / dropped).
  • Hợp đồng (Contract): draftpending_signaturesignedactivecompleted (hoặc terminated).
  • Hóa đơn (Invoice): draftsentpartially_paidpaid (hoặc overdue / cancelled).
  • Bài tập (Homework): draftpublishedsubmittedgradedclosed.
  • Đề thi (Exam): draftpublishedavailablein_progresssubmittedgradedclosed.
  • Chứng chỉ (Certificate): eligibleapprovedgeneratedissued (hoặc revoked).

2. Event-Driven Architecture (Tự động hóa theo Sự kiện)

Mọi hành động kích hoạt liên module PHẢI được triển khai dưới dạng Laravel Events & Listeners, tuyệt đối không viết mã lồng chéo (hardcode) trực tiếp trong Controller hoặc Service:

Mẫu Khai báo Event & Listener Chuẩn

// Phát sự kiện trong Service khi thanh toán hóa đơn
event(new InvoicePaidEvent(invoice, payment));
// Listener lắng nghe để kích hoạt ghi danh
namespace Modules\Academic\App\Listeners;

use Modules\Finance\App\Events\InvoicePaidEvent;

class ActivateEnrollmentOnInvoicePaid
{
public function handle(InvoicePaidEvent $event): void
{
invoice = event->invoice;
if ($invoice->enrollment_id) {
enrollment = invoice->enrollment;
$enrollment->update(['status' => 'active']);
}
}
}

🔗 Xem thêm