I didn't understand correctly how to use an APIView and a ViewSet. I thought that the two things are related and both needed to be implemented at the same time.
Now I understand that the APIView is a single point url, that is meant to be mapped inside urls.py while ViewSet include multiple crud operations and are meant to be used with routers.
Till this point the api worked because the APIView's urls were added first (before the router's urls), so when you went to localhost/api/v1/register you received the APIView not the router ViewSet. At the same time the links were present in api root because I included them in the router.
I made the changes that I believe will fix my confustion, for now, I just commented on the code that needs to be deleted before I receive a green light for my changes.