4. Logging & Audit trong Sequence 4.1. Mục tiêu chương Chương này quy định cách kiểm soát các thay đổi liên quan đến cấu trúc dữ liệu nhằm: Tránh mất dữ liệu hoặc lỗi hệ thống Đảm bảo tương thích giữa các module Ngăn xung đột schema khi nhiều đơn vị cùng phát triển Bảo vệ các field và bảng dữ liệu chuẩn của hệ thống 4.2. Khái niệm / phạm vi áp dụng Quy định này áp dụng cho: Tất cả các entity trong hệ thống Tất cả các bảng database Core Team và Partner Team Mọi thay đổi liên quan đến: Các loại thay đổi cần kiểm soát Thêm field mới Xóa field Sửa field Đổi kiểu dữ liệu Thay đổi quan hệ entity Thêm/xóa bảng database 4.3. Quy định chính 4.3.1. Không được tự ý thay đổi các field chuẩn Các field chuẩn hệ thống: id created_at created_by updated_at updated_by deleted / status tenant_id (nếu có) Quy định bắt buộc Không được: Xóa field chuẩn Đổi kiểu dữ liệu Đổi tên field Thay đổi ý nghĩa nghiệp vụ của field Các field này được coi là system fields và được dùng chung cho: Audit Logging Multi-tenant Phân quyền Tích hợp hệ thống 4.3.2. Thêm field mới trong module Partner chỉ được phép thêm field khi: Phục vụ nghiệp vụ của module Không trùng với dữ liệu core Không phá vỡ cấu trúc hiện tại Có migration script Có mô tả trong Pull Request Được Core Team review 4.3.3. Các thay đổi bắt buộc xin phép Core Team Các thay đổi sau không được tự ý thực hiện: Đổi kiểu dữ liệu field Xóa field Đổi tên field Thay đổi quan hệ entity Thêm field liên quan: user role permission tenant audit Tất cả các trường hợp trên phải qua: Data Model Change Request 4.4. Cách thực hiện / quy trình Trường hợp 1: Thêm field trong module Bước 1: Cập nhật entity trong: modules//entity/** Bước 2: Tạo migration script: V__add__to_.sql Bước 3: Tạo Pull Request, trong PR phải có: Mô tả field mới Lý do nghiệp vụ Migration script Bước 4: Core Team review: Không trùng core data Không phá vỡ hệ thống Bước 5: Merge vào develop Trường hợp 2: Thay đổi field hoặc quan hệ entity Bước 1: Tạo ticket: các phần mềm quản lý công việc liên quan (Jira / Redmine / YouTrack) hoặc nội bộ [DATA MODEL CHANGE REQUEST] Bước 2: Cung cấp thông tin: Entity bị ảnh hưởng Field thay đổi Kiểu dữ liệu cũ và mới Migration script Lý do thay đổi Bước 3: Core Team review: Đánh giá ảnh hưởng hệ thống Kiểm tra backward compatibility Bước 4: Nếu được duyệt: Core Team thực hiện thay đổi Merge vào develop 4.5. Ví dụ minh họa Trường hợp hợp lệ Partner thêm field vào entity module: @Column(name = "PRIORITY") private Integer priority; Và có migration: ALTER TABLE PLANNING ADD PRIORITY INT; → Được phép. Trường hợp không hợp lệ Partner sửa: @Column(name = "CREATED_AT") private String createdAt; → Đổi kiểu dữ liệu từ timestamp sang string. → Không được phép. Phải tạo: [DATA MODEL CHANGE REQUEST] Trường hợp cần xin phép Partner muốn: Xóa field status Đổi tên description → detail Thêm quan hệ với bảng user_account 4.6. Checklist áp dụng Trước khi commit hoặc tạo PR: Có thay đổi field chuẩn không? Nếu có → phải tạo Data Model Change Request Có đổi kiểu dữ liệu field không? Nếu có → phải xin phép Core Team Có migration script chưa? Field mới có trùng dữ liệu core không? PR đã mô tả rõ thay đổi chưa?