{{ .Content }}
-diff --git a/assets/style.css b/assets/style.css
index 844c811..7e7af0c 100644
--- a/assets/style.css
+++ b/assets/style.css
@@ -24,7 +24,12 @@ a {
}
.status-content {
- margin: 0 1em;
+ margin: 0 1em 0.5em 1em;
+}
+
+.status nav {
+ font-size: 0.8em;
+ margin-left: 1em;
}
.status {
diff --git a/storage/status.go b/storage/status.go
index 63fd90a..a825ff8 100644
--- a/storage/status.go
+++ b/storage/status.go
@@ -152,10 +152,37 @@ func (s *Storage) UpdateStatus(status model.Status) error {
}
func (s *Storage) DeleteStatus(id int64, author string) error {
- stmt, err := s.db.Prepare(`DELETE from statuses WHERE id = $1 and author = $2;`)
+ ctx := context.Background()
+ tx, err := s.db.BeginTx(ctx, nil)
if err != nil {
return err
}
- _, err = stmt.Exec(id, author)
+ var latestId int64
+ if err := tx.QueryRowContext(ctx, `select status_id from users where name = $1`,
+ author).Scan(&latestId); err != nil {
+ tx.Rollback()
+ return err
+ }
+ if _, err := tx.ExecContext(ctx, `UPDATE users set status_id=$1 where name=$2`, nil, author); err != nil {
+ tx.Rollback()
+ return err
+ }
+ if _, err := tx.ExecContext(ctx, `DELETE from statuses WHERE id = $1 and author = $2;`, id, author); err != nil {
+ tx.Rollback()
+ return err
+ }
+ if latestId == id {
+ var newId int64
+ if err := tx.QueryRowContext(ctx, `select id from statuses where author = $1 order by created_at desc limit 1;`,
+ author).Scan(&newId); err != nil {
+ tx.Rollback()
+ return err
+ }
+ if _, err := tx.ExecContext(ctx, `UPDATE users set status_id=$1 where name=$2`, newId, author); err != nil {
+ tx.Rollback()
+ return err
+ }
+ }
+ err = tx.Commit()
return err
}
diff --git a/web/handler/common.go b/web/handler/common.go
index 5d3f796..0aeb216 100644
--- a/web/handler/common.go
+++ b/web/handler/common.go
@@ -37,9 +37,7 @@ var TplCommonMap = map[string]string{
{{ define "head" }}{{ end }}
`,
"status": `{{ define "status" }}
- {{ .Content }}
{{ .Content }}
{{ end }}`, } diff --git a/web/handler/handler.go b/web/handler/handler.go index 6c6433a..31d99f6 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("/status-new", h.showNewStatusView).Methods(http.MethodGet) router.HandleFunc("/status-save", h.saveStatus).Methods(http.MethodPost) + router.HandleFunc("/status-remove", h.handleRemoveStatus) router.HandleFunc("/statuses/{id}/edit", h.showEditStatusView).Methods(http.MethodGet) router.HandleFunc("/statuses/{id}/update", h.updateStatus).Methods(http.MethodPost) diff --git a/web/handler/html.go b/web/handler/html.go index 304b404..63250ca 100644 --- a/web/handler/html.go +++ b/web/handler/html.go @@ -6,7 +6,7 @@ var TplMap = map[string]string{ "confirm_remove_status": `{{ define "content" }} Are you sure you you want to delete the following status?{{ .status.Content }}
- @@ -96,7 +96,12 @@ Are you sure you you want to delete the following status?
diff --git a/web/handler/html/common/status.html b/web/handler/html/common/status.html
index 1b96a13..2b97063 100644
--- a/web/handler/html/common/status.html
+++ b/web/handler/html/common/status.html
@@ -1,6 +1,4 @@
{{ define "status" }}
- {{ .Content }}
{{ .Content }}
{{ end }} \ No newline at end of file diff --git a/web/handler/html/confirm_remove_status.html b/web/handler/html/confirm_remove_status.html index de1344c..d2ac2d6 100644 --- a/web/handler/html/confirm_remove_status.html +++ b/web/handler/html/confirm_remove_status.html @@ -1,7 +1,7 @@ {{ define "content" }} Are you sure you you want to delete the following status?{{ .status.Content }}
- diff --git a/web/handler/html/index.html b/web/handler/html/index.html index cf54db4..e611da1 100644 --- a/web/handler/html/index.html +++ b/web/handler/html/index.html @@ -22,7 +22,12 @@diff --git a/web/handler/status_remove.go b/web/handler/status_remove.go index 6d02481..80816be 100644 --- a/web/handler/status_remove.go +++ b/web/handler/status_remove.go @@ -2,7 +2,7 @@ package handler import ( "net/http" - "status/web/handler/form" + "strconv" ) func (h *Handler) handleRemoveStatus(w http.ResponseWriter, r *http.Request) { @@ -11,8 +11,12 @@ func (h *Handler) handleRemoveStatus(w http.ResponseWriter, r *http.Request) { unauthorized(w) return } - f := form.NewStatusForm(r) - status, err := h.storage.StatusById(f.Id) + id, err := strconv.ParseInt(r.URL.Query().Get("id"), 10, 64) + if err != nil { + serverError(w, err) + return + } + status, err := h.storage.StatusById(id) if err != nil { serverError(w, err) return