public async Task <GenericResponse <LolStatsResponse> > GetStats(string gameUsername) { // Get corresponding player GenericResponse <TUserGame> lolGame = await _userGameDataAccess.GetUserGame("lol", gameUsername); if (!lolGame.Success) { return(new GenericResponse <LolStatsResponse>($"{gameUsername} not found in the database", null)); } // First try to get stats from Site GenericResponse <LolStatsResponse> lolStats = await _lolDataAccess.GetStatsFromSite(gameUsername); if (lolStats.Success) { await _lolDataAccess.UpdateCache(lolStats.Result, lolGame.Result); return(new GenericResponse <LolStatsResponse>(lolStats.Result)); } else { lolStats = await _lolDataAccess.GetStatsFromCache(gameUsername); } // Response if (lolStats.Success) { return(new GenericResponse <LolStatsResponse>(lolStats.Result)); } else { return(new GenericResponse <LolStatsResponse>(lolStats.ErrorMessage, lolStats.Exception)); } }