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/new", h.showNewStatusView).Methods(http.MethodGet)
|
||||||
router.HandleFunc("/statuses/save", h.saveStatus).Methods(http.MethodPost)
|
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
|
return router, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,21 @@ var TplMap = map[string]string{
|
||||||
</div>
|
</div>
|
||||||
<input type="submit" value="Submit">
|
<input type="submit" value="Submit">
|
||||||
</form>
|
</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 }}`,
|
{{ end }}`,
|
||||||
"index": `{{ define "content" }}
|
"index": `{{ define "content" }}
|
||||||
<p>This is the index</p>
|
<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