all repos — go-lift @ 092e7440440b8459d82fb90c05c005f9f38e3c51

Lightweight workout tracker prototype..

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}