22package server
33
44import (
5+ "embed"
56 "log"
67 "net/http"
8+ "text/template"
79
810 "github.com/gorilla/mux"
911 "github.com/xmonader/team-timetracker/internal/server/handlers"
@@ -17,22 +19,34 @@ type Server struct {
1719 TrackingHandler * handlers.TrackingHandler
1820 EntriesHandler * handlers.EntriesHandler
1921 HealthHandler * handlers.HealthHandler
22+ Templates * template.Template
2023}
2124
25+ //go:embed templates
26+ var viewsFS embed.FS
27+
2228// NewServer initializes the server with routes and handlers
2329func NewServer (db * gorm.DB ) * Server {
2430 router := mux .NewRouter ()
2531
2632 trackingHandler := & handlers.TrackingHandler {DB : db }
2733 entriesHandler := & handlers.EntriesHandler {DB : db }
2834 healthHandler := & handlers.HealthHandler {DB : db }
35+ templates , err := template .New ("" ).
36+ ParseFS (viewsFS ,
37+ "templates/*.html" ,
38+ )
39+ if err != nil {
40+ panic (err )
41+ }
2942
3043 server := & Server {
3144 Router : router ,
3245 DB : db ,
3346 TrackingHandler : trackingHandler ,
3447 EntriesHandler : entriesHandler ,
3548 HealthHandler : healthHandler ,
49+ Templates : templates ,
3650 }
3751
3852 server .setupRoutes ()
@@ -45,13 +59,28 @@ func (s *Server) setupRoutes() {
4559 // Tracking routes
4660 s .Router .HandleFunc ("/api/start" , s .TrackingHandler .StartTracking ).Methods ("POST" )
4761 s .Router .HandleFunc ("/api/stop" , s .TrackingHandler .StopTracking ).Methods ("POST" )
62+ s .Router .HandleFunc ("/api/status" , s .TrackingHandler .GetStatus ).Methods ("GET" )
4863
4964 // Entries routes
5065 s .Router .HandleFunc ("/api/entries" , s .EntriesHandler .GetEntries ).Methods ("GET" )
5166
5267 // Health and Liveness routes
5368 s .Router .HandleFunc ("/live" , s .HealthHandler .LivenessHandler ).Methods ("GET" )
5469 s .Router .HandleFunc ("/health" , s .HealthHandler .HealthCheckHandler ).Methods ("GET" )
70+
71+ // Webpage route
72+ s .Router .HandleFunc ("/" , s .HandleHome ).Methods ("GET" )
73+
74+ }
75+
76+ // HandleHome serves the main webpage
77+ func (s * Server ) HandleHome (w http.ResponseWriter , r * http.Request ) {
78+ err := s .Templates .ExecuteTemplate (w , "index.html" , nil )
79+ if err != nil {
80+ http .Error (w , "Error rendering template" , http .StatusInternalServerError )
81+ log .Println ("Template execution error:" , err )
82+ return
83+ }
5584}
5685
5786// Run starts the HTTP server
0 commit comments