TheMathemagicians/sevenkeys/webui/webui.go

76 lines
1.4 KiB
Go

package webui
import (
"database/sql"
"html/template"
"net/http"
"sevenkeys/logic"
"strconv"
)
type BaseHandler struct {
db *sql.DB
}
func NewBaseHandler(db *sql.DB) *BaseHandler {
return &BaseHandler{
db: db,
}
}
func (h *BaseHandler) storageAreasHandler(w http.ResponseWriter, r *http.Request) {
storageAreas, err := logic.GetAllStorageAreas(h.db)
if err != nil {
return
}
const tmpl = `
<html>
<head><title>Sevenkeys</title></head>
<body>
{{range $val := .}}
<a href="/storage/{{$val.Id}}">{{$val.Name}} ({{$val.StorageType}})</a><br>
{{end}}
</body>
</html>
`
t := template.Must(template.New("tmpl").Parse(tmpl))
t.Execute(w, storageAreas)
}
func (h *BaseHandler) storageHandler(w http.ResponseWriter, r *http.Request) {
storageAreaIdParam := r.PathValue("id")
storageAreaId, err := strconv.Atoi(storageAreaIdParam)
if err != nil {
return
}
productLocations, err := logic.GetAllProductsInStorageArea(h.db, storageAreaId)
if err != nil {
return
}
const tmpl = `
<html>
<head><title>Sevenkeys</title></head>
<body>
<ol>
{{range $val := .}}
<li>{{$val}}</li>
{{end}}
<ol>
</body>
</html>
`
t := template.Must(template.New("tmpl").Parse(tmpl))
t.Execute(w, productLocations)
}
func Start(db *sql.DB) {
handlers := NewBaseHandler(db)
http.HandleFunc("/", handlers.storageAreasHandler)
http.HandleFunc("/storage/{id}", handlers.storageHandler)
http.ListenAndServe(":8080", nil)
}