post order

This commit is contained in:
bronku 2026-06-16 16:54:35 +02:00
parent 4666618151
commit c540ccc28e
5 changed files with 38 additions and 37 deletions

18
server/errors.go Normal file
View file

@ -0,0 +1,18 @@
package server
import "net/http"
type httpError struct {
code int
error
}
func internalError(err error) *httpError {
return &httpError{http.StatusInternalServerError, err}
}
func badRequest(err error) *httpError {
return &httpError{http.StatusBadRequest, err}
}
func notFound(err error) *httpError {
return &httpError{http.StatusNotFound, err}
}

View file

@ -159,16 +159,6 @@ func (h *Server) blocked(r *http.Request) (templ.Component, int, error) {
return templates.BlockedPage(dates), http.StatusOK, nil return templates.BlockedPage(dates), http.StatusOK, nil
} }
func internalError(err error) *httpError {
return &httpError{http.StatusInternalServerError, err}
}
func badRequest(err error) *httpError {
return &httpError{http.StatusBadRequest, err}
}
func notFound(err error) *httpError {
return &httpError{http.StatusNotFound, err}
}
func (h *Server) newOrder(r *http.Request) (dto.OrderPage, *httpError) { func (h *Server) newOrder(r *http.Request) (dto.OrderPage, *httpError) {
var dto dto.OrderPage var dto dto.OrderPage
var err error var err error

View file

@ -46,32 +46,32 @@ func (h *Server) postCake(r *http.Request) (templ.Component, int, error) {
} }
n.ID, err = h.s.SaveCake(n) n.ID, err = h.s.SaveCake(n)
return templates.Confirmation("Potwierdzone", n.ID), http.StatusAccepted, err return templates.Confirmation(n.ID), http.StatusAccepted, err
} }
func (h *Server) postOrder(r *http.Request) (templ.Component, int, error) { func (h *Server) postOrder(r *http.Request) (int, *httpError) {
cakes, err := h.s.GetCakes() cakes, err := h.s.GetCakes()
if err != nil { if err != nil {
return nil, http.StatusInternalServerError, err return 0, internalError(err)
} }
err = r.ParseForm() err = r.ParseForm()
if err != nil { if err != nil {
return nil, http.StatusBadRequest, err return 0, badRequest(err)
} }
var n models.Order var n models.Order
n.ID, err = strconv.Atoi(r.FormValue("id")) n.ID, err = strconv.Atoi(r.FormValue("id"))
if err != nil { if err != nil {
return nil, http.StatusBadRequest, err return 0, badRequest(err)
} }
n.Paid, err = models.ParsePrice(r.FormValue("paid")) n.Paid, err = models.ParsePrice(r.FormValue("paid"))
if err != nil { if err != nil {
return nil, http.StatusBadRequest, err return 0, badRequest(err)
} }
n.Date, err = time.Parse(config.DateFormat, r.FormValue("date")) n.Date, err = time.Parse(config.DateFormat, r.FormValue("date"))
if err != nil { if err != nil {
return nil, http.StatusBadRequest, err return 0, badRequest(err)
} }
n.Cakes = make([]models.Cake, 0) n.Cakes = make([]models.Cake, 0)
@ -132,7 +132,10 @@ func (h *Server) postOrder(r *http.Request) (templ.Component, int, error) {
n.Status = strings.TrimSpace(r.FormValue("status")) n.Status = strings.TrimSpace(r.FormValue("status"))
n.ID, err = h.s.SaveOrder(n) n.ID, err = h.s.SaveOrder(n)
return templates.Confirmation("Potwierdzone", n.ID), http.StatusAccepted, err if err != nil {
return 0, internalError(err)
}
return n.ID, nil
} }
func safeStr(s []string, i int) string { func safeStr(s []string, i int) string {

View file

@ -10,11 +10,6 @@ import (
"github.com/a-h/templ" "github.com/a-h/templ"
) )
type httpError struct {
code int
error
}
type fetcher[T any] func(r *http.Request) (T, *httpError) type fetcher[T any] func(r *http.Request) (T, *httpError)
type templateBuilder[T any] func(data T) templ.Component type templateBuilder[T any] func(data T) templ.Component
@ -64,10 +59,11 @@ func New(store *store.Store) *Server {
mux.HandleFunc("GET /", redirect("/orders", http.StatusSeeOther)) mux.HandleFunc("GET /", redirect("/orders", http.StatusSeeOther))
mux.HandleFunc("GET /order", render("Nowe zamówienie", server.newOrder, templates.OrderForm)) mux.HandleFunc("GET /order", render("Nowe zamówienie", server.newOrder, templates.OrderForm))
mux.HandleFunc("GET /order/{id}", render("Zamówienie", server.order, templates.OrderForm)) mux.HandleFunc("GET /order/{id}", render("Zamówienie", server.order, templates.OrderForm))
mux.HandleFunc("POST /order", render("Potwierdzenie", server.postOrder, templates.Confirmation))
mux.HandleFunc("POST /order/{id}", render("Potwierdzenie", server.postOrder, templates.Confirmation))
// mux.HandleFunc("GET /orders", render(server.orders)) // mux.HandleFunc("GET /orders", render(server.orders))
// mux.HandleFunc("GET /cake", render(server.cake)) // mux.HandleFunc("GET /cake", render(server.cake))
// mux.HandleFunc("GET /cakes", render(server.cakes)) // mux.HandleFunc("GET /cakes", render(server.cakes))
// mux.HandleFunc("POST /order", render(server.postOrder))
// mux.HandleFunc("POST /order/{id}/status", render(server.updateStatus)) // mux.HandleFunc("POST /order/{id}/status", render(server.updateStatus))
// mux.HandleFunc("POST /cake", render(server.postCake)) // mux.HandleFunc("POST /cake", render(server.postCake))
// mux.HandleFunc("GET /blocked", render(server.blocked)) // mux.HandleFunc("GET /blocked", render(server.blocked))

View file

@ -2,17 +2,11 @@ package templates
import "strconv" import "strconv"
templ Confirmation(title string, id int) { templ Confirmation(id int) {
@Layout(title, ConfirmationBody(id)) <span class="material-symbols-outlined success-icon">check_circle</span>
} <h2>{ strconv.Itoa(id) } — zapisano</h2>
<a href="/orders" class="btn btn-primary">
templ ConfirmationBody(id int) { <span class="material-symbols-outlined">arrow_back</span>
<section class="confirmation"> Powrót do zamówień
<span class="material-symbols-outlined success-icon">check_circle</span> </a>
<h2>{ strconv.Itoa(id) } — zapisano</h2>
<a href="/orders" class="btn btn-primary">
<span class="material-symbols-outlined">arrow_back</span>
Powrót do zamówień
</a>
</section>
} }