mirror of
https://github.com/sstent/FitTrack_GarminSync.git
synced 2026-01-26 00:51:44 +00:00
4.7 KiB
4.7 KiB
Implementation Improvements Needed
1. Route Handler Completion - HIGH PRIORITY
Missing Import in internal/web/routes.go:
import (
"strconv" // ADD THIS - needed for strconv.Atoi
// ... other imports
)
Missing Route Connections in main.go:
// Current setupRoutes function is incomplete - needs:
func (app *App) setupRoutes(webHandler *web.WebHandler) *http.ServeMux {
mux := http.NewServeMux()
// Health check
mux.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte("OK"))
})
// Web UI routes
mux.HandleFunc("/", webHandler.Index)
mux.HandleFunc("/activities", webHandler.ActivityList)
mux.HandleFunc("/activity", webHandler.ActivityDetail)
// ADD THESE API ROUTES:
mux.HandleFunc("/api/activities", func(w http.ResponseWriter, r *http.Request) {
// Implement API endpoint
})
mux.HandleFunc("/api/stats", func(w http.ResponseWriter, r *http.Request) {
stats, _ := app.db.GetStats()
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(stats)
})
mux.HandleFunc("/api/sync", func(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
go app.syncService.Sync(context.Background())
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(map[string]string{"status": "started"})
}
})
return mux
}
2. Database Interface Issues - HIGH PRIORITY
Fix SQLiteDB Creation in main.go:
// CURRENT (INCORRECT):
app.db = database.NewSQLiteDBFromDB(dbConn)
// SHOULD BE:
sqliteDB, err := database.NewSQLiteDB(dbPath)
if err != nil {
return err
}
app.db = sqliteDB
Fix Return Type Mismatch:
Your NewSQLiteDB returns *SQLiteDB but main.go expects Database interface.
3. Template Function Issues - MEDIUM PRIORITY
Missing Template Functions in activity_detail.html:
// Add these template functions to web handler:
func (h *WebHandler) LoadTemplates(templateDir string) error {
// ... existing code ...
// Add custom functions
funcMap := template.FuncMap{
"div": func(a, b float64) float64 { return a / b },
"formatDuration": func(seconds int) string {
hrs := seconds / 3600
mins := (seconds % 3600) / 60
return fmt.Sprintf("%dh %dm", hrs, mins)
},
"formatMeters": func(meters float64) string {
return fmt.Sprintf("%.0f", meters)
},
}
for _, page := range pages {
name := filepath.Base(page)
files := append([]string{page}, layouts...)
files = append(files, partials...)
h.templates[name], err = template.New(name).Funcs(funcMap).ParseFiles(files...)
if err != nil {
return err
}
}
return nil
}
4. Parser Implementation - MEDIUM PRIORITY
Complete TCX/GPX Parsers:
The factory references them but they return nil. Either:
- Implement them fully, or
- Remove references and return proper errors
// In factory.go, replace:
func NewTCXParser() Parser { return nil }
func NewGPXParser() Parser { return nil }
// With:
func NewTCXParser() Parser {
return &TCXParser{} // Implement basic TCX parser
}
func NewGPXParser() Parser {
return &GPXParser{} // Or remove if not needed
}
5. Sync Service Integration - MEDIUM PRIORITY
Missing Sync Service in Main App:
// In main.go App struct, add:
type App struct {
db *database.SQLiteDB
cron *cron.Cron
server *http.Server
garmin *garmin.Client
syncService *sync.SyncService // ADD THIS
shutdown chan os.Signal
}
// In init() method:
app.syncService = sync.NewSyncService(app.garmin, app.db, dataDir)
6. Build Issues - LOW PRIORITY
Fix Go Module Issues:
Your go.mod has some unused dependencies and wrong module path:
// Update go.mod:
module garminsync // Remove github.com path if local
go 1.21
require (
github.com/gorilla/mux v1.8.0
github.com/mattn/go-sqlite3 v1.14.17
github.com/robfig/cron/v3 v3.0.1
golang.org/x/net v0.12.0
)
// Remove unused dependencies like:
// - github.com/tormoder/fit (if not actually used)
// - Various lint tools (should be in tools.go)
7. Docker Configuration - LOW PRIORITY
Health Check Enhancement:
# In Dockerfile, improve health check:
HEALTHCHECK --interval=30s --timeout=30s --retries=3 \
CMD wget --quiet --tries=1 --spider http://localhost:8888/health || exit 1
# Make sure wget is available or use curl:
RUN apk add --no-cache ca-certificates tzdata wget