@Injectable() marks a class as a provider that Nest can create and inject into other classes. @Controller() marks a class as a controller that handles HTTP requests, optionally under a route prefix such as 'users'.
Use @Injectable() for services, repositories and other classes that hold business logic. You list them in a module's providers array. Nest then injects them into the constructors of controllers and other providers in that module.
Use @Controller() for the classes that define your API endpoints. Their methods carry route decorators such as @Get() and @Post(), and you list the class in a module's controllers array.
Controllers can have services injected into them, but services are not controllers. Keep controllers thin. They read the request and hand the business logic and data access to services.
Rewriting in plainer words…
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.