diff --git a/db/queries.sql b/db/queries.sql index aebe076..6359f24 100644 --- a/db/queries.sql +++ b/db/queries.sql @@ -18,6 +18,9 @@ UPDATE events SET title = ?, date = ?, time = ?, location = ? WHERE id = ?; -- name: UpdateEventLocation :exec UPDATE events SET location = ? WHERE id = ?; +-- name: UpdateEventDateTime :exec +UPDATE events SET date = ?, time = ? WHERE id = ?; + -- name: DeleteEvent :exec DELETE FROM events WHERE id = ?; diff --git a/db/queries.sql.go b/db/queries.sql.go index 158615a..4a42214 100644 --- a/db/queries.sql.go +++ b/db/queries.sql.go @@ -767,6 +767,21 @@ func (q *Queries) UpdateEvent(ctx context.Context, arg UpdateEventParams) error return err } +const updateEventDateTime = `-- name: UpdateEventDateTime :exec +UPDATE events SET date = ?, time = ? WHERE id = ? +` + +type UpdateEventDateTimeParams struct { + Date string + Time string + ID int64 +} + +func (q *Queries) UpdateEventDateTime(ctx context.Context, arg UpdateEventDateTimeParams) error { + _, err := q.db.ExecContext(ctx, updateEventDateTime, arg.Date, arg.Time, arg.ID) + return err +} + const updateEventDescription = `-- name: UpdateEventDescription :exec UPDATE events SET description = ? WHERE id = ? ` diff --git a/handlers.go b/handlers.go index 7fcf28e..3d99096 100644 --- a/handlers.go +++ b/handlers.go @@ -707,6 +707,26 @@ func (s *Server) handleUpdateLocation(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, fmt.Sprintf("/e/%s/admin/%s", event.Slug, event.AdminToken), http.StatusSeeOther) } +func (s *Server) handleUpdateDateTime(w http.ResponseWriter, r *http.Request) { + event := s.authorizeAdmin(w, r, false) + if event == nil { + return + } + + r.Body = http.MaxBytesReader(w, r.Body, 8*1024) + r.ParseForm() + date := sanitize(r.FormValue("date"), maxFieldLen) + time_ := sanitize(r.FormValue("time"), maxFieldLen) + + s.q.UpdateEventDateTime(r.Context(), db.UpdateEventDateTimeParams{ + Date: date, + Time: time_, + ID: event.ID, + }) + + http.Redirect(w, r, fmt.Sprintf("/e/%s/admin/%s", event.Slug, event.AdminToken), http.StatusSeeOther) +} + func (s *Server) handleCreateSlot(w http.ResponseWriter, r *http.Request) { event := s.authorizeAdmin(w, r, false) if event == nil { diff --git a/handlers_test.go b/handlers_test.go index eea6dde..e392c9f 100644 --- a/handlers_test.go +++ b/handlers_test.go @@ -215,6 +215,30 @@ func TestUpdateRsvp(t *testing.T) { } } +func TestUpdateEventDateTime(t *testing.T) { + _, q := setupTestDB(t) + ctx := context.Background() + event := createTestEvent(t, q) + + err := q.UpdateEventDateTime(ctx, db.UpdateEventDateTimeParams{ + Date: "Sunday, July 20", Time: "5:30 PM", ID: event.ID, + }) + if err != nil { + t.Fatal(err) + } + + updated, err := q.GetEventBySlug(ctx, event.Slug) + if err != nil { + t.Fatal(err) + } + if updated.Date != "Sunday, July 20" { + t.Fatalf("expected date 'Sunday, July 20', got %s", updated.Date) + } + if updated.Time != "5:30 PM" { + t.Fatalf("expected time '5:30 PM', got %s", updated.Time) + } +} + func TestCountGoing(t *testing.T) { _, q := setupTestDB(t) ctx := context.Background() diff --git a/main.go b/main.go index 4fe15f3..d274310 100644 --- a/main.go +++ b/main.go @@ -203,6 +203,7 @@ func main() { r.Get("/e/{slug}/admin/{token}", srv.handleAdmin) r.Post("/e/{slug}/admin/{token}/description", srv.handleUpdateDescription) r.Post("/e/{slug}/admin/{token}/location", srv.handleUpdateLocation) + r.Post("/e/{slug}/admin/{token}/datetime", srv.handleUpdateDateTime) r.Post("/e/{slug}/admin/{token}/slot", srv.handleCreateSlot) r.Delete("/e/{slug}/admin/{token}/slot/{slotID}", srv.handleDeleteSlot) diff --git a/templates/event.html b/templates/event.html index 7f1b1cc..6d3a224 100644 --- a/templates/event.html +++ b/templates/event.html @@ -93,6 +93,21 @@ {{end}} {{if .IsAdmin}} +