in src/Services/Infection/Infection.WebApi/Services/InfectionService.cs [97:140]
public OperationResult InitStatusChange(string ownerToken, ChangeRequest changeRequest, out ChangeResponse changeResponse)
{
changeResponse = new ChangeResponse();
string errorMessage;
// Validate passed status
if (changeRequest?.StatusId == null || !contactDiscoveryDictionary.ContainsKey(changeRequest.StatusId.Value))
{
errorMessage = "Invalid status Id.";
logger.LogError(errorMessage);
return OperationResult.CreateInstance(StatusCodes.Status500InternalServerError, errorMessage);
}
// Generate new code and check it in DB
string medicalCode;
var attemptCount = 0;
var maxAttemptCount = 10;
bool isInserted;
do
{
medicalCode = GetMedicalCode(contactDiscoveryDictionary[changeRequest.StatusId.Value]);
var changeRequestDto = mapper.Map<StatusChangeRequest>(changeRequest);
isInserted = statusChangeRepository.TryCreateChangeRequest(medicalCode, changeRequestDto, ownerToken);
attemptCount++;
}
while (attemptCount < maxAttemptCount && !isInserted);
if (string.IsNullOrEmpty(medicalCode))
{
errorMessage = "Medical code has not been generated after all attempts.";
logger.LogError(errorMessage);
return OperationResult.CreateInstance(StatusCodes.Status500InternalServerError, errorMessage);
}
if (isInserted)
{
changeResponse.MedicalCode = medicalCode;
changeResponse.ExpirationDate = DateTime.UtcNow.AddHours(expirationPeriodInHours);
}
return OperationResult.CreateInstance(StatusCodes.Status200OK);
}