From f65255f6ebd9553eed1e6ffe949281d24d1067c5 Mon Sep 17 00:00:00 2001 From: srxr <10549030+srxr@users.noreply.github.com> Date: Sat, 27 Mar 2021 07:11:42 +0000 Subject: [PATCH] Handle delete URL --- models.go | 16 ++++++++++++++++ server.go | 24 ++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/models.go b/models.go index 2de869b..da02847 100644 --- a/models.go +++ b/models.go @@ -61,3 +61,19 @@ func (u *URL) update(target string) error { u.UpdatedAt = time.Now() return db.Update(u) } + +func del(id string) error { + var u URL + + err := db.One("ID", id, &u) + if err != nil { + return err + } + + err = db.DeleteStruct(&u) + if err != nil { + return err + } + + return nil +} diff --git a/server.go b/server.go index 58bf35c..d87d515 100644 --- a/server.go +++ b/server.go @@ -296,6 +296,29 @@ func (s *Server) ListenAndServe() { ) } +// DeleteHandler ... +func (s *Server) DeleteHandler() httprouter.Handle { + return func(w http.ResponseWriter, r *http.Request, p httprouter.Params) { + w.Header().Set("Content-Type", "application/json; charset=utf-8") + + id := p.ByName("id") + if id == "" { + http.Error(w, "Bad Request", http.StatusBadRequest) + return + } + + err := del(id) + if err != nil { + log.Printf("error delete id: %s: %v", id, err) + http.Error(w, "Iternal Error", http.StatusInternalServerError) + return + } + + http.Redirect(w, r, "/", http.StatusFound) + return + } +} + func (s *Server) initRoutes() { s.router.Handler("GET", "/debug/metrics", exp.ExpHandler(s.counters.r)) s.router.GET("/debug/stats", s.StatsHandler()) @@ -316,6 +339,7 @@ func (s *Server) initRoutes() { s.router.GET("/r/:id", s.RedirectHandler()) s.router.GET("/e/:id", s.EditHandler()) s.router.POST("/e/:id", s.UpdateHandler()) + s.router.GET("/d/:id", s.DeleteHandler()) } // NewServer ...