You are not "bad" because you ate. And you certainly don't need to punish yourself on you birthday.
I used to have some issues with binge eating and experienced similar feelings. Now that I've stepped away from that disordered pattern, I've really been able to see how much those emotions and reactions just fed the binges.
I know it's a huge leap, but please work on divorcing your emotions and self-worth from what you eat. I know some will argue saying you are good or bad for eating something is just an expression, but words have meanings that you internalize. You are not bad for eating sweets and you are not good for eating veggies.
Food is fuel for your body and can be pleasurable. Some choices are better than others. Instead of saying, "I was bad," say, "I made a poor choice." And then figure out why you did it. Was it emotional? Did you not plan your meals well? Were you too hungry? Sometimes, the answer is just going to be "Because I really wanted it." And that's good enough. Enjoy it and savor it without guilt and then just go on with you healthy eating., One meal didn't get you here and one meal or one day is not going to "ruin" it all.
As I've moved forward in this new way of thinking, the times I decide to make indulgent choices are much few and farther between. I also don't feel compelled to eat as if it is the last time I will ever have it. I know I can have it again if I really feel like it.
Of course you deserve to eat birthday cake! And enjoy every bite.