private void persistUpdatedIssues(IssueStatistics statistics, List<DefaultIssue> updatedIssues, IssueMapper mapper, IssueChangeMapper changeMapper) {
if (updatedIssues.isEmpty()) {
return;
}
long now = system2.now();
updatedIssues.forEach(i -> {
IssueDto dto = IssueDto.toDtoForUpdate(i, now);
mapper.updateIfBeforeSelectedDate(dto);
statistics.updates++;
});
List<String> updatedIssueKeys = updatedIssues.stream().map(DefaultIssue::key).collect(toList(updatedIssues.size()));
List<IssueDto> conflictIssueKeys = mapper.selectByKeysIfNotUpdatedAt(updatedIssueKeys, now);
if (!conflictIssueKeys.isEmpty()) {
Map<String, DefaultIssue> issuesByKeys = updatedIssues.stream().collect(uniqueIndex(DefaultIssue::key, updatedIssues.size()));
conflictIssueKeys
.forEach(dbIssue -> {
DefaultIssue updatedIssue = issuesByKeys.get(dbIssue.getKey());
conflictResolver.resolve(updatedIssue, dbIssue, mapper);
statistics.merged++;
});
}
updatedIssues.forEach(i -> issueStorage.insertChanges(changeMapper, i));
}