lots of stuff, don't truly remember

This commit is contained in:
Blake Ridgway
2026-05-17 20:39:47 -05:00
parent 178ffb3425
commit dc4fe558b7
35 changed files with 3501 additions and 112 deletions

View File

@@ -1,6 +1,7 @@
package main
import (
"encoding/json"
"log"
"net/http"
"os"
@@ -11,12 +12,16 @@ import (
"github.com/joho/godotenv"
"rideaware/internal/activity"
"rideaware/internal/ai"
"rideaware/internal/auth"
"rideaware/internal/config"
"rideaware/internal/equipment"
"rideaware/internal/event"
"rideaware/internal/export"
"rideaware/internal/goal"
"rideaware/internal/integration"
"rideaware/internal/middleware"
"rideaware/internal/nutrition"
"rideaware/internal/stats"
"rideaware/internal/templates"
"rideaware/internal/user"
@@ -41,6 +46,8 @@ func main() {
&workout.Workout{},
&integration.OAuthConnection{},
&integration.OAuthState{},
&ai.AIRecommendation{},
&event.Event{},
); err != nil {
log.Fatalf("Failed to migrate database: %v", err)
}
@@ -155,6 +162,8 @@ func setupRoutes(r *chi.Mux) {
r.Get("/workouts/equipment-stats", workoutHandler.GetEquipmentStats)
r.Put("/workouts", workoutHandler.UpdateWorkout)
r.Delete("/workouts", workoutHandler.DeleteWorkout)
r.Post("/workouts/remove-duplicates", workoutHandler.RemoveDuplicates)
r.Put("/workouts/reschedule", workoutHandler.RescheduleWorkout)
r.Get("/workout-types", workoutHandler.GetWorkoutTypes)
r.Post("/workouts/upload", workoutHandler.UploadWorkoutFile)
@@ -179,18 +188,65 @@ func setupRoutes(r *chi.Mux) {
r.Get("/wahoo/status", wahooHandler.ConnectionStatus)
r.Delete("/wahoo/disconnect", wahooHandler.Disconnect)
// Intervals.icu integration routes
intervalsHandler := integration.NewIntervalsHandler()
r.Post("/intervals/connect", intervalsHandler.SaveApiKey)
r.Get("/intervals/status", intervalsHandler.ConnectionStatus)
r.Delete("/intervals/disconnect", intervalsHandler.Disconnect)
r.Post("/workouts/push/intervals", intervalsHandler.PushWorkout)
r.Post("/intervals/sync", intervalsHandler.SyncActivities)
// Stats routes
statsHandler := stats.NewHandler()
r.Get("/stats/summary", statsHandler.GetSummary)
r.Get("/stats/weekly", statsHandler.GetWeeklyStats)
r.Get("/stats/monthly", statsHandler.GetMonthlyStats)
r.Get("/stats/personal-bests", statsHandler.GetPersonalBests)
r.Get("/stats/training-load", statsHandler.GetTrainingLoad)
r.Get("/stats/power-history", statsHandler.GetPowerHistory)
// AI Training Plan routes
aiHandler := ai.NewHandler()
r.Post("/ai/generate", aiHandler.GenerateRecommendations)
r.Post("/ai/schedule", aiHandler.ScheduleRecommendations)
r.Get("/ai/history", aiHandler.GetRecommendationHistory)
// Event routes
eventHandler := event.NewHandler()
r.Post("/events", eventHandler.CreateEvent)
r.Get("/events", eventHandler.GetEvents)
r.Get("/events/upcoming", eventHandler.GetUpcomingEvents)
r.Put("/events", eventHandler.UpdateEvent)
r.Delete("/events", eventHandler.DeleteEvent)
r.Get("/event-types", eventHandler.GetEventTypes)
// Nutrition routes
nutritionHandler := nutrition.NewHandler()
r.Get("/nutrition/targets", nutritionHandler.GetTargets)
r.Get("/nutrition/weekly", nutritionHandler.GetWeekly)
// Workout template routes
templateHandler := templates.NewHandler()
r.Get("/workout-templates", templateHandler.ListTemplates)
r.Get("/workout-templates/detail", templateHandler.GetTemplate)
r.Post("/workouts/from-template", templateHandler.CreateFromTemplate)
// Goal routes
goalHandler := goal.NewHandler()
r.Post("/goals", goalHandler.CreateGoal)
r.Get("/goals", goalHandler.GetGoals)
r.Put("/goals", goalHandler.UpdateGoal)
r.Delete("/goals", goalHandler.DeleteGoal)
// Admin-only routes (require 'admin' role in addition to valid JWT)
r.Route("/admin", func(r chi.Router) {
r.Use(authMiddleware.RequireRole("admin"))
r.Get("/health", func(w http.ResponseWriter, r *http.Request) {
json.NewEncoder(w).Encode(map[string]string{
"status": "admin API operational",
})
})
})
})
log.Println("✅ Routes registered successfully")
@@ -200,4 +256,4 @@ func healthCheck(w http.ResponseWriter, r *http.Request) {
log.Println("📊 Health check called")
w.WriteHeader(http.StatusOK)
w.Write([]byte("OK"))
}
}