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" }} -
-
{{ .User }}, {{ .TimeAgo }}
-

{{ .Content }}

-
+
{{ .User }}, {{ .TimeAgo }}
+

{{ .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?

Status stream

{{ range .statuses }} - {{ template "status" . }} +
+ {{ template "status" . }} + {{ if eq $.logged .User }} + + {{ end }} +
{{ end }}
@@ -190,7 +195,12 @@ Are you sure you you want to delete the following status?

Statuses

{{ range .statuses }} - {{ template "status" . }} +
+ {{ template "status" . }} + {{ if eq $.logged .User }} + + {{ end }} +
{{ end }} {{ if or .showMore (ne 0 .page) }}

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" }} -

-
{{ .User }}, {{ .TimeAgo }}
-

{{ .Content }}

-
+
{{ .User }}, {{ .TimeAgo }}
+

{{ .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 @@

Status stream

{{ range .statuses }} - {{ template "status" . }} +
+ {{ template "status" . }} + {{ if eq $.logged .User }} + + {{ end }} +
{{ end }}
diff --git a/web/handler/html/user.html b/web/handler/html/user.html index 9ad72b7..b33b965 100644 --- a/web/handler/html/user.html +++ b/web/handler/html/user.html @@ -17,7 +17,12 @@

Statuses

{{ range .statuses }} - {{ template "status" . }} +
+ {{ template "status" . }} + {{ if eq $.logged .User }} + + {{ end }} +
{{ end }} {{ if or .showMore (ne 0 .page) }}

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