the rest
This commit is contained in:
76
internal/handlers/booking.go
Normal file
76
internal/handlers/booking.go
Normal file
@@ -0,0 +1,76 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"html/template"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"decor-by-hannahs/internal/auth"
|
||||
"decor-by-hannahs/internal/db"
|
||||
)
|
||||
|
||||
func BookingPageHandler(q *db.Queries, tmpl *template.Template) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
type data struct {
|
||||
Title string
|
||||
ActivePage string
|
||||
}
|
||||
_ = tmpl.ExecuteTemplate(w, "booking.tmpl", data{Title: "Book a Service", ActivePage: "booking"})
|
||||
}
|
||||
}
|
||||
|
||||
func BookingAPIHandler(q *db.Queries, tmpl *template.Template) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method != http.MethodPost {
|
||||
http.Error(w, "Method is not allowed", http.StatusMethodNotAllowed)
|
||||
return
|
||||
}
|
||||
|
||||
user, err := auth.GetUser(r.Context())
|
||||
if err != nil {
|
||||
http.Error(w, "Unauthorized", http.StatusUnauthorized)
|
||||
return
|
||||
}
|
||||
|
||||
var in struct {
|
||||
ServiceID string `json:"service_id"`
|
||||
EventDate string `json:"event_date"`
|
||||
Address string `json:"address"`
|
||||
Notes string `json:"notes"`
|
||||
}
|
||||
if err := json.NewDecoder(r.Body).Decode(&in); err != nil {
|
||||
http.Error(w, "Bad request", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
eventTime, err := time.Parse(time.RFC3339, in.EventDate)
|
||||
if err != nil {
|
||||
http.Error(w, "Invalid date", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
svc, err := strconv.ParseInt(in.ServiceID, 10, 64)
|
||||
if err != nil {
|
||||
http.Error(w, "Invalid Service ID", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
svcID := sql.NullInt64{Int64: svc, Valid: true}
|
||||
userID := sql.NullInt64{Int64: user.ID, Valid: true}
|
||||
|
||||
booking, err := q.CreateBooking(r.Context(), db.CreateBookingParams{
|
||||
UserID: userID,
|
||||
ServiceID: svcID,
|
||||
EventDate: eventTime,
|
||||
Address: sqlNullString(in.Address),
|
||||
Notes: sqlNullString(in.Notes),
|
||||
Status: sql.NullString{String: "pending", Valid: true},
|
||||
})
|
||||
if err != nil {
|
||||
http.Error(w, "Failed to create booking", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
writeJSON(w, booking)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user