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) {
|
func (s *Storage) populateStatus(rows *sql.Rows) (model.Status, error) {
|
||||||
var status model.Status
|
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 {
|
if err != nil {
|
||||||
return status, err
|
return status, err
|
||||||
}
|
}
|
||||||
|
|
@ -45,30 +52,39 @@ func (s *Storage) CreateStatus(status model.Status) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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()
|
tx.Rollback()
|
||||||
return err
|
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()
|
tx.Rollback()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = tx.Commit()
|
|
||||||
return err
|
return tx.Commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) StatusById(id int64) (model.Status, error) {
|
func (s *Storage) StatusById(id int64) (model.Status, error) {
|
||||||
var status model.Status
|
var status model.Status
|
||||||
err := s.db.QueryRow(
|
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.Id,
|
||||||
&status.User,
|
&status.User,
|
||||||
&status.Content,
|
&status.Content,
|
||||||
&status.Face,
|
&status.Face,
|
||||||
&status.CreatedAt,
|
&status.CreatedAt,
|
||||||
&status.Number,
|
&status.Number,
|
||||||
)
|
)
|
||||||
return status, err
|
return status, err
|
||||||
}
|
}
|
||||||
|
|
@ -82,6 +98,7 @@ func (s *Storage) StatusByUsername(user string, perPage int, page int64) ([]mode
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, false, err
|
return nil, false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var statuses []model.Status
|
var statuses []model.Status
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
post, err := s.populateStatus(rows)
|
post, err := s.populateStatus(rows)
|
||||||
|
|
@ -90,10 +107,12 @@ func (s *Storage) StatusByUsername(user string, perPage int, page int64) ([]mode
|
||||||
}
|
}
|
||||||
statuses = append(statuses, post)
|
statuses = append(statuses, post)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(statuses) > perPage {
|
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) {
|
func (s *Storage) StatusFeed() ([]model.Status, error) {
|
||||||
|
|
@ -103,6 +122,7 @@ func (s *Storage) StatusFeed() ([]model.Status, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var statuses []model.Status
|
var statuses []model.Status
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
post, err := s.populateStatus(rows)
|
post, err := s.populateStatus(rows)
|
||||||
|
|
@ -111,7 +131,8 @@ func (s *Storage) StatusFeed() ([]model.Status, error) {
|
||||||
}
|
}
|
||||||
statuses = append(statuses, post)
|
statuses = append(statuses, post)
|
||||||
}
|
}
|
||||||
return statuses, err
|
|
||||||
|
return statuses, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) Statuses(page int64, perPage int) ([]model.Status, bool, error) {
|
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 {
|
if err != nil {
|
||||||
return nil, false, err
|
return nil, false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var statuses []model.Status
|
var statuses []model.Status
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
post, err := s.populateStatus(rows)
|
post, err := s.populateStatus(rows)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return statuses, false, err
|
return nil, false, err
|
||||||
}
|
}
|
||||||
statuses = append(statuses, post)
|
statuses = append(statuses, post)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(statuses) > perPage {
|
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) {
|
func (s *Storage) LatestStatuses() ([]model.Status, error) {
|
||||||
rows, err := s.db.Query(`
|
rows, err := s.db.Query(`
|
||||||
select
|
SELECT
|
||||||
statuses.id,
|
statuses.id,
|
||||||
users.name,
|
users.name,
|
||||||
statuses.content,
|
statuses.content,
|
||||||
statuses.created_at,
|
statuses.created_at,
|
||||||
statuses.face,
|
statuses.face,
|
||||||
statuses.number
|
statuses.number
|
||||||
from
|
FROM users
|
||||||
users
|
INNER JOIN statuses
|
||||||
inner join statuses
|
ON users.status_id = statuses.id
|
||||||
on users.status_id = statuses.id
|
ORDER BY statuses.created_at DESC;
|
||||||
order by statuses.created_at desc;
|
|
||||||
`)
|
`)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var statuses []model.Status
|
var statuses []model.Status
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
post, err := s.populateStatus(rows)
|
post, err := s.populateStatus(rows)
|
||||||
|
|
@ -162,15 +186,29 @@ func (s *Storage) LatestStatuses() ([]model.Status, error) {
|
||||||
}
|
}
|
||||||
statuses = append(statuses, post)
|
statuses = append(statuses, post)
|
||||||
}
|
}
|
||||||
return statuses, err
|
|
||||||
|
return statuses, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) UpdateStatus(status model.Status) error {
|
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 {
|
if err != nil {
|
||||||
return err
|
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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -180,42 +218,72 @@ func (s *Storage) DeleteStatus(id int64, author string) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var latestId int64
|
var latestId int64
|
||||||
if err := tx.QueryRowContext(ctx, `select status_id from users where name = $1`,
|
if err := tx.QueryRowContext(ctx,
|
||||||
author).Scan(&latestId); err != nil {
|
`SELECT status_id FROM users WHERE name = $1`,
|
||||||
|
author,
|
||||||
|
).Scan(&latestId); err != nil {
|
||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
return err
|
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()
|
tx.Rollback()
|
||||||
return err
|
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()
|
tx.Rollback()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if latestId == id {
|
if latestId == id {
|
||||||
var newId int64
|
var newId int64
|
||||||
if err := tx.QueryRowContext(ctx, `select id from statuses where author = $1 order by created_at desc limit 1;`,
|
err := tx.QueryRowContext(ctx,
|
||||||
author).Scan(&newId); err != nil {
|
`SELECT id FROM statuses
|
||||||
if _, err := tx.ExecContext(ctx, `UPDATE users set status_id=$1 where name=$2`, nil, author); err != nil {
|
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()
|
tx.Rollback()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = tx.Commit()
|
} else if err == nil {
|
||||||
return err
|
_, err = tx.ExecContext(ctx,
|
||||||
}
|
`UPDATE users SET status_id = $1 WHERE name = $2`,
|
||||||
if _, err := tx.ExecContext(ctx, `UPDATE users set status_id=$1 where name=$2`, newId, author); err != nil {
|
newId, author)
|
||||||
|
if err != nil {
|
||||||
|
tx.Rollback()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} 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()
|
tx.Rollback()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = tx.Commit()
|
return tx.Commit()
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ var TplCommonMap = map[string]string{
|
||||||
{{ template "content" . }}
|
{{ template "content" . }}
|
||||||
</main>
|
</main>
|
||||||
<footer>
|
<footer>
|
||||||
|
<small><a href="https://treasurechest.alien.town/agnes/s1llyw0rdz">source</a></small>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@
|
||||||
{{ template "content" . }}
|
{{ template "content" . }}
|
||||||
</main>
|
</main>
|
||||||
<footer>
|
<footer>
|
||||||
|
<small><a href="https://treasurechest.alien.town/agnes/s1llyw0rdz">source</a></small>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ type Update struct {
|
||||||
func (h *Handler) showIndexView(w http.ResponseWriter, r *http.Request) {
|
func (h *Handler) showIndexView(w http.ResponseWriter, r *http.Request) {
|
||||||
protectClickJacking(w)
|
protectClickJacking(w)
|
||||||
user, _ := h.sess.Get(r)
|
user, _ := h.sess.Get(r)
|
||||||
statuses, err := h.storage.LatestStatuses()
|
statuses, err := h.storage.StatusFeed()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
serverError(w, err)
|
serverError(w, err)
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ fetch("https://sillywordz.kissing.computer/users/` + escName + `/status.json")
|
||||||
"I wrote " + r.number + " words on my project!";
|
"I wrote " + r.number + " words on my project!";
|
||||||
|
|
||||||
if (r.content && r.content.trim().length > 0) {
|
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;
|
"And I had this to say about it: " + r.content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue