For me, it's not clear what the distinct difference will be between an error and a warning. Also having four different types of messages could give an information overload. When filling in a form, as an user, I just want to know if I'm doing it right or wrong. Just straightforward and as simple as possible so I can race through the submit.
Right now, based on the way you asked your question, I think you're in a developer mind set and your messages will reflect that. I don't know what kind of message you'll convey to the user when for example the unique name of the recipe is already taken, so off course I might be wrong.
I could give you some insight from personal experience when trying to set up the perfect registration form.
Error before submit
The users I tested hated having to submit the form before finding out if they entered their information correctly.
"I hope I entered the information correctly this time". submit
So run the validation when users are typing or have just entering the input field.
Give clear messages
The question "Why isn't it valid" was often heard, because the error message told the user the password they entered when registering was not valid. When telling them it had to be at least eight characters long they understood immediately.
Give messages at the right location
Some users gave a remark on the fact that the error messages were shown right beneath the input field it concerned. They were used to error messages shown at the top of page after which they had to find out what input field it was concerned.
Automatic help
The users were complementing us for filling in some input fields, like their address, based on information they already filled in (their postal code and streetnumber). This might not be useful for you since you have three inputs, but you could do it: you could add tags based on part of the name and some of the ingredients they fill in. If the tags play a big part in finding recipes, you could fill some tags in automatically in order to ensure every recipe comes with enough tags.
I hope this helps.