delphi.market/src/router.go
2023-09-09 22:52:51 +02:00

108 lines
2.0 KiB
Go

package main
import (
"fmt"
"html/template"
"io"
"net/http"
"os"
"github.com/labstack/echo/v4"
)
type Template struct {
templates *template.Template
}
func add(arg1 int, arg2 int) int {
return arg1 + arg2
}
func sub(arg1 int, arg2 int) int {
return arg1 - arg2
}
func div(arg1 int, arg2 int) int {
return arg1 / arg2
}
func substr(s string, start, length int) string {
if start < 0 || start >= len(s) {
return ""
}
end := start + length
if end > len(s) {
end = len(s)
}
return s[start:end]
}
var (
FuncMap template.FuncMap = template.FuncMap{
"add": add,
"sub": sub,
"div": div,
"substr": substr,
}
)
func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
return t.templates.ExecuteTemplate(w, name, data)
}
func index(c echo.Context) error {
rows, err := db.Query("SELECT id, description, active FROM markets WHERE active = true")
if err != nil {
return err
}
defer rows.Close()
var markets []Market
for rows.Next() {
var market Market
rows.Scan(&market.Id, &market.Description, &market.Active)
markets = append(markets, market)
}
data := map[string]any{
"session": c.Get("session"),
"ENV": ENV,
"markets": markets,
"VERSION": VERSION,
"COMMIT_LONG_SHA": COMMIT_LONG_SHA}
return c.Render(http.StatusOK, "index.html", data)
}
func serve500(c echo.Context) {
f, err := os.Open("public/500.html")
if err != nil {
c.Logger().Error(err)
return
}
err = c.Stream(500, "text/html", f)
if err != nil {
c.Logger().Error(err)
return
}
}
func httpErrorHandler(err error, c echo.Context) {
c.Logger().Error(err)
code := http.StatusInternalServerError
httpError, ok := err.(*echo.HTTPError)
if ok {
code = httpError.Code
}
filePath := fmt.Sprintf("public/%d.html", code)
f, err := os.Open(filePath)
if err != nil {
c.Logger().Error(err)
serve500(c)
return
}
err = c.Stream(code, "text/html", f)
if err != nil {
c.Logger().Error(err)
serve500(c)
return
}
}