Files
pcinv/main.go

72 lines
1.3 KiB
Go

package main
import (
"embed"
"gitea.seeseepuff.be/seeseemelk/mysqlite"
"github.com/gin-gonic/gin"
"html/template"
"log"
"net/http"
)
//go:embed migrations/*.sql
var migrations embed.FS
//go:embed templates/*.gohtml
var templateFS embed.FS
func main() {
log.Println("Starting...")
db, err := mysqlite.OpenDb("pcinv.db3")
if err != nil {
log.Fatalf("error opening db: %v", err)
}
defer db.MustClose()
err = db.MigrateDb(migrations, "migrations")
if err != nil {
log.Fatalf("error migrating db: %v", err)
}
app := &App{
db: db,
}
templates, err := template.New("undefined.gohtml").
Funcs(template.FuncMap{
"statusText": http.StatusText,
}).
ParseFS(templateFS, "templates/*.gohtml")
if err != nil {
log.Fatalf("error parsing templates: %v", err)
}
r := gin.Default()
r.SetHTMLTemplate(templates)
r.StaticFS("/static", staticFiles)
r.Use(errorHandler)
r.GET("/", app.getIndex)
r.GET("/device", app.getDevice)
err = r.Run()
if err != nil {
log.Fatalf("error serving website: %v", err)
}
}
type ErrorVM struct {
Errors []*gin.Error
StatusCode int
}
func errorHandler(c *gin.Context) {
c.Next()
if len(c.Errors) != 0 {
vm := ErrorVM{
Errors: c.Errors,
StatusCode: c.Writer.Status(),
}
c.HTML(vm.StatusCode, "errors", vm)
}
}