src/api/routes.go (view raw)
1package api
2
3import (
4 "net/http"
5 "os"
6 "path/filepath"
7
8 "github.com/birabittoh/go-lift/src/database"
9)
10
11const uiDir = "ui/dist"
12
13var fileServer = http.FileServer(http.Dir(uiDir))
14
15func GetServeMux(dbStruct *database.Database) *http.ServeMux {
16 mux := http.NewServeMux()
17 db := dbStruct.DB
18
19 mux.HandleFunc("GET /authelia/api/user/info", mockAutheliaHandler)
20
21 mux.HandleFunc("GET /api/ping", pingHandler)
22 mux.HandleFunc("GET /api/connection", connectionHandler(db))
23
24 // Profile routes
25 mux.HandleFunc("GET /api/users/{id}", getUserHandler(db))
26 mux.HandleFunc("PUT /api/users/{id}", updateUserHandler(db))
27
28 // Routines routes
29 mux.HandleFunc("GET /api/routines", getRoutinesHandler(db))
30 mux.HandleFunc("GET /api/routines/{id}", getRoutineHandler(db))
31 mux.HandleFunc("POST /api/routines", createRoutineHandler(db))
32 mux.HandleFunc("PUT /api/routines/{id}", updateRoutineHandler(db))
33 mux.HandleFunc("DELETE /api/routines/{id}", deleteRoutineHandler(db))
34
35 // Exercises routes
36 mux.HandleFunc("GET /api/exercises", getExercisesHandler(db))
37 mux.HandleFunc("GET /api/exercises/{id}", getExerciseHandler(db))
38 mux.HandleFunc("POST /api/exercises", createExerciseHandler(db))
39 mux.HandleFunc("POST /api/exercises/update", upsertExercisesHandler(dbStruct))
40 mux.HandleFunc("PUT /api/exercises/{id}", updateExerciseHandler(db))
41 mux.HandleFunc("DELETE /api/exercises/{id}", deleteExerciseHandler(db))
42
43 // RecordRoutines routes
44 mux.HandleFunc("GET /api/recordroutines", getRecordRoutinesHandler(db))
45 mux.HandleFunc("GET /api/recordroutines/{id}", getRecordRoutineHandler(db))
46 mux.HandleFunc("POST /api/recordroutines", createRecordRoutineHandler(db))
47 mux.HandleFunc("PUT /api/recordroutines/{id}", updateRecordRoutineHandler(db))
48 mux.HandleFunc("DELETE /api/recordroutines/{id}", deleteRecordRoutineHandler(db))
49
50 // Stats routes
51 mux.HandleFunc("GET /api/stats", getStatsHandler(db))
52
53 // Static UI route
54 mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
55 // Check if the file exists at the requested path
56 requestedFile := filepath.Join(uiDir, r.URL.Path)
57 _, err := os.Stat(requestedFile)
58
59 // If file exists or it's the root, serve it directly
60 if err == nil || r.URL.Path == "/" {
61 fileServer.ServeHTTP(w, r)
62 return
63 }
64
65 // For file not found, serve index.html for SPA routing
66 http.ServeFile(w, r, filepath.Join(uiDir, "index.html"))
67 })
68
69 return mux
70}