Пример #1
0
        private async Task CheckForNewActivity(Athlete athlete, List <Activity> activities)
        {
            var hasNoRecordedActivities = !athlete.LatestActivityId.HasValue;

            var hasUnrecordedActivity = athlete.LatestActivityId.HasValue && athlete.LatestActivityId.Value != activities.First().Id;

            if (hasNoRecordedActivities || hasUnrecordedActivity)
            {
                var latestActivity = activities.First();

                _logger.LogInformation($"Building message for {athlete.Name} now.");

                var message = await _messageFactory.NewActivityMessage(athlete, latestActivity);

                _logger.LogInformation($"Updating {athlete.Name} now.");

                athlete.LatestActivityId        = latestActivity.Id;
                athlete.ReminderCount           = 0;
                athlete.LastReminderDateTimeUtc = DateTime.UtcNow;

                await _athleteRepository.CreateOrUpdateAthlete(athlete);

                _logger.LogInformation($"Posting message for {athlete.Name} now.");

                await _slackService.PostSlackMessage(message);

                _logger.LogInformation($"Posted for {athlete.Name}.");
            }
            else
            {
                _logger.LogInformation($"No new activity for {athlete.Name}.");
            }
        }
Пример #2
0
        private async Task <StravaTokenSet> EnsureValidTokens(StravaTokenSet tokenSet, int athleteIdentifier)
        {
            if (tokenSet.ExpiresAt.ToUniversalTime() < DateTimeOffset.UtcNow.AddMinutes(5))
            {
                _logger.LogInformation("Token expiring; refreshing.");

                var athlete = await _athleteRepository.GetAthlete(athleteIdentifier) ?? new Athlete();

                var url = $"https://www.strava.com/api/v3/oauth/token?client_id={_stravaSettings.ClientId}&client_secret={_stravaSettings.ClientSecret}&grant_type=refresh_token&refresh_token={tokenSet.RefreshToken}";

                var request = new HttpRequestMessage(HttpMethod.Post, url);

                var response = await _client.SendAsync(request);

                if (response.IsSuccessStatusCode)
                {
                    var responseString = await response.Content.ReadAsStringAsync();

                    tokenSet = JsonConvert.DeserializeObject <StravaTokenSet>(responseString);

                    athlete.AccessToken  = tokenSet.AccessToken;
                    athlete.RefreshToken = tokenSet.RefreshToken;
                    athlete.ExpiresAt    = tokenSet.ExpiresAt;

                    _logger.LogInformation("Token refresh successful; updating saved athlete.");

                    await _athleteRepository.CreateOrUpdateAthlete(athlete);
                }
            }

            return(tokenSet);
        }