From c8dcebff2613839bdd27bb44bbfcc2417dfaab96 Mon Sep 17 00:00:00 2001 From: Christian Beutel <> Date: Fri, 28 Mar 2025 17:51:38 +0100 Subject: [PATCH] implements graceful error handling for sync --- db/integrations/komoot/komoot.go | 16 ++++++++++------ db/integrations/strava/strava.go | 30 ++++++++++++++++++------------ 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/db/integrations/komoot/komoot.go b/db/integrations/komoot/komoot.go index 0b34d714..97801f4d 100644 --- a/db/integrations/komoot/komoot.go +++ b/db/integrations/komoot/komoot.go @@ -65,7 +65,7 @@ func SyncKomoot(app core.App) error { warning := fmt.Sprintf("error fetching tours from komoot: %v\n", err) fmt.Print(warning) app.Logger().Warn(warning) - break + continue } hasNewTours, err = syncTrailWithTours(app, k, komootIntegration, userId, tours) @@ -73,7 +73,7 @@ func SyncKomoot(app core.App) error { warning := fmt.Sprintf("error syncing komoot tours with trails: %v\n", err) fmt.Print(warning) app.Logger().Warn(warning) - break + continue } page += 1 } @@ -186,19 +186,23 @@ func syncTrailWithTours(app core.App, k *KomootApi, i KomootIntegration, user st hasNewTours = true detailedTour, err := k.fetchDetailedTour(tour) if err != nil { - return hasNewTours, err + app.Logger().Warn(fmt.Sprintf("Unable to fetch details for tour '%s': %v", tour.Name, err)) + continue } gpx, err := generateTourGPX(detailedTour) if err != nil { - return hasNewTours, err + app.Logger().Warn(fmt.Sprintf("Unable to generate GPX for tour '%s': %v", tour.Name, err)) + continue } wpIds, err := createWaypointsFromTour(app, detailedTour, user) if err != nil { - return hasNewTours, err + app.Logger().Warn(fmt.Sprintf("Unable to create waypoints for tour '%s': %v", tour.Name, err)) + continue } err = createTrailFromTour(app, detailedTour, gpx, user, wpIds) if err != nil { - return hasNewTours, err + app.Logger().Warn(fmt.Sprintf("Unable to create trail for tour '%s': %v", tour.Name, err)) + continue } } diff --git a/db/integrations/strava/strava.go b/db/integrations/strava/strava.go index 806cd7f6..4b405ae0 100644 --- a/db/integrations/strava/strava.go +++ b/db/integrations/strava/strava.go @@ -91,20 +91,20 @@ func SyncStrava(app core.App) error { for hasNewRoutes { routes, err := fetchStravaRoutes(r.AccessToken, page) + page += 1 if err != nil { warning := fmt.Sprintf("error fetching routes from strava: %v\n", err) fmt.Print(warning) app.Logger().Warn(warning) - break + continue } hasNewRoutes, err = syncTrailsWithRoutes(app, r.AccessToken, userId, routes) if err != nil { warning := fmt.Sprintf("error syncing strava routes with trails: %v\n", err) fmt.Print(warning) app.Logger().Warn(warning) - break + continue } - page += 1 } } if stravaIntegration.Activities { @@ -112,20 +112,20 @@ func SyncStrava(app core.App) error { hasNewActivities := true for hasNewActivities { activities, err := fetchStravaActivities(r.AccessToken, page) + page += 1 if err != nil { warning := fmt.Sprintf("error fetching activities from strava: %v", err) fmt.Print(warning) app.Logger().Warn(warning) - break + continue } hasNewActivities, err = syncTrailsWithActivities(app, r.AccessToken, userId, activities) if err != nil { warning := fmt.Sprintf("error syncing strava activities with trails: %v", err) fmt.Print(warning) app.Logger().Warn(warning) - break + continue } - page += 1 } } } @@ -234,15 +234,18 @@ func syncTrailsWithRoutes(app core.App, accessToken string, user string, routes hasNewRoutes = true gpx, err := fetchRouteGPX(route, accessToken) if err != nil { - return hasNewRoutes, err + app.Logger().Warn(fmt.Sprintf("Unable to fetch GPX for route '%s': %v", route.Name, err)) + continue } wpIds, err := createWaypointsFromRoute(app, route, user) if err != nil { - return hasNewRoutes, err + app.Logger().Warn(fmt.Sprintf("Unable to create waypoints for route '%s': %v", route.Name, err)) + continue } err = createTrailFromRoute(app, route, gpx, user, wpIds) if err != nil { - return hasNewRoutes, err + app.Logger().Warn(fmt.Sprintf("Unable to create trail for route '%s': %v", route.Name, err)) + continue } } @@ -388,15 +391,18 @@ func syncTrailsWithActivities(app core.App, accessToken string, user string, act hasNewActivites = true detailedActivity, err := fetchDetailedActivity(activity, accessToken) if err != nil { - return hasNewActivites, err + app.Logger().Warn(fmt.Sprintf("Unable to fetch detailed activity '%s': %v", activity.Name, err)) + continue } gpx, err := generateActivityGPX(detailedActivity, accessToken) if err != nil { - return hasNewActivites, err + app.Logger().Warn(fmt.Sprintf("Unable to fetch GPX for activity '%s': %v", activity.Name, err)) + continue } err = createTrailFromActivity(app, detailedActivity, gpx, user) if err != nil { - return hasNewActivites, err + app.Logger().Warn(fmt.Sprintf("Unable to create trail from activity '%s': %v", activity.Name, err)) + continue } }