2.2 KiB
2.2 KiB
Document Numbering Refactoring - 2025-12-18
Overview
Refactored the DocumentNumberingService in the backend to split responsibilities into dedicated services (CounterService, ReservationService) and updated the DocumentNumberCounter entity to match the v1.7.0 schema.
Changes
1. Module Restructuring
- Services: Created
CounterServiceandReservationService. - DTOs: Created
CounterKeyDto,ReserveNumberDto,ConfirmReservationDto. - Controllers: Updated
DocumentNumberingControllerandDocumentNumberingAdminController.
2. Entity Updates
DocumentNumberCounter:- Made
correspondenceTypeId,recipientOrganizationId, etc., non-nullable primary keys (defaulting to 0). - Added
resetScopewith length 20.
- Made
DocumentNumberReservation: Created for two-phase commit reservation logic.
3. Service Logic
CounterService:- Handles atomic counter increment.
- Implements optimistic locking with retry logic using
OptimisticLockVersionMismatchError.
ReservationService:- Manages
DocumentNumberReservationentity (Reserve -> Confirm/Cancel). - Removes unused
userIdfrom confirmation/cancellation logic.
- Manages
DocumentNumberingService:- Delegates counter logic to
CounterService. - Delegates reservation logic to
ReservationService. - Corrected property mapping (e.g.,
originatorOrganizationId). - Fixed
resolveDisciplineCodeto usedisciplineCodecolumn.
- Delegates counter logic to
Verification Results
Automated Tests
Ran unit tests for DocumentNumberingService:
npm test modules/document-numbering/document-numbering.service.spec.ts
Result:
PASS src/modules/document-numbering/document-numbering.service.spec.ts
DocumentNumberingService
√ should be defined (13 ms)
generateNextNumber
√ should generate a new number successfully (6 ms)
√ should throw error when increment fails (12 ms)
Test Suites: 1 passed, 1 total
Tests: 3 passed, 3 total
Manual Verification Steps
- Generate Number: Call
POST /document-numbering/preview(mapped topreviewNumber). - Admin Ops: Verified
DocumentNumberingAdminControllerstructure updates.