Files
arbeitszeitmessung/Backend/main.go
Tom Tröger 90193e9346
All checks were successful
Tests / Run Go Tests (push) Successful in 37s
closes #38, #39, #40
2025-09-28 23:29:28 +02:00

72 lines
2.0 KiB
Go

package main
import (
"arbeitszeitmessung/endpoints"
"arbeitszeitmessung/helper"
"arbeitszeitmessung/models"
"context"
"fmt"
"log"
"net/http"
"os"
"time"
"github.com/joho/godotenv"
_ "github.com/lib/pq"
)
func main() {
var err error
err = godotenv.Load(".env")
if err != nil {
log.Println("No .env file found in directory!")
}
if helper.GetEnv("GO_ENV", "production") == "debug" {
log.Println("Debug mode enabled")
log.Println("Environment Variables")
envs := os.Environ()
for _, e := range envs {
fmt.Println(e)
}
}
models.DB, err = OpenDatabase()
if err != nil {
log.Fatal(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
fmt.Printf("Server is running at http://localhost:%s\n", helper.GetEnv("EXPOSED_PORT", "8080"))
log.Fatal(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)
next.ServeHTTP(w, r.WithContext(ctx))
})
}