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