From 560c539b1920e49d217e3191ea47e5723c4bf9e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=20Tr=C3=B6ger?= Date: Sun, 18 Jan 2026 00:07:54 +0100 Subject: [PATCH] fixed minor bugs + added loggin middleware --- Backend/endpoints/time-create.go | 2 ++ Backend/go.sum | 5 ++--- Backend/main.go | 17 +++++++++++++++++ Backend/models/booking.go | 5 +++-- Backend/models/iworkday.go | 9 +++------ Backend/models/workDay.go | 2 +- 6 files changed, 28 insertions(+), 12 deletions(-) diff --git a/Backend/endpoints/time-create.go b/Backend/endpoints/time-create.go index 5f64103..f368b19 100644 --- a/Backend/endpoints/time-create.go +++ b/Backend/endpoints/time-create.go @@ -7,6 +7,7 @@ import ( "errors" "log" "net/http" + "time" ) // Relevant for arduino inputs -> creates new Booking from get and put method @@ -36,6 +37,7 @@ func createBooking(w http.ResponseWriter, r *http.Request) { } booking := (*models.Booking).FromUrlParams(nil, r.URL.Query()) + booking.Timestamp = time.Now() if booking.Verify() { err := booking.Insert() if errors.Is(models.SameBookingError{}, err) { diff --git a/Backend/go.sum b/Backend/go.sum index 0c9f849..705f796 100644 --- a/Backend/go.sum +++ b/Backend/go.sum @@ -4,8 +4,6 @@ github.com/Dadido3/go-typst v0.8.0 h1:uTLYprhkrBjwsCXRRuyYUFL0fpYHa2kIYoOB/CGqVN github.com/Dadido3/go-typst v0.8.0/go.mod h1:QYis9sT70u65kn1SkFfyPRmHsPxgoxWbAixwfPReOZA= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/a-h/templ v0.3.943 h1:o+mT/4yqhZ33F3ootBiHwaY4HM5EVaOJfIshvd5UNTY= -github.com/a-h/templ v0.3.943/go.mod h1:oCZcnKRf5jjsGpf2yELzQfodLphd2mwecwG4Crk5HBo= github.com/a-h/templ v0.3.960 h1:trshEpGa8clF5cdI39iY4ZrZG8Z/QixyzEyUnA7feTM= github.com/a-h/templ v0.3.960/go.mod h1:oCZcnKRf5jjsGpf2yELzQfodLphd2mwecwG4Crk5HBo= github.com/alexedwards/scs/v2 v2.8.0 h1:h31yUYoycPuL0zt14c0gd+oqxfRwIj6SOjHdKRZxhEw= @@ -39,6 +37,8 @@ github.com/golang-migrate/migrate/v4 v4.18.3 h1:EYGkoOsvgHHfm5U/naS1RP/6PL/Xv3S4 github.com/golang-migrate/migrate/v4 v4.18.3/go.mod h1:99BKpIi6ruaaXRM1A77eqZ+FWPQ3cfRa+ZVy5bmWMaY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= +github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -78,7 +78,6 @@ github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8 github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= -github.com/wlbr/feiertage v1.10.0/go.mod h1:wJOHvMa6sI5L1FkrTOX/GSoO0hpK3S2YqGLPi8Q84I0= github.com/wlbr/feiertage v1.17.0 h1:AEck/iUQu19iU0xNEoSQTeSTGXF1Ju0tbAwEi/Lmwqk= github.com/wlbr/feiertage v1.17.0/go.mod h1:TVZgmSZgGW/jSxexZ56qdlR6cDj+F/FO8bkw8U6kYxM= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= diff --git a/Backend/main.go b/Backend/main.go index c13fcde..e0817dd 100644 --- a/Backend/main.go +++ b/Backend/main.go @@ -80,6 +80,8 @@ func main() { serverSessionMiddleware := endpoints.Session.LoadAndSave(server) + serverSessionMiddleware = loggingMiddleware(serverSessionMiddleware) + // starting the http server slog.Info("Server is running at http://localhost:8080") slog.Error("Error starting Server", "Error", http.ListenAndServe(":8080", serverSessionMiddleware)) @@ -95,3 +97,18 @@ func ParamsMiddleware(next http.HandlerFunc) http.Handler { next.ServeHTTP(w, r.WithContext(ctx)) }) } + +func loggingMiddleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + start := time.Now() + + // Log the method and the requested URL + slog.Info("Started request", slog.String("Method", r.Method), slog.String("Path", r.URL.Path)) + + // Call the next handler in the chain + next.ServeHTTP(w, r) + + // Log how long it took + slog.Info("Completet Request", slog.String("Time", time.Since(start).String())) + }) +} diff --git a/Backend/models/booking.go b/Backend/models/booking.go index 55e3aca..463da92 100644 --- a/Backend/models/booking.go +++ b/Backend/models/booking.go @@ -245,12 +245,13 @@ func (b *Booking) Update(nb Booking) { func checkLastBooking(b Booking) bool { var check_in_out int - stmt, err := DB.Prepare((`SELECT check_in_out FROM "anwesenheit" WHERE "card_uid" = $1 ORDER BY "timestamp" DESC LIMIT 1;`)) + slog.Info("Checking with timestamp:", "timestamp", b.Timestamp.String()) + stmt, err := DB.Prepare((`SELECT check_in_out FROM "anwesenheit" WHERE "card_uid" = $1 AND "timestamp"::DATE <= $2::DATE ORDER BY "timestamp" DESC LIMIT 1;`)) if err != nil { log.Fatalf("Error preparing query: %v", err) return false } - err = stmt.QueryRow(b.CardUID).Scan(&check_in_out) + err = stmt.QueryRow(b.CardUID, b.Timestamp).Scan(&check_in_out) if err == sql.ErrNoRows { return true } diff --git a/Backend/models/iworkday.go b/Backend/models/iworkday.go index 6305842..1170aa1 100644 --- a/Backend/models/iworkday.go +++ b/Backend/models/iworkday.go @@ -49,19 +49,16 @@ func GetDays(user User, tsFrom, tsTo time.Time, orderedForward bool) []IWorkDay } for _, absentDay := range absences { - // Kurzarbeit should be integrated in workday + + // Check if there is already a day existingDay, ok := allDays[absentDay.Date().Format(time.DateOnly)] - if !ok { - allDays[absentDay.Date().Format(time.DateOnly)] = &absentDay - continue - } switch { case absentDay.AbwesenheitTyp.WorkTime < 0: if workDay, ok := allDays[absentDay.Date().Format(time.DateOnly)].(*WorkDay); ok { workDay.kurzArbeit = true workDay.kurzArbeitAbsence = absentDay } - case !existingDay.IsEmpty(): + case ok && !existingDay.IsEmpty(): allDays[absentDay.Date().Format(time.DateOnly)] = NewCompondDay(absentDay.Date(), existingDay, &absentDay) default: allDays[absentDay.Date().Format(time.DateOnly)] = &absentDay diff --git a/Backend/models/workDay.go b/Backend/models/workDay.go index 12c6669..b69a388 100644 --- a/Backend/models/workDay.go +++ b/Backend/models/workDay.go @@ -331,7 +331,7 @@ func GetWorkDays(user User, tsFrom, tsTo time.Time) []WorkDay { if len(workDay.Bookings) == 1 && workDay.Bookings[0].CounterId == 0 { workDay.Bookings = []Booking{} } - if len(workDay.Bookings) > 1 || !helper.IsWeekend(workDay.Date()) { + if len(workDay.Bookings) >= 1 || !helper.IsWeekend(workDay.Date()) { workDays = append(workDays, workDay) } }