diff --git a/routes/plans.go b/routes/plans.go index 7ee439b..d0a30d2 100644 --- a/routes/plans.go +++ b/routes/plans.go @@ -6,11 +6,13 @@ import ( "github.com/go-chi/chi" "net/http" "strconv" + "time" ) func newPlanRouter(m *models.Model) http.Handler { router := chi.NewRouter() router.Get("/", getAllPlansFunc(m)) + router.Post("/", postPlanFunc(m)) router.Get("/{planid}", getPlanByIDFunc(m)) return router } @@ -52,3 +54,37 @@ func getPlanByIDFunc(m *models.Model) http.HandlerFunc { } } } + +type createPlanResponse struct { + CreatedPlan *models.Plan `json:"created_plan"` + ID int64 `json:"id"` +} + +func postPlanFunc(m *models.Model) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + + time := time.Now() + plan := &models.Plan{PlanDate: &time} + + id, err := m.AddPlan(plan) + if err != nil { + serverError(w, err) + return + } + plan, err = m.Plan(id) + if err != nil { + serverError(w, err) + return + } + + response := &createPlanResponse{ + CreatedPlan: plan, + ID: int64(id), + } + w.Header().Add("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(response); err != nil { + serverError(w, err) + } + + } +}