feat(document): reject end date without RANGE precision (#678)
Add the second validateDateRange predicate mirroring chk_meta_date_end_only_for_range, so a direct API client that sets an end date without RANGE precision gets a clean 400 INVALID_DATE_RANGE instead of a 500 (AC6). Shares the code with the end-before-start branch. Also fix updateDocument_preservesStoredPrecision_whenDtoOmitsIt: its stored fixture (MONTH + end date) is a state the DB CHECK forbids, so the carried-over-state guard correctly rejects it. Switched to RANGE + end — the only DB-valid non-null-end combo — preserving the test's intent. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -486,6 +486,12 @@ public class DocumentService {
|
||||
throw DomainException.badRequest(ErrorCode.INVALID_DATE_RANGE,
|
||||
"meta_date_end must not be before meta_date");
|
||||
}
|
||||
// Mirrors chk_meta_date_end_only_for_range. API-only: the edit form clears the
|
||||
// end field off-RANGE, so this branch closes the same 500 class for direct clients.
|
||||
if (doc.getMetaDateEnd() != null && doc.getMetaDatePrecision() != DatePrecision.RANGE) {
|
||||
throw DomainException.badRequest(ErrorCode.INVALID_DATE_RANGE,
|
||||
"meta_date_end is only allowed when meta_date_precision is RANGE");
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
|
||||
Reference in New Issue
Block a user