From b4c45f92b6985968c30c0348ea95b0c4b4d8b9fd Mon Sep 17 00:00:00 2001 From: m15o Date: Sun, 20 Feb 2022 08:03:39 +0100 Subject: [PATCH] Add status page --- storage/status.go | 3 ++- web/handler/feed_show.go | 2 +- web/handler/handler.go | 1 + web/handler/html.go | 21 ++++++--------------- web/handler/html/status.html | 21 ++++++--------------- web/handler/status_show.go | 18 ++++++++++++++++++ 6 files changed, 34 insertions(+), 32 deletions(-) create mode 100644 web/handler/status_show.go diff --git a/storage/status.go b/storage/status.go index 5f7dfee..4ce0288 100644 --- a/storage/status.go +++ b/storage/status.go @@ -62,11 +62,12 @@ func (s *Storage) CreateStatus(status model.Status) error { func (s *Storage) StatusById(id int64) (model.Status, error) { var status model.Status err := s.db.QueryRow( - `SELECT id, author, content, face from statuses WHERE id=$1`, id).Scan( + `SELECT id, author, content, face, created_at from statuses WHERE id=$1`, id).Scan( &status.Id, &status.User, &status.Content, &status.Face, + &status.CreatedAt, ) return status, err } diff --git a/web/handler/feed_show.go b/web/handler/feed_show.go index d8905d0..5127ff3 100644 --- a/web/handler/feed_show.go +++ b/web/handler/feed_show.go @@ -69,7 +69,7 @@ func createAtomEntryFromStatus(status model.Status) *Entry { Link: []Link{ { Rel: "alternate", - Href: fmt.Sprintf("https://status.cafe/users/%s", status.User), + Href: fmt.Sprintf("https://status.cafe/status/%d", status.Id), Type: "text/html", }, }, diff --git a/web/handler/handler.go b/web/handler/handler.go index 07caa15..11b3b4f 100644 --- a/web/handler/handler.go +++ b/web/handler/handler.go @@ -85,6 +85,7 @@ func New(cfg *config.Config, sess *session.Session, data *storage.Storage, v vpu router.HandleFunc("/users/{user}", h.showUserView).Methods(http.MethodGet) router.HandleFunc("/users/{user}/status", h.showUserStatusView).Methods(http.MethodGet) router.HandleFunc("/users/{user}/status.json", h.showUserStatusJSONView).Methods(http.MethodGet) + router.HandleFunc("/statuses/{id}", h.showStatusView).Methods(http.MethodGet) router.HandleFunc("/users/{user}/badge.png", h.showUserStatusImageViewEmoji).Methods(http.MethodGet) router.PathPrefix("/assets/").Handler( diff --git a/web/handler/html.go b/web/handler/html.go index 099e511..1dbb168 100644 --- a/web/handler/html.go +++ b/web/handler/html.go @@ -316,21 +316,12 @@ var TplMap = map[string]string{ {{ end }}`, - "status": ` - - - - - status cafe - - - - -{{ if .status.Content }} -{{ template "status" .status }} -{{ end }} - -`, + "status": `{{ define "content" }} +
+

Status

+ {{ template "status" .status }} +
+{{ end }}`, "status-updater": `{{ define "content" }}

Status Updater

diff --git a/web/handler/html/status.html b/web/handler/html/status.html index 0f11011..8f67542 100644 --- a/web/handler/html/status.html +++ b/web/handler/html/status.html @@ -1,15 +1,6 @@ - - - - - - status cafe - - - - -{{ if .status.Content }} -{{ template "status" .status }} -{{ end }} - - \ No newline at end of file +{{ define "content" }} +
+

Status

+ {{ template "status" .status }} +
+{{ end }} \ No newline at end of file diff --git a/web/handler/status_show.go b/web/handler/status_show.go new file mode 100644 index 0000000..8b90453 --- /dev/null +++ b/web/handler/status_show.go @@ -0,0 +1,18 @@ +package handler + +import ( + "net/http" +) + +func (h *Handler) showStatusView(w http.ResponseWriter, r *http.Request) { + protectClickJacking(w) + user, _ := h.sess.Get(r) + status, err := h.storage.StatusById(RouteInt64Param(r, "id")) + if err != nil { + serverError(w, err) + return + } + h.renderLayout(w, "status", map[string]interface{}{ + "status": status, + }, user) +}