rentease/internal/server/handlers.go
2024-02-04 15:24:16 +01:00

89 lines
2.1 KiB
Go

package server
import (
"net/http"
"time"
"github.com/labstack/echo/v4"
"github.com/labstack/gommon/log"
"github.com/rjNemo/rentease/constants"
"github.com/rjNemo/rentease/internal/views"
)
func (s Server) handleHomePage() echo.HandlerFunc {
return func(ctx echo.Context) error {
component := views.Index()
return s.renderTempl(ctx, http.StatusOK, component)
}
}
func (s Server) handleNewBookingPage() echo.HandlerFunc {
return func(c echo.Context) error {
component := views.NewBooking(constants.Platforms)
return s.renderTempl(c, http.StatusOK, component)
}
}
func (s Server) handleCreateBooking() echo.HandlerFunc {
return func(c echo.Context) error {
type NewBooking struct {
Name string `form:"name"`
PhoneNumber string `form:"phone_number"`
CustomerNumber string `form:"customer_number"`
Email string `form:"email"`
From time.Time `json:"from"`
To time.Time `from:"to"`
Platform string `form:"platform"`
PlatformFees string `form:"platform_fees"`
}
nb := new(NewBooking)
err := c.Bind(nb)
if err != nil {
log.Warn(err)
return err
}
ts, err := parseTime(c.FormValue("from"))
nb.From = ts
ts, err = parseTime(c.FormValue("to"))
nb.To = ts
type Booking struct {
Id int
Name string `gorm:"column:customer_name"`
PhoneNumber string
CustomerNumber string `gorm:"column:customers"`
Email string
From time.Time
To time.Time
Platform string
PlatformFees string
}
// create a booking object
result := s.db.Create(&Booking{
Name: nb.Name,
PhoneNumber: nb.PhoneNumber,
CustomerNumber: nb.CustomerNumber,
Email: nb.Email,
From: nb.From,
To: nb.To,
Platform: nb.Platform,
PlatformFees: nb.PlatformFees,
})
log.Info(result.Error)
log.Info(result.RowsAffected)
// store it
// redirect to the booking page
return nil
}
}
func parseTime(src string) (time.Time, error) {
ts, err := time.Parse("2006-01-02", src)
if err != nil {
return time.Time{}, err
}
return ts, nil
}