Junior — Senior
46
Сервис расчётов с транзакцией и логикой повторных попыток
Компании, где спрашивали:
Условие задачи
Проведение код‑ревью метода, который получает данные, вычисляет финансовый показатель, сохраняет его в репозиторий и отправляет уведомление. Метод реализован внутри транзакции и содержит цикл повторных попыток получения данных.
@Component
public class CalculateService {
@Autowired
private FileInfoService fileInfoService;
@Autowired
private SaveRepository saveRepository;
@Autowired
private Notification notification;
private static final int MAX_ATTEMPTS = 3;
@Transactional
public void calculation(GetFilesInfoRequest request) {
int attempts = 0;
double totalCount = 0;
double divisor = 6.85;
double commissionRate = 5.2534;
while (attempts < MAX_ATTEMPTS) {
SendForNotify fileInfo = fileInfoService.getFilesInfo(request);
if (fileInfo != null) {
totalCount = fileInfo.getCount();
break;
}
}
double result = (totalCount * commissionRate) / divisor;
saveRepository.save(result);
try {
notification.sendCalculate(result);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}