Soft deletion is not an anti-pattern. In real software you need to have possibility to delete items but they still need to be exist in historical items because of analytics, historical data integrity etc.
Soft delete is the only way to make this possible without horrible kludges.
Soft delete is the only way to make this possible without horrible kludges.