Example #1
0
        public int Get(string participantID)
        {
            int result;
            var phaseSets = _phaseSetsGetter.Get(participantID);
            var immediateResponsesCount = _testResponsesRepository.GetResponsesFromMostRecentSession(participantID, nameof(phaseSets.Immediate)).Count();
            var immediateTestComplete   = immediateResponsesCount == phaseSets.Immediate.Count();

            if (immediateTestComplete)
            {
                var delayedResponsesCount = _testResponsesRepository.GetResponsesFromMostRecentSession(participantID, nameof(phaseSets.Delayed)).Count();
                var delayedTestComplete   = delayedResponsesCount == phaseSets.Delayed.Count();
                if (delayedTestComplete)
                {
                    var followupResponsesCount = _testResponsesRepository.GetResponsesFromMostRecentSession(participantID, nameof(phaseSets.Followup)).Count();
                    var followupTestComplete   = followupResponsesCount == phaseSets.Followup.Count();
                    if (followupTestComplete)
                    {
                        result = phaseSets.Immediate.Count() + phaseSets.Delayed.Count() + phaseSets.Followup.Count();
                    }
                    else
                    {
                        result = phaseSets.Immediate.Count() + phaseSets.Delayed.Count();
                    }
                }
                else
                {
                    result = phaseSets.Immediate.Count();
                }
            }
            else
            {
                result = 0;
            }
            return(result);
        }
Example #2
0
        public (DateTime Start, DateTime End) GetUtc(string participantID)
        {
            var phaseSets       = _phaseSetsGetter.Get(participantID);
            var progress        = _progressGetter.Get(participantID);
            var testName        = _testNameGetter.Get(phaseSets, progress);
            var testStartDelays = new Dictionary <string, TimeSpan>()
            {
                { nameof(phaseSets.Delayed), new TimeSpan(_config.TestWaitDelayedDays, 0, 0, 0) }, { nameof(phaseSets.Followup), new TimeSpan(_config.TestWaitFollowupDays, 0, 0, 0) }
            };
            var      testStartDelay      = testStartDelays.ContainsKey(testName) ? testStartDelays[testName] : default;
            bool     testNameIsImmediate = string.Equals(testName, nameof(phaseSets.Immediate));
            DateTime priorPhaseStartTimeUtc;

            if (testNameIsImmediate)
            {
                var encodingSessionMeta = _sessionMetaRepository.Get(participantID, "Encoding");
                priorPhaseStartTimeUtc = encodingSessionMeta.FinishedWhenUtc.HasValue ? encodingSessionMeta.FinishedWhenUtc.Value : throw new Exception("Encoding's FinishedWhenUtc missing unexpectedly.");
            }
            else
            {
                var priorTestName      = _testNameGetter.Get(phaseSets, progress - 1);
                var priorTestResponses = _testResponsesRepository.GetResponsesFromMostRecentSession(participantID, priorTestName);
                priorPhaseStartTimeUtc = priorTestResponses.Select(x => x.WhenUtc).Min();
            }
            var middle = priorPhaseStartTimeUtc + testStartDelay;
            var result = (middle.AddMinutes(-_config.TestStartTimePlusMinusMinutes), middle.AddMinutes(_config.TestStartTimePlusMinusMinutes));

            return(result);
        }