fixed deleting and editing also all status show up on homepage now
This commit is contained in:
parent
eac0e88214
commit
8951a7f080
5 changed files with 110 additions and 40 deletions
|
|
@ -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()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ var TplCommonMap = map[string]string{
|
|||
{{ template "content" . }}
|
||||
</main>
|
||||
<footer>
|
||||
<small><a href="https://treasurechest.alien.town/agnes/s1llyw0rdz">source</a></small>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
{{ template "content" . }}
|
||||
</main>
|
||||
<footer>
|
||||
<small><a href="https://treasurechest.alien.town/agnes/s1llyw0rdz">source</a></small>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue