mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-21 23:22:34 +01:00
Merge pull request #154 from Mezeporta/fix/guild-posts-soft-delete
fix: soft-delete guild posts instead of hard-deleting
This commit is contained in:
6
schemas/patch-schema/28-guild-posts-soft-delete.sql
Normal file
6
schemas/patch-schema/28-guild-posts-soft-delete.sql
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
BEGIN;
|
||||||
|
|
||||||
|
-- Add soft-delete column to guild_posts, matching the pattern used by characters and mail tables.
|
||||||
|
ALTER TABLE guild_posts ADD COLUMN IF NOT EXISTS deleted boolean DEFAULT false NOT NULL;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
@@ -27,7 +27,7 @@ func handleMsgMhfEnumerateGuildMessageBoard(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
if pkt.BoardType == 1 {
|
if pkt.BoardType == 1 {
|
||||||
pkt.MaxPosts = 4
|
pkt.MaxPosts = 4
|
||||||
}
|
}
|
||||||
msgs, err := s.server.db.Queryx("SELECT id, stamp_id, title, body, author_id, created_at, liked_by FROM guild_posts WHERE guild_id = $1 AND post_type = $2 ORDER BY created_at DESC", guild.ID, int(pkt.BoardType))
|
msgs, err := s.server.db.Queryx("SELECT id, stamp_id, title, body, author_id, created_at, liked_by FROM guild_posts WHERE guild_id = $1 AND post_type = $2 AND deleted = false ORDER BY created_at DESC", guild.ID, int(pkt.BoardType))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Error("Failed to get guild messages from db", zap.Error(err))
|
s.logger.Error("Failed to get guild messages from db", zap.Error(err))
|
||||||
doAckBufSucceed(s, pkt.AckHandle, make([]byte, 4))
|
doAckBufSucceed(s, pkt.AckHandle, make([]byte, 4))
|
||||||
@@ -81,15 +81,15 @@ func handleMsgMhfUpdateGuildMessageBoard(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
if pkt.PostType == 1 {
|
if pkt.PostType == 1 {
|
||||||
maxPosts = 4
|
maxPosts = 4
|
||||||
}
|
}
|
||||||
if _, err := s.server.db.Exec(`DELETE FROM guild_posts WHERE id IN (
|
if _, err := s.server.db.Exec(`UPDATE guild_posts SET deleted = true WHERE id IN (
|
||||||
SELECT id FROM guild_posts WHERE guild_id = $1 AND post_type = $2
|
SELECT id FROM guild_posts WHERE guild_id = $1 AND post_type = $2 AND deleted = false
|
||||||
ORDER BY created_at DESC OFFSET $3
|
ORDER BY created_at DESC OFFSET $3
|
||||||
)`, guild.ID, pkt.PostType, maxPosts); err != nil {
|
)`, guild.ID, pkt.PostType, maxPosts); err != nil {
|
||||||
s.logger.Error("Failed to purge excess guild posts", zap.Error(err))
|
s.logger.Error("Failed to soft-delete excess guild posts", zap.Error(err))
|
||||||
}
|
}
|
||||||
case 1: // Delete message
|
case 1: // Delete message
|
||||||
if _, err := s.server.db.Exec("DELETE FROM guild_posts WHERE id = $1", pkt.PostID); err != nil {
|
if _, err := s.server.db.Exec("UPDATE guild_posts SET deleted = true WHERE id = $1", pkt.PostID); err != nil {
|
||||||
s.logger.Error("Failed to delete guild post", zap.Error(err))
|
s.logger.Error("Failed to soft-delete guild post", zap.Error(err))
|
||||||
}
|
}
|
||||||
case 2: // Update message
|
case 2: // Update message
|
||||||
if _, err := s.server.db.Exec("UPDATE guild_posts SET title = $1, body = $2 WHERE id = $3", pkt.Title, pkt.Body, pkt.PostID); err != nil {
|
if _, err := s.server.db.Exec("UPDATE guild_posts SET title = $1, body = $2 WHERE id = $3", pkt.Title, pkt.Body, pkt.PostID); err != nil {
|
||||||
@@ -122,7 +122,7 @@ func handleMsgMhfUpdateGuildMessageBoard(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
var newPosts int
|
var newPosts int
|
||||||
err := s.server.db.QueryRow("SELECT guild_post_checked FROM characters WHERE id = $1", s.charID).Scan(&timeChecked)
|
err := s.server.db.QueryRow("SELECT guild_post_checked FROM characters WHERE id = $1", s.charID).Scan(&timeChecked)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
_ = s.server.db.QueryRow("SELECT COUNT(*) FROM guild_posts WHERE guild_id = $1 AND (EXTRACT(epoch FROM created_at)::int) > $2", guild.ID, timeChecked.Unix()).Scan(&newPosts)
|
_ = s.server.db.QueryRow("SELECT COUNT(*) FROM guild_posts WHERE guild_id = $1 AND deleted = false AND (EXTRACT(epoch FROM created_at)::int) > $2", guild.ID, timeChecked.Unix()).Scan(&newPosts)
|
||||||
if newPosts > 0 {
|
if newPosts > 0 {
|
||||||
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x01})
|
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x01})
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user