AT&T has had generous trade-in options to upgrade an existing iPhone to a new one since forever. I’m typing this on an iPhone 12 that was bought for list price, but AT&T offered somewhere around $350 for an old iPhone 7Plus that was half broken. There’s absolutely no way I would have been able to resell that old phone for so much in the open market or through Apple’s trade-in program.
If you paid attention, these kind of trade-ins have been possible ever since the second iPhone appeared on the market.
It’s true that the trade-in locks me into a 2 year contract, but I can live with that: the plan matches my needs very well, so I don’t care, and I don’t upgrade phones every year either.
That doesn’t mean that I like AT&T’s customer experience: they signed me up for a warranty plan behind my back that I had to cancel after seeing my first bill. But that’s orthogonal to the earlier point.