5.Git Workflow & Pull Request
5.1. Mục tiêu chương
Chương này quy định cáchchuẩn quản lý cấu trúc databasecommit và cácquy thaytrình đổimerge schemacode nhằm:
-
Đảm bảo
tínhlịchổnsửđịnhthaycủađổidữrõliệuràng,hệdễthốngtruy vết -
TránhGiảm xung độtschemagiữa cácmodule và các đơn vịnhóm phát triển -
Đảm bảo
khảchấtnănglượngtriểncodekhaitrướctựkhiđộngđưaquavàocácnhánhmôi trườngchính -
KiểmChuẩnsoáthóalịchquysửtrìnhthayphátđổitriểndatabasegiữa Core Team và Partner
5.2. Khái niệm / phạm vi áp dụng
Quy định này áp dụng cho:
-
Toàn bộ database của hệ thống Core Team và Partner TeamTất cả
các thay đổi liên quan đến:Bảng dữ liệuCột dữ liệuConstraintIndexTrigger
Hệ thống phân loại bảng dữ liệu thành hai nhóm:
1. Core tables (dùng chung toàn hệ thống)
Bao gồm các bảng:

app_usertheme_configfeature_management
Đây là các bảng dữ liệu lõi, được dùng chung cho:
Xác thựcPhân quyềnCấu hình hệ thống
2. Module tables
Bao gồm:

Các bảng thuộc từng module riêng
dựNằm trong phạm vi nghiệp vụrepository củamodule
Ví dụ:
planningdocumenttasknotification
5.3. Quy định chính
5.3.1. Quy định với Core tables
Partner không được phép:
Thay đổi cấu trúc bảngThêm cộtXóa cộtĐổi kiểu dữ liệuSửa constraintSửa indexSửa trigger
Mọi thay đổi liên quan đến core tables phải thông qua:
DB Core Change Request -> sử dụng jira/… hoặc các phần mềm quản lý công việc nội bộ

