75 lines
1.6 KiB
Go
75 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/google/uuid"
|
|
"log"
|
|
"mhtml/database"
|
|
"mhtml/h"
|
|
"mhtml/pages"
|
|
"mhtml/partials"
|
|
"mhtml/partials/sheet"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
f := fiber.New()
|
|
f.Static("/js", "./js")
|
|
|
|
f.Use(func(ctx *fiber.Ctx) error {
|
|
if ctx.Cookies("mhtml-session") != "" {
|
|
return ctx.Next()
|
|
}
|
|
id := ctx.IP() + uuid.NewString()
|
|
ctx.Cookie(&fiber.Cookie{
|
|
Name: "mhtml-session",
|
|
Value: id,
|
|
SessionOnly: true,
|
|
})
|
|
return ctx.Next()
|
|
})
|
|
|
|
f.Use(func(ctx *fiber.Ctx) error {
|
|
if ctx.Path() == "/livereload" {
|
|
return ctx.Next()
|
|
}
|
|
now := time.Now()
|
|
err := ctx.Next()
|
|
duration := time.Since(now)
|
|
ctx.Set("X-Response-Time", duration.String())
|
|
// Log or print the request method, URL, and duration
|
|
log.Printf("Request: %s %s took %v", ctx.Method(), ctx.OriginalURL(), duration)
|
|
return err
|
|
})
|
|
|
|
f.Get("/mhtml/partials*", func(ctx *fiber.Ctx) error {
|
|
partial := partials.GetPartialFromContext(ctx)
|
|
if partial == nil {
|
|
return ctx.SendStatus(404)
|
|
}
|
|
return h.PartialView(ctx, partial)
|
|
})
|
|
|
|
pages.RegisterPages(f)
|
|
|
|
f.Post("/api/patients", func(ctx *fiber.Ctx) error {
|
|
name := ctx.FormValue("name")
|
|
reason := ctx.FormValue("reason-for-visit")
|
|
location := ctx.FormValue("location-name")
|
|
|
|
database.HSet("patients", uuid.New().String(), partials.Patient{
|
|
Name: name,
|
|
ReasonForVisit: reason,
|
|
AppointmentDate: time.Now(),
|
|
LocationName: location,
|
|
})
|
|
|
|
return h.PartialViewWithHeaders(ctx, &map[string]string{
|
|
"HX-Trigger": "patient-added",
|
|
}, sheet.Close(ctx))
|
|
})
|
|
|
|
h.Start(f, h.App{
|
|
LiveReload: true,
|
|
})
|
|
}
|