diff --git a/docs/overview/usecase.md b/docs/overview/usecase.md index 6112bf7..e744aef 100644 --- a/docs/overview/usecase.md +++ b/docs/overview/usecase.md @@ -10,7 +10,7 @@ In the context of ExpressoTS, use cases represent the business logic of the appl ## We recommend -Despite you can use any design pattern you want such as **[MVC](controller.md#a-mvc-approach)**, in the ExpressoTS opinionated template we reinforce the use of the **[Clean architecture](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)** and **[SOLID principles](https://medium.com/backticks-tildes/the-s-o-l-i-d-principles-in-pictures-b34ce2f1e898)**. We believe that this approach will help you to build a more maintainable and scalable application. +Despite you can use any design pattern you want such as **[MVC](./controller.md#mvc-pattern)**, in the ExpressoTS opinionated template we reinforce the use of the **[Clean architecture](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)** and **[SOLID principles](https://medium.com/backticks-tildes/the-s-o-l-i-d-principles-in-pictures-b34ce2f1e898)**. We believe that this approach will help you to build a more maintainable and scalable application. It is best practice to have one use case per controller, with the controller being responsible for calling the corresponding use case that will implement the business logic of the request. The request payload, also known as request DTO in ExpressoTS, contains the information required to execute the use case. diff --git a/docusaurus.config.ts b/docusaurus.config.ts index f31516f..bd2997a 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -29,7 +29,7 @@ const config: Config = { deploymentBranch: "gh-pages", trailingSlash: false, - onBrokenLinks: "warn", // 'throw' | 'warn' | 'ignore' + onBrokenLinks: "throw", // 'throw' | 'warn' | 'ignore' onBrokenMarkdownLinks: "warn", i18n: { diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/codebyexample/bootstrao.md b/i18n/pt/docusaurus-plugin-content-docs/current/codebyexample/bootstrap.md similarity index 54% rename from i18n/pt/docusaurus-plugin-content-docs/current/codebyexample/bootstrao.md rename to i18n/pt/docusaurus-plugin-content-docs/current/codebyexample/bootstrap.md index c88b4dd..394e26a 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/codebyexample/bootstrao.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/codebyexample/bootstrap.md @@ -6,12 +6,12 @@ sidebar_position: 0 O método `bootstrap` é o ponto de entrada da sua aplicação. É responsável por carregar a configuração da aplicação, registrar middlewares e iniciar a aplicação. -- O método `AppFactory.create()` é responsável por criar a instância da aplicação. Ele recebe dois parâmetros: - - `container` é o contêiner de injeção de dependências. Veja Contêiner da Aplicação para mais informações. - - `middlewares` ou `App` -- Retorna um instância de `IApplicationExpress` que te dá acesso a dois métodos: - - `app.listen()` inicia a aplicação. - - `app.setEngine()` define o motor de renderização de visualização da aplicação.` +- O método `AppFactory.create()` é responsável por criar a instância da aplicação. Ele recebe dois parâmetros: +- `container` é o contêiner de injeção de dependências. Veja Contêiner da Aplicação para mais informações. +- `middlewares` ou `App` +- Retorna um instância de `IApplicationExpress` que te dá acesso a dois métodos: +- `app.listen()` inicia a aplicação. +- `app.setEngine()` define o motor de renderização de visualização da aplicação.` :::info **`middlewares`** é um array de middlewares que serão registrados na aplicação. (Template não opinativo) @@ -25,12 +25,13 @@ Use este método se você está usando o template não opinativo. Você tem a li ```typescript async function bootstrap() { - const app = await AppFactory.create(container, [cors(), helmet()]); - await app.listen(3000, ServerEnvironment.Development); + const app = await AppFactory.create(container, [cors(), helmet()]); + await app.listen(3000, ServerEnvironment.Development); } bootstrap(); ``` + :::tip **`AppFactory.create(container, [])`** retorna uma instância de `ApplicationExpress` que te dá acesso direto à instância do `ExpressApp`. ::: @@ -41,12 +42,13 @@ Use este método se você está usando o template opinativo. Sua classe de aplic ```typescript async function bootstrap() { - const app = await AppFactory.create(container, App); - await app.listen(3000, ServerEnvironment.Development); + const app = await AppFactory.create(container, App); + await app.listen(3000, ServerEnvironment.Development); } bootstrap(); ``` + :::tip **`AppFactory.create(container, App)`** retorna uma instância de `IApplicationExpress` que te dá acesso aos métodos `listen()` e `setEngine()`. ::: @@ -55,14 +57,14 @@ bootstrap(); O método `listen` é responsável por iniciar a aplicação. Ele recebe dois parâmetros obrigatórios e um parâmetro opcional: -- `port` é o número da porta onde a aplicação estará ouvindo. (Obrigatório) -- `environment` é o ambiente onde a aplicação estará rodando. Pode ser development ou production. Use o enum chamado `ServerEnvironment`. (Obrigatório) -- `consoleMessage` é o objeto de mensagem que será exibido no console quando a aplicação iniciar. (Opcional) +- `port` é o número da porta onde a aplicação estará ouvindo. (Obrigatório) +- `environment` é o ambiente onde a aplicação estará rodando. Pode ser development ou production. Use o enum chamado `ServerEnvironment`. (Obrigatório) +- `consoleMessage` é o objeto de mensagem que será exibido no console quando a aplicação iniciar. (Opcional) ```typescript await app.listen(3000, ServerEnvironment.Development, { - appName: "Expressots", - appVersion: "1.0.0", + appName: "Expressots", + appVersion: "1.0.0", }); ``` @@ -76,9 +78,9 @@ O método `setEngine` é responsável por definir o motor de renderização de v ```typescript app.setEngine({ - extName: "hbs", - viewPath: path.join(__dirname, "..", "views"), - engine: engine({ defaultLayout: "layout", extname: "hbs" }), + extName: "hbs", + viewPath: path.join(__dirname, "..", "views"), + engine: engine({ defaultLayout: "layout", extname: "hbs" }), }); ``` @@ -88,9 +90,9 @@ app.setEngine({ ExpressoTS é um projeto de código aberto licenciado sob o MIT. É um projeto independente com desenvolvimento contínuo possibilitado graças ao seu suporte. Se você deseja ajudar, por favor considere: -- Se tornar um **[Sponsor no GitHub](https://github.com/sponsors/expressots)** -- Siga a **[organização](https://github.com/expressots)** no GitHub e de um Star ⭐ no projeto -- Subscreva no nosso canal na Twitch: **[Richard Zampieri](https://www.twitch.tv/richardzampieri)** -- Entre no nosso **[Discord](https://discord.com/invite/PyPJfGK)** -- Contribua submetendo **[issues e pull requests](https://github.com/expressots/expressots/issues/new/choose)** -- Compartilhe o projeto com seus amigos e colegas \ No newline at end of file +- Se tornar um **[Sponsor no GitHub](https://github.com/sponsors/expressots)** +- Siga a **[organização](https://github.com/expressots)** no GitHub e de um Star ⭐ no projeto +- Subscreva no nosso canal na Twitch: **[Richard Zampieri](https://www.twitch.tv/richardzampieri)** +- Entre no nosso **[Discord](https://discord.com/invite/PyPJfGK)** +- Contribua submetendo **[issues e pull requests](https://github.com/expressots/expressots/issues/new/choose)** +- Compartilhe o projeto com seus amigos e colegas diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/codebyexample/controller.md b/i18n/pt/docusaurus-plugin-content-docs/current/codebyexample/controller.md index 782c7a8..1091de9 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/codebyexample/controller.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/codebyexample/controller.md @@ -6,32 +6,33 @@ sidebar_position: 3 Os controladores são responsáveis por manipular solicitações recebidas e retornar respostas ao cliente. -- Para informações sobre `BaseController`, veja [BaseController](../overview/controller.md#basecontroller-class). -- Para informações sobre decoradores HTTP e de parâmetros, veja [Decoradores HTTP e de Parâmetros](../overview/decorators.md). -- Os controladores utilizam DTOs para validar o corpo da solicitação, parâmetros de consulta e parâmetros de rota. Veja [DTOs](../overview/controller#dto-pattern) para mais informações. +- Para informações sobre `BaseController`, veja [BaseController](../overview/controller.md#classe-basecontroller). +- Para informações sobre decoradores HTTP e de parâmetros, veja [Decoradores HTTP e de Parâmetros](../overview/decorators.md). +- Os controladores utilizam DTOs para validar o corpo da solicitação, parâmetros de consulta e parâmetros de rota. Veja [DTOs](../overview/controller#padrão-dto) para mais informações. ```typescript @controller("/") export class UserGetController extends BaseController { - constructor() { - super(); - } - - @Get("/") - execute() { - return "Getting a user..."; - } + constructor() { + super(); + } + + @Get("/") + execute() { + return "Getting a user..."; + } } ``` Para criar um controlador, você precisa criar uma classe e decorá-la com o decorador `@controller`. O decorador `@controller` recebe dois parâmetros: -- `path` é o caminho do controlador. (Obrigatório) -- `middlewares` é um array de middlewares. (Opcional) +- `path` é o caminho do controlador. (Obrigatório) +- `middlewares` é um array de middlewares. (Opcional) ```typescript @controller("/", express.json(), express.urlencoded({ extended: true })) ``` + :::info Definir middlewares no controlador será aplicado a todas as rotas do controlador. ::: @@ -41,19 +42,19 @@ Definir middlewares no controlador será aplicado a todas as rotas do controlado ```typescript @controller("/user") export class UserController extends BaseController { - constructor() { - super(); - } - - @Get("/") - get() { - return "Getting a user..."; - } - - @Post("/create") - create() { - return "Creating a user..."; - } + constructor() { + super(); + } + + @Get("/") + get() { + return "Getting a user..."; + } + + @Post("/create") + create() { + return "Creating a user..."; + } } ``` @@ -85,15 +86,15 @@ Você pode injetar dependências no construtor do controlador da seguinte forma: ```typescript @controller("/") class AppController extends BaseController { - constructor(private yourProvider: YourProvider) { - super(); - } - - @Get("/") - get() { - this.yourProvider.doSomething(); - return "Hello ExpressoTS!"; - } + constructor(private yourProvider: YourProvider) { + super(); + } + + @Get("/") + get() { + this.yourProvider.doSomething(); + return "Hello ExpressoTS!"; + } } ``` @@ -103,9 +104,9 @@ class AppController extends BaseController { ExpressoTS é um projeto de código aberto licenciado sob o MIT. É um projeto independente com desenvolvimento contínuo possibilitado graças ao seu suporte. Se você deseja ajudar, por favor considere: -- Se tornar um **[Sponsor no GitHub](https://github.com/sponsors/expressots)** -- Siga a **[organização](https://github.com/expressots)** no GitHub e de um Star ⭐ no projeto -- Subscreva no nosso canal na Twitch: **[Richard Zampieri](https://www.twitch.tv/richardzampieri)** -- Entre no nosso **[Discord](https://discord.com/invite/PyPJfGK)** -- Contribua submetendo **[issues e pull requests](https://github.com/expressots/expressots/issues/new/choose)** -- Compartilhe o projeto com seus amigos e colegas \ No newline at end of file +- Se tornar um **[Sponsor no GitHub](https://github.com/sponsors/expressots)** +- Siga a **[organização](https://github.com/expressots)** no GitHub e de um Star ⭐ no projeto +- Subscreva no nosso canal na Twitch: **[Richard Zampieri](https://www.twitch.tv/richardzampieri)** +- Entre no nosso **[Discord](https://discord.com/invite/PyPJfGK)** +- Contribua submetendo **[issues e pull requests](https://github.com/expressots/expressots/issues/new/choose)** +- Compartilhe o projeto com seus amigos e colegas diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/overview/app-container.md b/i18n/pt/docusaurus-plugin-content-docs/current/overview/app-container.md index 43bcc1d..7b4d707 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/overview/app-container.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/overview/app-container.md @@ -61,9 +61,9 @@ export { container }; Como mencionado acima, se o `defaultScope` não for fornecido, o padrão é definido como `RequestScope`. No entanto, é possível alterar o escopo padrão passando o `defaultScope` como uma opção no construtor do contêiner. O `BindingScopeEnum` contém os seguintes valores: -- `BindingScopeEnum.Singleton` - A dependência será criada uma vez e será compartilhada entre todas as solicitações. -- `BindingScopeEnum.Request` - A dependência será criada uma vez por solicitação. -- `BindingScopeEnum.Transient` - A dependência será criada toda vez que for solicitada. +- `BindingScopeEnum.Singleton` - A dependência será criada uma vez e será compartilhada entre todas as solicitações. +- `BindingScopeEnum.Request` - A dependência será criada uma vez por solicitação. +- `BindingScopeEnum.Transient` - A dependência será criada toda vez que for solicitada. ## Visualizando as vinculações do contêiner @@ -72,6 +72,7 @@ O contêiner pode ser usado para visualizar todas as vinculações que foram reg ```typescript appContainer.viewContainerBindings(); ``` + ![Container Bindings View](./img/container-bindings.png) ## Registrando modulos @@ -98,9 +99,9 @@ O uso do `appContainer` abstrai as complexidades do uso direto do InversifyJS, p ExpressoTS é um projeto de código aberto licenciado sob o MIT. É um projeto independente com desenvolvimento contínuo possibilitado graças ao seu suporte. Se você deseja ajudar, por favor considere: -- Se tornar um **[Sponsor no GitHub](https://github.com/sponsors/expressots)** -- Siga a **[organização](https://github.com/expressots)** no GitHub e de um Star ⭐ no projeto -- Subscreva no nosso canal na Twitch: **[Richard Zampieri](https://www.twitch.tv/richardzampieri)** -- Entre no nosso **[Discord](https://discord.com/invite/PyPJfGK)** -- Contribua submetendo **[issues e pull requests](https://github.com/expressots/expressots/issues/new/choose)** -- Compartilhe o projeto com seus amigos e colegas \ No newline at end of file +- Se tornar um **[Sponsor no GitHub](https://github.com/sponsors/expressots)** +- Siga a **[organização](https://github.com/expressots)** no GitHub e de um Star ⭐ no projeto +- Subscreva no nosso canal na Twitch: **[Richard Zampieri](https://www.twitch.tv/richardzampieri)** +- Entre no nosso **[Discord](https://discord.com/invite/PyPJfGK)** +- Contribua submetendo **[issues e pull requests](https://github.com/expressots/expressots/issues/new/choose)** +- Compartilhe o projeto com seus amigos e colegas diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/overview/usecase.md b/i18n/pt/docusaurus-plugin-content-docs/current/overview/usecase.md index 7ef898e..1c17fde 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/overview/usecase.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/overview/usecase.md @@ -10,7 +10,7 @@ No contexto do ExpressoTS, os casos de uso servem para representar a lógica de ## Nós recomendamos -Apesar de você poder usar qualquer padrão de design que desejar como **[MVC](controller.md#a-mvc-approach)**, no template opinativo do ExpressoTS reforçamos o uso da **[Arquitetura Limpa](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)** e **[princípios SOLID](https://medium.com/backticks-tildes/the-s-o-l-i-d-princípios-em-imagens-b34ce2f1e898)**. Acreditamos que essa abordagem ajudará você a criar um aplicativo mais sustentável e escalável. +Apesar de você poder usar qualquer padrão de design que desejar como **[MVC](./controller.md#padrão-mvc)**, no template opinativo do ExpressoTS reforçamos o uso da **[Arquitetura Limpa](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)** e **[princípios SOLID](https://medium.com/backticks-tildes/the-s-o-l-i-d-princípios-em-imagens-b34ce2f1e898)**. Acreditamos que essa abordagem ajudará você a criar um aplicativo mais sustentável e escalável. É uma prática recomendada ter um caso de uso por controlador, sendo o controlador responsável por chamar o caso de uso correspondente que irá implementar a lógica de negócios da solicitação. A carga útil da solicitação, também conhecida como DTO de solicitação no ExpressoTS, contém as informações necessárias para executar o caso de uso. diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/providers/envvalidator.md b/i18n/pt/docusaurus-plugin-content-docs/current/providers/envvalidator.md index 5898719..1fbb237 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/providers/envvalidator.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/providers/envvalidator.md @@ -13,13 +13,13 @@ Ele está incluso apenas no modelo opinativo ou quando você cria uma classe que Você pode encontrá-lo na pasta `src/providers/application` no modelo opinativo. -O `application.provider` é o provedor principal do aplicativo responsável por controlar o **[Application Lifecycle](../overview/application.md#application-lifecycle-hooks)**. +O `application.provider` é o provedor principal do aplicativo responsável por controlar o **[Application Lifecycle](../overview/application.md#hooks-de-ciclo-de-vida-da-aplicação)**. Dentro da classe Application você pode encontrar três métodos que são chamados na seguinte ordem: -- `configureServices()` : Configura serviços que devem ser inicializados antes do início do servidor. -- `postServerInitialization()` : Configura serviços que devem ser executados após o início do servidor. -- `serverShutdown()` : Realiza ações ou limpezas após o desligamento do servidor. +- `configureServices()` : Configura serviços que devem ser inicializados antes do início do servidor. +- `postServerInitialization()` : Configura serviços que devem ser executados após o início do servidor. +- `serverShutdown()` : Realiza ações ou limpezas após o desligamento do servidor. O provedor de validação de ambiente é chamado no método `configureServices()`, prevenindo que o aplicativo inicie se o arquivo `.env` estiver faltando ou se tiver variáveis de ambiente ausentes. @@ -41,9 +41,9 @@ Environments.get("PORT"); ExpressoTS é um projeto de código aberto licenciado sob o MIT. É um projeto independente com desenvolvimento contínuo possibilitado graças ao seu suporte. Se você deseja ajudar, por favor considere: -- Se tornar um **[Sponsor no GitHub](https://github.com/sponsors/expressots)** -- Siga a **[organização](https://github.com/expressots)** no GitHub e de um Star ⭐ no projeto -- Subscreva no nosso canal na Twitch: **[Richard Zampieri](https://www.twitch.tv/richardzampieri)** -- Entre no nosso **[Discord](https://discord.com/invite/PyPJfGK)** -- Contribua submetendo **[issues e pull requests](https://github.com/expressots/expressots/issues/new/choose)** -- Compartilhe o projeto com seus amigos e colegas +- Se tornar um **[Sponsor no GitHub](https://github.com/sponsors/expressots)** +- Siga a **[organização](https://github.com/expressots)** no GitHub e de um Star ⭐ no projeto +- Subscreva no nosso canal na Twitch: **[Richard Zampieri](https://www.twitch.tv/richardzampieri)** +- Entre no nosso **[Discord](https://discord.com/invite/PyPJfGK)** +- Contribua submetendo **[issues e pull requests](https://github.com/expressots/expressots/issues/new/choose)** +- Compartilhe o projeto com seus amigos e colegas