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