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