I think the cause of this problem is that you first agreed that the error was from your end and you were willing to pay partial refund or send extra parts for free. It actually let buyers think that no matter if the product actually has problems or not, you are willing to benefit them more whenever they complain.
What you should do is this:
1. If the buyer complains about your product for the first time, tell them to send it back so you can make an exchange.
2. If they agree, that's good. If they don't because they don't want to pay shipping fee to send it back (which normally happens), tell them that you will either send them a partial refund or send new parts for this time only.
3. If it occurs again, tell them that they will be in your blacklist(block list) and that they will not be able to purchase any items until they return the item. If they ask for a refund, just refund it. Better have a loyal and honest buyer than a cheap one.