public async Task <IEnumerable <Point> > GetPointsByUserDataAsync(UserData data) { var duplicatedUserData = await _userDataRepository.GetDuplicatedUserDataOrDefault(data); IEnumerable <Point> points; if (duplicatedUserData != null) { if (!_memoryCache.TryGetValue(duplicatedUserData.UserDataId, out points)) { points = await _pointsRepository.GetPointsByUserData(duplicatedUserData); SavePointsToCache(duplicatedUserData, points); } } else { await _userDataRepository.CreateItem(data); points = CalculatePointsByUserData(data); await _pointsRepository.AddPointsRange(points); SavePointsToCache(data, points); } return(points); }