Thank you for your response,
You totally made a great point here, but let me make my points too,
on possibility of changing the database, it totally depends on the project but in some cases it's pretty likely to happen, for example: https://www.uber.com/blog/postgres-to-mysql-migration/ . I'm totally not dissing PostgreSQL here as it have proved itself in years of serving in production, but in some cases the better practice would be not to make the project depend on those features that are not specific to that database.
About constraints, there is no doubt that PostgreSQL is the beast as which provides the Serializable Snapshot Isolation which most RDBMSs don't, but if you decide to scale these transaction solutions doesn't scale well, then if you predict that you need to horizontally scale in the future these transactions might not be the best solution for you.
Now let ignore whatever I said before and set the PostgreSQL as our only solution, WHAT ABOUT TESTING? How we gonna be able to test our business logic without connecting to a database?
I checked out the article you send me about over using the interfaces, but I don't think that it applies here as symfony itself does this in many cases for example let's look at the documentation for validation:
https://symfony.com/doc/current/validation.html#using-the-validator-service
As you can see, we are type-hinting the validator interface instead of the implementation, but in my proposal I didn't do this for UseCases which in that case it doesn't make sense(It's not used blindly).