示例#1
0
        public async Task <int[]> RetrieveFranchises(ProgramDataSources source, string bearerToken, bool cache = true)
        {
            // note: using the default caching duration of 20 minutes
            var franchises = await _cache.GetOrAddAsync($"{_cacheKeyPrefix}{source.GetDescription()}", () => RequestFranchises(source, bearerToken));

            return(franchises);
        }
示例#2
0
        private async Task <int[]> RequestFranchises(ProgramDataSources source, string bearerToken)
        {
            var url             = BuildApiUrl(source);
            var responseMessage = await SendAsync(url, bearerToken);

            var json = await responseMessage.Content.ReadAsStringAsync();

            var results = System.Text.Json.JsonSerializer.Deserialize <int[]>(json);

            return(results);
        }
示例#3
0
        private string BuildApiUrl(ProgramDataSources source)
        {
            switch (source)
            {
            case ProgramDataSources.Salesforce:
            case ProgramDataSources.ClearCare:
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(source));
            }

            return($"{_programDataUrl}/v1/{source.GetDescription()}/franchises");
        }
示例#4
0
        private async Task <int[]> RetrieveFranchiseData(ProgramDataSources source)
        {
            try
            {
                var bearerToken = await _tokenService.RetrieveToken();

                var franchises = await _programDataService.RetrieveFranchises(source, bearerToken);

                return(franchises);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"An Exception occurred when trying to retrieve {source.GetDescription()} Franchise. StackTrace: {ex.StackTrace}");
                throw;
            }
        }
示例#5
0
        private async Task <T> CheckUserFranchiseAgainstFranchiseSource <T>(AzureActiveDirectoryUser user, ProgramDataSources source, T success, T fail)
        {
            var parsed = int.TryParse(user.FranchiseNumber, out var userFranchiseNumber);

            if (parsed)
            {
                var franchises = await RetrieveFranchiseData(source);

                if (franchises.Any(franchiseNumber => franchiseNumber == userFranchiseNumber))
                {
                    return(success);
                }
            }

            return(fail);
        }