Fixed admin queue

This commit is contained in:
Asaf Gartner 2021-12-13 18:58:26 +02:00
parent 3b8b02a856
commit 1c48aab863
2 changed files with 23 additions and 11 deletions

View File

@ -696,20 +696,28 @@ func DeletePost(
tx pgx.Tx, tx pgx.Tx,
threadId, postId int, threadId, postId int,
) (threadDeleted bool) { ) (threadDeleted bool) {
isFirstPost, err := db.QueryBool(ctx, tx, type threadInfo struct {
FirstPostID int `db:"first_id"`
Deleted bool `db:"deleted"`
}
ti, err := db.QueryOne(ctx, tx, threadInfo{},
` `
SELECT thread.first_id = $1 SELECT $columns
FROM FROM
handmade_thread AS thread handmade_thread AS thread
WHERE WHERE
thread.id = $2 thread.id = $1
`, `,
postId,
threadId, threadId,
) )
if err != nil { if err != nil {
panic(oops.New(err, "failed to check if post was the first post in the thread")) panic(oops.New(err, "failed to fetch thread info"))
} }
info := ti.(*threadInfo)
if info.Deleted {
return true
}
isFirstPost := info.FirstPostID == postId
if isFirstPost { if isFirstPost {
// Just delete the whole thread and all its posts. // Just delete the whole thread and all its posts.

View File

@ -172,7 +172,7 @@ func AdminApprovalQueueSubmit(c *RequestContext) ResponseData {
if errors.Is(err, db.NotFound) { if errors.Is(err, db.NotFound) {
return RejectRequest(c, "User not found") return RejectRequest(c, "User not found")
} else { } else {
return c.ErrorResponse(http.StatusBadRequest, oops.New(err, "failed to fetch user")) return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to fetch user"))
} }
} }
user := u.(*models.User) user := u.(*models.User)
@ -189,7 +189,7 @@ func AdminApprovalQueueSubmit(c *RequestContext) ResponseData {
user.ID, user.ID,
) )
if err != nil { if err != nil {
return c.ErrorResponse(http.StatusBadRequest, oops.New(err, "failed to set user to approved")) return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to set user to approved"))
} }
whatHappened = fmt.Sprintf("%s approved successfully", user.Username) whatHappened = fmt.Sprintf("%s approved successfully", user.Username)
} else if action == ApprovalQueueActionSpammer { } else if action == ApprovalQueueActionSpammer {
@ -203,13 +203,16 @@ func AdminApprovalQueueSubmit(c *RequestContext) ResponseData {
user.ID, user.ID,
) )
if err != nil { if err != nil {
return c.ErrorResponse(http.StatusBadRequest, oops.New(err, "failed to set user to banned")) return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to set user to banned"))
} }
err = auth.DeleteSessionForUser(c.Context(), c.Conn, user.Username) err = auth.DeleteSessionForUser(c.Context(), c.Conn, user.Username)
if err != nil { if err != nil {
return c.ErrorResponse(http.StatusBadRequest, oops.New(err, "failed to log out user")) return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to log out user"))
} }
err = deleteAllPostsForUser(c.Context(), c.Conn, user.ID) err = deleteAllPostsForUser(c.Context(), c.Conn, user.ID)
if err != nil {
return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to delete spammer's posts"))
}
whatHappened = fmt.Sprintf("%s banned successfully", user.Username) whatHappened = fmt.Sprintf("%s banned successfully", user.Username)
} else { } else {
whatHappened = fmt.Sprintf("Unrecognized action: %s", action) whatHappened = fmt.Sprintf("Unrecognized action: %s", action)
@ -240,10 +243,11 @@ func fetchUnapprovedPosts(c *RequestContext) ([]*UnapprovedPost, error) {
JOIN auth_user AS author ON author.id = post.author_id JOIN auth_user AS author ON author.id = post.author_id
WHERE WHERE
NOT thread.deleted NOT thread.deleted
AND author.status = $1 AND NOT post.deleted
AND author.status = ANY($1)
ORDER BY post.postdate DESC ORDER BY post.postdate DESC
`, `,
models.UserStatusConfirmed, []models.UserStatus{models.UserStatusConfirmed},
) )
if err != nil { if err != nil {
return nil, oops.New(err, "failed to fetch unapproved posts") return nil, oops.New(err, "failed to fetch unapproved posts")