Files
pcinv/main.go
Sebastiaan de Schaetzen ff1d95edab
All checks were successful
Build / build (push) Successful in 1m30s
Add ability to add hard drives
2025-03-24 16:15:52 +01:00

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)
}
}