diff --git a/storage/status.go b/storage/status.go
index 97ad237..c9c35f4 100644
--- a/storage/status.go
+++ b/storage/status.go
@@ -31,7 +31,14 @@ func (p statusQueryBuilder) build() string {
func (s *Storage) populateStatus(rows *sql.Rows) (model.Status, error) {
var status model.Status
- err := rows.Scan(&status.Id, &status.User, &status.Content, &status.CreatedAt, &status.Face, &status.Number)
+ err := rows.Scan(
+ &status.Id,
+ &status.User,
+ &status.Content,
+ &status.CreatedAt,
+ &status.Face,
+ &status.Number,
+ )
if err != nil {
return status, err
}
@@ -45,30 +52,39 @@ func (s *Storage) CreateStatus(status model.Status) error {
if err != nil {
return err
}
- if err := tx.QueryRowContext(ctx, `INSERT INTO statuses (author, content, face, number) VALUES ($1, $2, $3, $4) RETURNING id`,
- status.User, status.Content, status.Face, status.Number).Scan(&statusId); err != nil {
+
+ if err := tx.QueryRowContext(ctx,
+ `INSERT INTO statuses (author, content, face, number)
+ VALUES ($1, $2, $3, $4) RETURNING id`,
+ status.User, status.Content, status.Face, status.Number,
+ ).Scan(&statusId); err != nil {
tx.Rollback()
return err
}
- if _, err := tx.ExecContext(ctx, `UPDATE users set status_id=$1 where name=$2`, statusId, status.User); err != nil {
+ if _, err := tx.ExecContext(ctx,
+ `UPDATE users SET status_id = $1 WHERE name = $2`,
+ statusId, status.User,
+ ); err != nil {
tx.Rollback()
return err
}
- err = tx.Commit()
- return err
+
+ return tx.Commit()
}
func (s *Storage) StatusById(id int64) (model.Status, error) {
var status model.Status
err := s.db.QueryRow(
- `SELECT id, author, content, face, created_at, number from statuses WHERE id=$1`, id).Scan(
+ `SELECT id, author, content, face, created_at, number
+ FROM statuses WHERE id=$1`, id,
+ ).Scan(
&status.Id,
&status.User,
&status.Content,
&status.Face,
&status.CreatedAt,
- &status.Number,
+ &status.Number,
)
return status, err
}
@@ -82,6 +98,7 @@ func (s *Storage) StatusByUsername(user string, perPage int, page int64) ([]mode
if err != nil {
return nil, false, err
}
+
var statuses []model.Status
for rows.Next() {
post, err := s.populateStatus(rows)
@@ -90,10 +107,12 @@ func (s *Storage) StatusByUsername(user string, perPage int, page int64) ([]mode
}
statuses = append(statuses, post)
}
+
if len(statuses) > perPage {
- return statuses[0:perPage], true, err
+ return statuses[:perPage], true, nil
}
- return statuses, false, err
+
+ return statuses, false, nil
}
func (s *Storage) StatusFeed() ([]model.Status, error) {
@@ -103,6 +122,7 @@ func (s *Storage) StatusFeed() ([]model.Status, error) {
if err != nil {
return nil, err
}
+
var statuses []model.Status
for rows.Next() {
post, err := s.populateStatus(rows)
@@ -111,7 +131,8 @@ func (s *Storage) StatusFeed() ([]model.Status, error) {
}
statuses = append(statuses, post)
}
- return statuses, err
+
+ return statuses, nil
}
func (s *Storage) Statuses(page int64, perPage int) ([]model.Status, bool, error) {
@@ -122,38 +143,41 @@ func (s *Storage) Statuses(page int64, perPage int) ([]model.Status, bool, error
if err != nil {
return nil, false, err
}
+
var statuses []model.Status
for rows.Next() {
post, err := s.populateStatus(rows)
if err != nil {
- return statuses, false, err
+ return nil, false, err
}
statuses = append(statuses, post)
}
+
if len(statuses) > perPage {
- return statuses[0:perPage], true, err
+ return statuses[:perPage], true, nil
}
- return statuses, false, err
+
+ return statuses, false, nil
}
func (s *Storage) LatestStatuses() ([]model.Status, error) {
rows, err := s.db.Query(`
- select
+ SELECT
statuses.id,
users.name,
statuses.content,
statuses.created_at,
statuses.face,
- statuses.number
- from
- users
- inner join statuses
- on users.status_id = statuses.id
- order by statuses.created_at desc;
+ statuses.number
+ FROM users
+ INNER JOIN statuses
+ ON users.status_id = statuses.id
+ ORDER BY statuses.created_at DESC;
`)
if err != nil {
return nil, err
}
+
var statuses []model.Status
for rows.Next() {
post, err := s.populateStatus(rows)
@@ -162,15 +186,29 @@ func (s *Storage) LatestStatuses() ([]model.Status, error) {
}
statuses = append(statuses, post)
}
- return statuses, err
+
+ return statuses, nil
}
func (s *Storage) UpdateStatus(status model.Status) error {
- stmt, err := s.db.Prepare(`UPDATE statuses SET content = $1, face = $2, number = $3 WHERE id = $4 and author = $5;`)
+ stmt, err := s.db.Prepare(`
+ UPDATE statuses
+ SET content = $1, face = $2, number = $3
+ WHERE id = $4 AND author = $5;
+ `)
if err != nil {
return err
}
- _, err = stmt.Exec(status.Content, status.Face, status.Id, status.User, status.Number)
+
+
+ _, err = stmt.Exec(
+ status.Content,
+ status.Face,
+ status.Number,
+ status.Id,
+ status.User,
+ )
+
return err
}
@@ -180,42 +218,72 @@ func (s *Storage) DeleteStatus(id int64, author string) error {
if err != nil {
return err
}
+
var latestId int64
- if err := tx.QueryRowContext(ctx, `select status_id from users where name = $1`,
- author).Scan(&latestId); err != nil {
+ 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 {
+
+ 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 {
+
+ 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 {
- if _, err := tx.ExecContext(ctx, `UPDATE users set status_id=$1 where name=$2`, nil, author); err != nil {
+ err := tx.QueryRowContext(ctx,
+ `SELECT id FROM statuses
+ WHERE author = $1
+ ORDER BY created_at DESC
+ LIMIT 1`,
+ author,
+ ).Scan(&newId)
+
+ if err == sql.ErrNoRows {
+ _, err = tx.ExecContext(ctx,
+ `UPDATE users SET status_id = NULL WHERE name = $1`,
+ author)
+ if err != nil {
tx.Rollback()
return err
}
- err = tx.Commit()
- return err
- }
- if _, err := tx.ExecContext(ctx, `UPDATE users set status_id=$1 where name=$2`, newId, author); err != nil {
+ } else if err == nil {
+ _, err = tx.ExecContext(ctx,
+ `UPDATE users SET status_id = $1 WHERE name = $2`,
+ newId, author)
+ if err != nil {
+ tx.Rollback()
+ return err
+ }
+ } else {
tx.Rollback()
return err
}
} else {
- if _, err := tx.ExecContext(ctx, `UPDATE users set status_id=$1 where name=$2`, latestId, author); err != nil {
+ _, err := tx.ExecContext(ctx,
+ `UPDATE users SET status_id = $1 WHERE name = $2`,
+ latestId, author)
+
+ if err != nil {
tx.Rollback()
return err
}
}
- err = tx.Commit()
- return err
+ return tx.Commit()
}
diff --git a/web/handler/common.go b/web/handler/common.go
index b8415ef..3a2881d 100644
--- a/web/handler/common.go
+++ b/web/handler/common.go
@@ -37,6 +37,7 @@ var TplCommonMap = map[string]string{
{{ template "content" . }}
diff --git a/web/handler/html/common/layout.html b/web/handler/html/common/layout.html
index 4b3502f..ee4963d 100644
--- a/web/handler/html/common/layout.html
+++ b/web/handler/html/common/layout.html
@@ -27,6 +27,7 @@
{{ template "content" . }}
diff --git a/web/handler/index_show.go b/web/handler/index_show.go
index 0fcb37f..705e5cf 100644
--- a/web/handler/index_show.go
+++ b/web/handler/index_show.go
@@ -14,7 +14,7 @@ type Update struct {
func (h *Handler) showIndexView(w http.ResponseWriter, r *http.Request) {
protectClickJacking(w)
user, _ := h.sess.Get(r)
- statuses, err := h.storage.LatestStatuses()
+ statuses, err := h.storage.StatusFeed()
if err != nil {
serverError(w, err)
return
diff --git a/web/handler/widget_show.go b/web/handler/widget_show.go
index da381c0..5b0d070 100644
--- a/web/handler/widget_show.go
+++ b/web/handler/widget_show.go
@@ -33,7 +33,7 @@ fetch("https://sillywordz.kissing.computer/users/` + escName + `/status.json")
"I wrote " + r.number + " words on my project!";
if (r.content && r.content.trim().length > 0) {
- document.getElementById("sillywordz-content").innerText =
+ document.getElementById("sillywordz-content").innerHTML =
"And I had this to say about it: " + r.content;
}