added delete message function
This commit is contained in:
@@ -107,3 +107,45 @@ func checkMembership(db *sql.DB, userID uuid.UUID, conversationID uuid.UUID) (bo
|
|||||||
}
|
}
|
||||||
return isMember, nil
|
return isMember, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func DeleteMessage(db *sql.DB, userID uuid.UUID, conversationID uuid.UUID, messageID int) error {
|
||||||
|
checkMessageOwnershipQuery := `
|
||||||
|
SELECT user_id FROM Messages WHERE message_id = $1;
|
||||||
|
`
|
||||||
|
deleteMessageQuery := `
|
||||||
|
DELETE FROM Messages WHERE message_id = $1;
|
||||||
|
`
|
||||||
|
|
||||||
|
var messageOwnerID uuid.UUID
|
||||||
|
err := db.QueryRow(checkMessageOwnershipQuery, messageID).Scan(&messageOwnerID)
|
||||||
|
if err != nil {
|
||||||
|
return helpers.NewError(helpers.ErrInternal, "Failed to delete message", fmt.Errorf("failed to check message ownership: %w", err))
|
||||||
|
}
|
||||||
|
|
||||||
|
var isSelfMessage bool
|
||||||
|
if messageOwnerID == userID {
|
||||||
|
isSelfMessage = true
|
||||||
|
}
|
||||||
|
|
||||||
|
isAdmin, err := IsAdmin(db, userID, conversationID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if !isSelfMessage && !isAdmin {
|
||||||
|
return helpers.NewError(helpers.ErrForbidden, "You don't have permissions to delete that message ", nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
row, err := db.Exec(deleteMessageQuery, messageID)
|
||||||
|
if err != nil {
|
||||||
|
return helpers.NewError(helpers.ErrInternal, "Failed to delete message", fmt.Errorf("failed to delete message: %w", err))
|
||||||
|
}
|
||||||
|
rowsAffected, err := row.RowsAffected()
|
||||||
|
if err != nil {
|
||||||
|
return helpers.NewError(helpers.ErrInternal, "Failed to delete message", fmt.Errorf("failed to get rows affected: %w", err))
|
||||||
|
}
|
||||||
|
if rowsAffected == 0 {
|
||||||
|
return helpers.NewError(helpers.ErrNotFound, "Message not found", nil)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user