edit status
This commit is contained in:
parent
db62fa1bf7
commit
a5b7f045d6
5 changed files with 130 additions and 0 deletions
|
|
@ -73,6 +73,8 @@ func New(cfg *config.Config, sess *session.Session, data *storage.Storage) (http
|
|||
|
||||
router.HandleFunc("/statuses/new", h.showNewStatusView).Methods(http.MethodGet)
|
||||
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)
|
||||
|
||||
return router, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,21 @@ var TplMap = map[string]string{
|
|||
</div>
|
||||
<input type="submit" value="Submit">
|
||||
</form>
|
||||
{{ end }}`,
|
||||
"edit_status": `{{ define "content" }}
|
||||
<h1>Edit status</h1>
|
||||
{{ if .form.Error }}
|
||||
<p>{{ .form.Error }}</p>
|
||||
{{ end }}
|
||||
{{ if .flash }}
|
||||
<p>{{ .flash }}</p>
|
||||
{{ end }}
|
||||
<form action="/statuses/{{ .status.Id }}/update" method="post">
|
||||
<div class="field">
|
||||
<input type="text" name="content" placeholder="What's new?" required autofocus value="{{ .status.Content }}"/>
|
||||
</div>
|
||||
<input type="submit" value="Submit">
|
||||
</form>
|
||||
{{ end }}`,
|
||||
"index": `{{ define "content" }}
|
||||
<p>This is the index</p>
|
||||
|
|
|
|||
15
web/handler/html/edit_status.html
Normal file
15
web/handler/html/edit_status.html
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{{ define "content" }}
|
||||
<h1>Edit status</h1>
|
||||
{{ if .form.Error }}
|
||||
<p>{{ .form.Error }}</p>
|
||||
{{ end }}
|
||||
{{ if .flash }}
|
||||
<p>{{ .flash }}</p>
|
||||
{{ end }}
|
||||
<form action="/statuses/{{ .status.Id }}/update" method="post">
|
||||
<div class="field">
|
||||
<input type="text" name="content" placeholder="What's new?" required autofocus value="{{ .status.Content }}"/>
|
||||
</div>
|
||||
<input type="submit" value="Submit">
|
||||
</form>
|
||||
{{ end }}
|
||||
52
web/handler/status_edit.go
Normal file
52
web/handler/status_edit.go
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
package handler
|
||||
|
||||
import (
|
||||
"github.com/gorilla/mux"
|
||||
"net/http"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func RouteInt64Param(r *http.Request, param string) int64 {
|
||||
vars := mux.Vars(r)
|
||||
value, err := strconv.ParseInt(vars[param], 10, 64)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
|
||||
if value < 0 {
|
||||
return 0
|
||||
}
|
||||
|
||||
return value
|
||||
}
|
||||
|
||||
func (h *Handler) showEditStatusView(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
|
||||
}
|
||||
session, err := h.sess.Store.Get(r, "ichi")
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
flash := ""
|
||||
if flashes := session.Flashes(); len(flashes) > 0 {
|
||||
flash = flashes[0].(string)
|
||||
}
|
||||
session.Save(r, w)
|
||||
h.renderLayout(w, "edit_status", map[string]interface{}{
|
||||
"status": status,
|
||||
"flash": flash,
|
||||
}, user)
|
||||
}
|
||||
46
web/handler/status_update.go
Normal file
46
web/handler/status_update.go
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
package handler
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"status/web/handler/form"
|
||||
)
|
||||
|
||||
func (h *Handler) updateStatus(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
|
||||
}
|
||||
f := form.NewStatusForm(r)
|
||||
status.Content = f.Content
|
||||
if err := status.Validate(); err != nil {
|
||||
f.Error = err.Error()
|
||||
h.renderLayout(w, "edit_post", map[string]interface{}{
|
||||
"form": f,
|
||||
}, "")
|
||||
return
|
||||
}
|
||||
if err := h.storage.UpdateStatus(status); err != nil {
|
||||
serverError(w, err)
|
||||
return
|
||||
}
|
||||
session, err := h.sess.Store.Get(r, "ichi")
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
session.AddFlash("Status edited!")
|
||||
err = session.Save(r, w)
|
||||
http.Redirect(w, r, fmt.Sprintf("/statuses/%d/edit", status.Id), http.StatusFound)
|
||||
}
|
||||
Loading…
Reference in a new issue