fixed deleting and editing also all status show up on homepage now

This commit is contained in:
aggie 2025-11-26 04:32:58 -05:00
parent eac0e88214
commit 8951a7f080
5 changed files with 110 additions and 40 deletions

View file

@ -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()
}

View file

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

View file

@ -27,6 +27,7 @@
{{ template "content" . }}
</main>
<footer>
<small><a href="https://treasurechest.alien.town/agnes/s1llyw0rdz">source</a></small>
</footer>
</div>

View file

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

View file

@ -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;
}