loopbackio / loopback-next

LoopBack makes it easy to build modern API applications that require complex integrations.
https://loopback.io
Other
4.95k stars 1.07k forks source link

[CLI] Remove the automatic "Controller" suffix from the controller command #886

Closed kjdelisle closed 6 years ago

kjdelisle commented 6 years ago

Overview

Original Description As a LoopBack 4 user, I would like the CLI tool to respect my naming choice, since I might not want the word Controller added to the end of my class name (Foo -> FooController).

Revised Description -- Based on discussion LB4 CLI is opinionated about the approach it takes for generating artifacts based on conventions we recommend / follow. Currently when a Controller is generated, users aren't made aware of the fact that we have appended the word Controller to the end of their answer to the prompt asking for a Controller class name. We must make it clear to the user the name of the class we've generated.

This is the approach we are going with and can be reviewed based on user feedback at a later time.

Acceptance Criteria

virkt25 commented 6 years ago

I don't agree. I though the CLI is supposed to follow the style we recommend and I think it's a good idea to add Controller suffix for class names so it's clear looking at a artifact the type of the artifact.

dhmlau commented 6 years ago

I don't have strong opinion on either approach. However, when I first use the cli command, i did have the puzzle why it is appending Controller without telling me.

If we are appending the suffix automatically, something to consider:

bajtos commented 6 years ago

I am personally fine with the current solution, where Controller is appended to the class name. I see how this can be confusing though, I like Diana's proposal to add some sort of a hint - either in the prompt or after accepting the value from the user.

raymondfeng commented 6 years ago

If we decide to recommend a name following a convention, we SHOULD prompt the value so that users can override it.

virkt25 commented 6 years ago

+1 for allowing users to override the convention if they want but we keep it.

dhmlau commented 6 years ago

Currently if we run lb4 controller, we have:

$ lb4 controller
? Controller class name: Test
? What kind of controller would you like to generate? (Use arrow keys)
❯ Empty Controller
  REST Controller with CRUD functions

Are we going with:

$ lb4 controller
? Controller name: Test
? Controller class name: (TestController)
? What kind of controller would you like to generate? (Use arrow keys)

I'm not sure how we can better prompt the user for the "first name" to derive the controller class name. Please comment.

virkt25 commented 6 years ago

As much as I like the above approach, as I was about to edit the issue with the final acceptance criteria I realized that the second prompt is now just a redundant prompt. Are we ok with that?

And I looked at Angular CLI, and for components made using it, they just append the word Component as a suffix like we do with Controller. While it's confusing, I'm wondering if this is really an issue.

If it is, then I'm ok to add a redundant prompt, but if we can avoid it then I'd like to do that. Maybe we just need to change our success message

FROM Controller ShoppingCart is now created in src/controllers/

TO Controller ShoppingCartController is now created in src/controllers/shopping-cart.controller.ts

We can possibly add color to the controller name and file name to draw a user's attention using the chalk module.

bajtos commented 6 years ago

+1 for @virkt25 proposal above. I would even remove the first "Controller" word from the message, it feels redundant to me.

ShoppingCartController was created in src/controllers/shopping-cart.controller.ts