Báo cáo chuyển đổi warehouse-service

batch · batch/delete · api

DELETE/api/client/page/batches/{id}

Vòng
1
Cổng G1–G6
PENDING_SONAR
Bước
sonar-check
Nhánh đích
feat/thongpd/migrate-batch2

Phân tích luồng sau chuyển — batch/delete — vòng 1

logic-reviewer viết dựa trên code đã implement (không phải thiết kế trong spec), đối chiếu với code cũ. Đường dẫn mới tính từ src/main/java/com/softdreams/easypos/warehouse/ của repo đích C:/Projects/warehouse-service-wt/ws1.

F-01 Xoá một lô

  • Điểm vào: cũ easyposbackend1:src/main/java/vn/softdreams/easypos/web/rest/BatchesManagementResource.java:54 → mới presentation/web/batch/BatchController.java:82
  • Quy tắc: R-01, R-02, R-03, R-04, R-05, R-06

Sơ đồ luồng mới (theo code thực tế)

sequenceDiagram
    participant C as Client
    participant BC as BatchController.delete
    participant MS as BatchManagementService.delete (@Transactional)
    participant BR as BatchRelationalRepository.deleteWithoutDetails (translate)
    participant BW as BatchWriter.deleteWithoutDetails
    participant DB as MSSQL
    C->>BC: DELETE /api/client/page/batches/{id} (Integer, sai kiểu → 400 starter)
    BC->>MS: delete(id)
    MS->>BR: deleteWithoutDetails(id)
    BR->>BW: deleteWithoutDetails(id)
    BW->>DB: DELETE b FROM batches b WHERE b.id = :id AND NOT EXISTS (batches_detail bd.batch_id = b.id)
    DB-->>BW: số dòng (lỗi SQL → PersistenceException/DataAccessException → SystemException EXCEPTION_ERROR 500)
    BW-->>MS: n
    MS-->>BC: n = 0 → BadRequestException LOT_HAS_TRANSACTIONS_CANNOT_DELETE (400, rollback) · n > 0 → n
    BC-->>C: 200 BaseResponseDTO.ok(n, DELETE_BATCHES_SUCCESS)

Đối chiếu từng bước

# Luồng cũ (repo:path:dòng) Luồng mới (path:dòng) Kết luận
1 Interceptor kiểm gói dịch vụ (LF-21) — KHÁC có chủ đích (D-05)
2 @PathVariable Integer id, sai kiểu → 400 body rỗng (BatchesManagementResource.java:55, LF-03) BatchController.java:84, sai kiểu → 400 theo starter KHÁC có chủ đích (D-02)
3 Không validate, không lấy user/công ty (BatchesManagementResource.java:56; BatchesManagementServiceImpl.java:349-350) BatchController.java:85-86; BatchManagementService.java:88-89 không dùng CurrentUserPort KHỚP (D-01 GIỮ)
4 Mở transaction (BatchesManagementServiceImpl.java:55-57, @Transactional cấp class) BatchManagementService.java:87-88 @Transactional (không readOnly) KHỚP
5 Native DELETE … NOT EXISTS batches_detail (BatchesRepository.java:68-77) BatchWriter.java:33-39,64-66 qua BatchRelationalRepository.java:144-146 KHỚP (D-01, D-06 GIỮ)
6 0 dòng → 400 LOT_HAS_TRANSACTIONS_CANNOT_DELETE (BatchesManagementServiceImpl.java:351-353) BatchManagementService.java:90-92 KHỚP (D-03 GIỮ)
7 Lỗi SQL → 417 EXCEPTION_ERROR (LF-13) BatchRelationalRepository.java:159-165 → 500 EXCEPTION_ERROR KHÁC có chủ đích (D-04)
8 200 BaseResultDTO(SUCCESS, DELETE_BATCHES_SUCCESS, true, n) (BatchesManagementServiceImpl.java:355) BatchController.java:85-86 ok(n, DELETE_BATCHES_SUCCESS) KHÁC có chủ đích (D-02 — chỉ định dạng body; mã, data giữ)

Dữ liệu và side effect

Bảng / topic / cache Cũ (đọc/ghi, điều kiện) Mới (đọc/ghi, điều kiện) Ghi chú
batches DELETE theo id, không lọc com_id như cũ D-01
batches_detail đọc trong NOT EXISTS, mọi dòng có batch_id như cũ —
bảng khác có batch_id không kiểm không kiểm D-06
event / cache không không —

Transaction, khoá, idempotency, tenant

  • Ranh giới transaction: cũ BatchesManagementServiceImpl cấp class → mới BatchManagementService.delete; một lệnh ghi duy nhất.
  • Khoá / cập nhật nguyên tử: cả hai dựa vào một câu DELETE nguyên tử của DB; không đọc-sửa-ghi trong bộ nhớ.
  • Idempotency, thời điểm phát event: không có event; gọi lặp → lần 2 trả 400 như cũ.
  • Lọc comId: không lọc — giống cũ, theo D-01 (người cần chốt; vi phạm C-01 nếu SỬA).

Lệch so với luồng mới đã duyệt (spec mục 6)

không (mới thêm lớp BatchWriter sau BatchRelationalRepository, đúng spec mục 5).

Dev cần chú ý khi review

Vị trí Vì sao
infrastructure/relational/batch/adapter/BatchWriter.java:33-39 Câu DELETE cú pháp T-SQL (DELETE b FROM batches b), không lọc com_id (D-01) — chỉ test bằng mock, chưa chạy MSSQL thật (K-13)
application/batch/BatchManagementService.java:88-93 Nhánh 0 dòng gộp cả "không tồn tại" và "có chi tiết" (D-03)
infrastructure/relational/batch/adapter/BatchRelationalRepository.java:144-146 Lỗi FK (nếu DB có) đi qua translate → 500 EXCEPTION_ERROR (D-04, D-06)

Nguồn của trang này

  • Phân tích luồng migrations/batch/delete/verify/round-1/flow-analysis.md vòng 1 · sha256 7894b463c792

v1 dựng 2026-11-09 14:46 · base commit đích 661efe9b8c