diff --git a/web/handler/handler.go b/web/handler/handler.go index b101438..c80aadc 100644 --- a/web/handler/handler.go +++ b/web/handler/handler.go @@ -75,6 +75,7 @@ func New(cfg *config.Config, sess *session.Session, data *storage.Storage) (http router.HandleFunc("/statuses/save", h.saveStatus).Methods(http.MethodPost) router.HandleFunc("/statuses/{id}/edit", h.showEditStatusView).Methods(http.MethodGet) router.HandleFunc("/statuses/{id}/update", h.updateStatus).Methods(http.MethodPost) + router.HandleFunc("/statuses/{id}/remove", h.handleRemoveStatus) return router, nil } diff --git a/web/handler/html.go b/web/handler/html.go index d8275f8..d776d1e 100644 --- a/web/handler/html.go +++ b/web/handler/html.go @@ -3,6 +3,13 @@ package handler var TplMap = map[string]string{ + "confirm_remove_status": `{{ define "content" }} +Are you sure you you want to delete the following status? +

{{ .status.Content }}

+
+ +
+{{ end }}`, "create_status": `{{ define "content" }}

New status

{{ if .form.Error }} diff --git a/web/handler/html/confirm_remove_status.html b/web/handler/html/confirm_remove_status.html new file mode 100644 index 0000000..5455ff5 --- /dev/null +++ b/web/handler/html/confirm_remove_status.html @@ -0,0 +1,7 @@ +{{ define "content" }} +Are you sure you you want to delete the following status? +

{{ .status.Content }}

+
+ +
+{{ end }} \ No newline at end of file diff --git a/web/handler/status_remove.go b/web/handler/status_remove.go new file mode 100644 index 0000000..19d2060 --- /dev/null +++ b/web/handler/status_remove.go @@ -0,0 +1,35 @@ +package handler + +import ( + "net/http" +) + +func (h *Handler) handleRemoveStatus(w http.ResponseWriter, r *http.Request) { + user, err := h.getUser(r) + if err != nil { + unauthorized(w) + return + } + status, err := h.storage.StatusById(RouteInt64Param(r, "id")) + if err != nil { + serverError(w, err) + return + } + if user != status.User { + unauthorized(w) + return + } + switch r.Method { + case "GET": + h.renderLayout(w, "confirm_remove_status", map[string]interface{}{ + "status": status, + }, user) + case "POST": + err = h.storage.DeleteStatus(status.Id, user) + if err != nil { + serverError(w, err) + return + } + http.Redirect(w, r, "/", http.StatusFound) + } +}