The discussion revolves around the purpose of post_number in Discourse. Kevin_Wildenradt questions why post_number is used alongside post_id, suggesting that post_id could serve the same purpose. sam explains that post_number allows for URLs to continue working even if a post is deleted, and provides a more readable and topic-specific identifier.
However, Kevin_Wildenradt counters that if a post is deleted, its post_number becomes outdated, and that post_id would behave similarly in this scenario. Mittineague points out the issue of post numbers not being updated after deletions.
sam clarifies that post_number is an alias for post_id used to maintain readable URLs, and that renumbering would break external links. Kevin_Wildenradt questions why reply_to_post_number is used instead of post_id for replies, suggesting that it would be more consistent to use post_id. sam acknowledges that this is a historical artifact that may be cleaned up in the future.
I’ve noticed that all posts bear both a post_id and a post_number. I understand that post_id is the unique identifier of the post in the entire forum, while post_number is the number of the post in its topic. Posts identify themselves as replies to other posts by referencing the post_number of another post in the reply_to_post_number field. Whenever any topic (or section of posts from a topic) is retrieved from the server, it contains a sorted array of the post_id’s of every post in the topic. The front end provides access to specific post_numbers via the URL, but when such a URL is actually accessed the request made to the back end is in terms of post_ids (presumably accessed from the above mentioned array).
This is all well and good, but it seems like everything post_number is used for could be accomplished with post_id instead: post_id’s are always increasing, so they can be used to determine the relative ordering of posts in a topic. Since they are globally unique they are certainly unique within each topic, and so could be used in a reply_to_post_id that serves the same purpose as reply_to_post_number.
TLDR; What purpose does post_number serve that could not be easily accomplished with post_id? If there is none then removing it would streamline the data model, which would seem to be a good thing.
How would post_id not work for this scenario? It would seem that if 2 is deleted, the third post would become the second post, but its post_number does not change accordingly and is now wrong. Post_id would behave the same way in this scenario, except that it would not wrongfully identify what is now the second post in the thread as the third.
@Mittineague I do not believe that post_number is ever updated, even in the event of post deletions. If it were updated then deleting a post would result in every link to every post after that post being broken.
I have just deleted the post immediately before this, post_number 5. This was post_number 6 before the deletion, and it still is if you look at the JSON representation of this topic Why post_number?
I have a running discourse instance without the 24 hour deletion delay, and in my testing there the post_number remains the same after deleting preceding posts.
That makes sense, but why is reply_to_post_number used to identify which post a post is a reply to? If post_number only exists to make URL’s look prettier, why is it the identifier that replies depend on? Wouldn’t it be more consistent to make replies depend on post_id, a much more fundamental identifier? You would have to check that a post with that post_id existed in the thread the reply was being posted in, but you already have to do that with post_number.