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)