All checks were successful
Build / build (push) Successful in 1m30s
95 lines
2.0 KiB
Go
95 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"embed"
|
|
"html/template"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
|
|
"gitea.seeseepuff.be/seeseemelk/mysqlite"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
//go:embed migrations/*.sql
|
|
var migrations embed.FS
|
|
|
|
//go:embed templates/*.gohtml
|
|
var templateFS embed.FS
|
|
|
|
func main() {
|
|
log.Println("Starting...")
|
|
|
|
// Get database path from environment variable or use default
|
|
dbPath := os.Getenv("PCINV_DB")
|
|
if dbPath == "" {
|
|
dbPath = "pcinv.db3"
|
|
}
|
|
|
|
db, err := mysqlite.OpenDb(dbPath)
|
|
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,
|
|
"createDeviceLink": createDeviceLink,
|
|
"formatMemorySize": formatMemorySize,
|
|
"formatMemoryPlainSize": formatMemoryPlainSize,
|
|
"formatType": formatType,
|
|
"isRamType": isRamType,
|
|
"createSelectMenu": createSelectMenu,
|
|
"createSelectMenuDefault": createSelectMenuDefault,
|
|
}).
|
|
ParseFS(templateFS, "templates/*.gohtml")
|
|
|
|
if err != nil {
|
|
log.Fatalf("error parsing templates: %v", err)
|
|
}
|
|
|
|
gin.DebugPrintFunc = log.Printf
|
|
gin.SetMode(gin.ReleaseMode)
|
|
r := gin.Default()
|
|
r.SetHTMLTemplate(templates)
|
|
r.StaticFS("/static", staticFiles)
|
|
r.Use(errorHandler)
|
|
r.GET("/", app.getIndex)
|
|
r.GET("/device", app.getDevice)
|
|
r.GET("/create", app.getCreateDevice)
|
|
r.POST("/create", app.postCreateDevice)
|
|
r.GET("/browse", app.getBrowse)
|
|
r.GET("/delete", app.getDelete)
|
|
r.POST("/delete", app.postDelete)
|
|
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)
|
|
}
|
|
}
|