It's happened to me more than once, and honestly, 45 minutes for 2 km is way too much. The first thing you need to do is open the app and look for the "report a problem" or "make a complaint" option - it's usually in the completed order. Document that it arrived cold with a photo if you can, even if it's now. Both Glovo and Uber Eats have a partial refund system for these cases, so it shouldn't be complicated to get back at least the delivery fee, and sometimes part of the order too.
The app is your ally here, not the restaurant. The problem isn't that the place cooked the food badly, it's that it took forever to arrive - that's the delivery service's responsibility. I've seen that a lot of times they accept the complaint without a fuss if the wait was clearly out of proportion. The tip is another matter - if the app lets you remove it after reporting the incident, do it, because the delivery driver didn't do their job on time.
Don't just let the money go. That's 4.50€ you shouldn't have paid for a service that didn't work. Most apps are pretty used to these complaints and have a budget for them. If they don't accept your first complaint, push back or try contacting them directly through chat - sometimes the first automatic attempt fails, but if someone reviews it manually they'll sort it out.