Setting end date and start date not required now in pre
I believe handling join date, start date, end date and status is not required to be handled in pre now unless there is a reason to since the doPayment() function sets the payment_status_id to Completed or Pending based on Smart debit settings which than executes completeTransaction() function which sets contribution status to Completed or Pending and also processes membership accordingly.
Since join date, start date, end date and status is set during pre hook when status is pending, when completeTransaction() is called it renews the membership. Eg if Someone buys membership of 1 year in pre the end date is set to 16th Feb 2021 and later after executing completeTransaction() the end date is updated to 16th Feb 2022. So the contacts get additional year benefits when they buy 1 year membership.