Files
arbeitszeitmessung/Backend/main.go
tom 5001f24d9b
Some checks failed
Tests / Run Go Tests (push) Failing after 1m36s
implemented log levels and structured log with slog
2025-10-13 22:33:48 +02:00

74 lines
2.3 KiB
Go

package main
import (
"arbeitszeitmessung/endpoints"
"arbeitszeitmessung/helper"
"arbeitszeitmessung/models"
"context"
"log/slog"
"net/http"
"os"
"time"
"github.com/joho/godotenv"
_ "github.com/lib/pq"
)
func main() {
var err error
var logLevel slog.LevelVar
logLevel.Set(slog.LevelWarn)
logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: &logLevel}))
slog.SetDefault(logger)
err = godotenv.Load(".env")
if err != nil {
slog.Info("No .env file found in directory!")
}
if helper.GetEnv("GO_ENV", "production") == "debug" {
logLevel.Set(slog.LevelDebug)
envs := os.Environ()
slog.Debug("Debug mode enabled", "Environment Variables", envs)
}
models.DB, err = OpenDatabase()
if err != nil {
slog.Error("Error while opening the database", "Error", err)
}
fs := http.FileServer(http.Dir("./static"))
endpoints.CreateSessionManager(24 * time.Hour)
server := http.NewServeMux()
// handles the different http routes
server.HandleFunc("/time/new", endpoints.TimeCreateHandler)
server.Handle("/absence", ParamsMiddleware(endpoints.AbsencHandler))
server.Handle("/time", ParamsMiddleware(endpoints.TimeHandler))
server.HandleFunc("/logout", endpoints.LogoutHandler)
server.HandleFunc("/user/{action}", endpoints.UserHandler)
// server.HandleFunc("/user/login", endpoints.LoginHandler)
// server.HandleFunc("/user/settings", endpoints.UserSettingsHandler)
server.HandleFunc("/team", endpoints.TeamHandler)
server.HandleFunc("/team/presence", endpoints.TeamPresenceHandler)
server.HandleFunc("/pdf", endpoints.PDFHandler)
server.Handle("/", http.RedirectHandler("/time", http.StatusPermanentRedirect))
server.Handle("/static/", http.StripPrefix("/static/", fs))
serverSessionMiddleware := endpoints.Session.LoadAndSave(server)
// starting the http server
slog.Info("Server is running at http://localhost:8080")
slog.Error("Error starting Server", "Error", http.ListenAndServe(":8080", serverSessionMiddleware))
}
func ParamsMiddleware(next http.HandlerFunc) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
queryParams := r.URL.Query()
ctx := context.WithValue(r.Context(), "urlParams", queryParams)
slog.Debug("ParamsMiddleware added urlParams", slog.Any("urlParams", queryParams))
next.ServeHTTP(w, r.WithContext(ctx))
})
}