private async Task <dynamic> AttachForecast(Activity activity)
        {
            Forecast forecast = null;

            if (activity.MeanLocation != null)
            {
                forecast = await darkSkyApi.GetWeatherInTime(activity.MeanLocation[0], activity.MeanLocation[1], activity.MeanDate.ToUnixTimeSeconds());
            }
            return(new { Activity = activity, Forecast = forecast });
        }
        public async Task <Activity> RegisterActivity(long id)
        {
            var activity = await stravaApi.GetActivity(id);

            if (activity.MeanLocation == null)
            {
                throw new HttpException(HttpStatusCode.BadRequest, $"Activity '{id}' not found or not public");
            }

            var token = db.AccessTokens.Where(t => t.UserId == activity.Athlete.Id).FirstOrDefault();

            logger.LogInformation($"User: {token}");
            if (token == null)
            {
                throw new HttpException(HttpStatusCode.BadRequest, $"Provided athlete '{activity.Athlete.Id}' is not registered");
            }

            var forecast = await darkSkyApi.GetWeatherInTime(activity.MeanLocation[0], activity.MeanLocation[1], activity.MeanDate.ToUnixTimeSeconds());

            int temperature = (int)Math.Round(forecast.Currently.Temperature);

            logger.LogInformation($"Weather: {forecast.BestHourlyMatch.Summary}");
            return(await stravaApi.SetActivityName(activity.Id, $"{activity.Name} ({temperature}°C {forecast.BestHourlyMatch.Summary})", token.Token));
        }