public OperationResult InitStatusChange()

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);
        }