Và do Core Team thực hiện.
5.3.2. Quy định với Module tables
Partner được phép:
Tạo bảng mới cho moduleThêm cộtSửa cấu trúc bảng module
Nhưng phải tuân thủ:
Không ảnh hưởng core tablesCó migration scriptCó mô tả rõ trong Pull RequestĐược Core Team review
5.3.3. Migration bắt buộc
Mọi thay đổi database phải tuân thủ các nguyên tắc sau:
Không sửa trực tiếp database productionKhông chỉnh sửa thủ công trên DB stagingTất cả thay đổi phải qua migration scriptMigration phải được commit vào source code
Công cụ sử dụng:
Flyway hoặc Liquibase
Format migration
Tên file migration:
V<timestamp>__<description>.sql
Ví dụ:
V20260209__create_planning_table.sql
V20260210__add_priority_to_planning.sql
5.4. Cách thực hiện / quy trình
Trường hợp 1: Thêm hoặc sửa bảng trong module
Bước 1: Cập nhật entity trong:
modules/<module>/entity/**
Bước 2: Tạo migration script:
V<timestamp>__<description>.sql
Bước 3: Commit:
EntityMigration script
Bước 4: Tạo Pull Request
Bước 5: Core Team review:
Migration hợp lệKhông ảnh hưởng core tables
Bước 6: Merge vào develop
Trường hợp 2: Thay đổi core tables
Bước 1: Tạo ticket:
[DB CORE CHANGE REQUEST] <mô tả thay đổi>

Bước 2: Cung cấp thông tin:
Bảng bị ảnh hưởngCột thay đổiKiểu dữ liệuMigration script đề xuấtLý do thay đổi
Bước 3: Core Team review
Bước 4: Nếu được duyệt:
Core Team thực hiện migration
Merge vào develop
5.5. Ví dụ minh họa
Trường hợp hợp lệ
Partner thêm bảng mới:
CREATE TABLE PLANNING (
ID BIGINT PRIMARY KEY,
NAME VARCHAR(255),
DESCRIPTION VARCHAR(1000)
);
→ Thuộc module table → được phép.
Trường hợp không hợp lệ
Partner chạy trực tiếp trên production:
ALTER TABLE USER_ACCOUNT ADD PHONE VARCHAR(20);
→ Sai quy định vì:
Sửa core tableSửa trực tiếp DB productionKhông có migration
Trường hợp cần xin phép
Partner muốn:
ALTER TABLE ROLE ADD DESCRIPTION VARCHAR(255);
→ Đây là core table.
Phải tạo: trên phần mềm quản lý công việc nội bộ hoặc phần mềm nghiệp vụ tương đương
[DB CORE CHANGE REQUEST]
5.6. Checklist áp dụng
Trước khi commit hoặc tạo PR:
Có thay đổi database không?Nếu có → phải có migration scriptCó sửa core table không?Nếu có → phải tạo DB Core Change RequestMigration có đúng format tên file không?Không sửa trực tiếp DB productionMigration đã được commit vào source code
5.7. Quy định thay đổi cấu trúc dữ liệu (Entity & Database)
5.7.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 moduleNgăn xung đột schema khi nhiều đơn vị cùng phát triểnBảo vệ các field và bảng dữ liệu chuẩn của hệ thống
4.7.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ốngTất cả các bảng databaseán-
Core Team và Partner Team
-
Mọi
thaycommitđổivàliênPullquanRequestđến:(PR)
Các
Quy loạitrình thayphát đổitriển cầntuân kiểm soáttheo:
-
ThêmChuẩnfieldformatmớicommit -
lượcXóaChiếnfield Sửa fieldĐổi kiểu dữ liệuThay đổi quan hệ entityThêm/xóa bảng databasebranch
Điều kiện merge bắt buộc
5.7.3. Quy định chính
5.7.3.1. KhôngFormat được tự ý thay đổi các field chuẩncommit
CácTất fieldcả chuẩncommit hệphải thống:theo format:
<type>: <description>
Trong đó:
-
id<type>: loại thay đổi -
<description>:created_atmô - tả
ngắncreated_bygọn - nội
dungupdated_atthay updated_bydeleted / statustenant_id (nếu có)
đổi
QuyVí địnhdụ bắtcommit buộc
hợp lệ
Khôngfeat: được:add planning API
- validate file upload
Xóarefactor:fieldoptimizechuẩn
planning service - update API guideline
Đổitest:kiểuadddữunit test for planning servicechore: update dependency versions
Type hợp lệ
Type
Ý nghĩa
feat
Thêm chức năng mới
fix
Sửa lỗi
refactor
Tối ưu, không đổi logic
docs
Cập nhật tài liệu
Đổi tên field
testThêm hoặc sửa test
chore
Thay đổi
ýcấunghĩahình,nghiệpbuild,vụ của field
dependencyCácfieldnày được coi là system fields và được dùng chung cho:AuditLoggingMulti-tenantPhân quyềnTích hợp hệ thống
5.
7.3.2.ThêmBranchfield mới trong modulestrategyPartnerHệchỉthốngđượcsửphépdụngthêmmôfieldhìnhkhi:branch chuẩn:Branch
Mục đích
main
Bản stable, dùng cho production
develop
Bản tích hợp, nơi merge các feature
feature/*
Phát triển chức năng mới
fix/*
Sửa lỗi
Quy tắc làm việc với branch
-
PhụcKhôngvụcommitnghiệptrựcvụtiếpcủavàomodulemain -
Không
trùngcommitvớitrựcdữtiếpliệuvàocoredevelop -
KhôngMọipháthayvỡđổicấuphảitrúc hiện tại Có migration scriptCó mô tả trongqua Pull Request-
ĐượcBranchCorephảiTeamđượcreviewđặt tên đúng quy tắc
Ví dụ tên branch hợp lệ
feature/planning-create-api
feature/document-upload
fix/login-null-pointer
fix/planning-date-validation
5.
Request7.3.3.CácĐiềuthaykiệnđổimergebắtPullbuộc xin phép Core TeamCácPullthayRequestđổi sau khôngchỉ đượctựmergeýkhithựcđáphiện:ứng đầy đủ các điều kiện:-
ĐổiBuildkiểuthànhdữ liệu fieldcông
XóaKhôngfieldsửa:
common/** userrolepermissiontenantaudit
fix:
docs:
config/**
ThêmCó fieldreview liêntừ quan:
Tất cả các trường hợp trên phải qua:
Data Model Change Request
Team
5.7.4. Cách thực hiện / quy trình
TrườngQuy hợptrình 1:phát Thêmtriển fieldtính trong modulenăng
Bước 1: CậpTạo nhậtbranch entitytừ trong:develop
modules/<module>/entity/**git checkout develop
git pull
git checkout -b feature/planning-create-api
Bước 2: TạoThực migrationhiện script:commit theo chuẩn
V<timestamp>__add_<field>_to_<table>.sqlgit commit -m "feat: add planning create API"
Bước 3: Push branch lên remote
git push origin feature/planning-create-api
Bước 4: Tạo Pull Request vào develop
Bước 5: Core Team review
Bước 6: Nếu đạt yêu cầu → merge vào develop
Quy trình sửa lỗi
Bước 1: Tạo branch fix
git checkout develop
git checkout -b fix/planning-null-error
Bước 2: Commit
git commit -m "fix: handle null planning name"
Bước 3: Tạo Pull Request, trong PR phảivà có:chờ review
- Ví dụ minh họa
Trường hợp commit sai
Mô tả field mới
Lý do nghiệp vụMigration script
5.5.
Sai
Bước 4: Core Team review:vì:
-
Không
trùngtheocoreformatdatachuẩn -
Không
phácóvỡ hệ thốngtype
BướcTrường 5:hợp Mergecommit vàođúng
fix: handle null planning name

Trường hợp 2:merge Thay đổi field hoặc quan hệ entitysai
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] <mô tả thay đổi>

Bước 2: Cung cấp thông tin:Partner:
-
EntityCommitbịtrựcảnhtiếphưởngvào develop -
FieldKhôngthaytạođổiPR -
KiểuKhôngdữcóliệu cũ và mới Migration scriptLý do thay đổireview
Bước 3: Core Team review:
Đánh giá ảnh hưởng hệ thốngKiểm tra backward compatibility
Bước 4: Nếu được duyệt:
Core Team thực hiện thay đổiMerge vào develop
5.7.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;
→ ĐượcVi phép.phạm quy trình.
Trường hợp khôngmerge hợp lệđúng
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óaTạofieldbranchstatusfeature/planning-api -
ĐổiCommittêntheodescription → detailchuẩn -
ThêmTạoquanPRhệvàovới bảng user_accountdevelop
Core Team review
Build pass
Merge

5.7.6. Checklist áp dụng
Trước khi commit hoặc tạo PR:Pull Request:
-
CóCommitthayđúngđổiformatfield<type>:chuẩn<description>không? -
Branch đúng quy tắc feature/* hoặc fix/*
-
Không commit trực tiếp vào main hoặc develop
-
Build thành công
-
Không sửa:
-
Nếucommon/**có -
phảiconfig/**
tạo -
Modelshared
Change Requestentity -
CóPRđổiđãkiểu dữ liệu field không? Nếu có → phải xin phépđược Core Team
reviewCó migration script chưa?Field mới có trùng dữ liệu core không?PR đã mô tả rõ thay đổi chưa?