# Configurações necessárias

Você precisará instalar o banco de dados *Postgress*. Pode ser via terminal ou via *docker*. O importante é termos ele. Existem diversos tutoriais na internet sobre, então não vou repetir aqui.&#x20;

Depois disso, precisamos configurar ele em nossa aplicação, e para isso utilizarei um wrapper de banco de dados. O famoso [Ecto](https://hexdocs.pm/ecto/getting-started.html).

Mas antes disso, precisamos atualizar nosso app para ter suporte a árvore de supervisão.

## Suporte árvore de supervisão

*Ecto* trabalha como um *wrapper* de banco de dados. Isso quer dizer que podemos fazer queries com ele utilizando uma linguagem mais clara. Um detalhes importante, o *Ecto* deve ser rodado como um supervisor. Isso quer dizer, nossa aplicação deve ter suporte a uma [árvore de supervisão](https://hexdocs.pm/elixir/supervisor-and-application.html). Talvez você esteja acostumado com essa nomenclatura, infelizmente não tenho espaço no livro para falar sobre isso aqui. Deixei um link para você se aprofundar no estudo. Nós aqui, seguiremos no projeto.

Nossa aplicação não possui uma árvore de supervisão. O primeiro passo de configuração é transformar ela em uma. Caso queira pular essa etapa, você pode criar um novo projeto ja adicionando a flag para ser uma aplicação com a árvore.

```
mix new [nome-do-projeto] --sup
```

Utilizando a flag `--sup` o novo projeto automaticamente terá suporte. Mas eu farei a mudança na mão. Caso tenha usado a flag, você pode pular para a seção [Adicionando Ecto ao projeto](/problemas-de-api-externa/rate-limit-de-longa-duracao/adicionando-ecto-ao-projeto.md).

## Adicionando árvore de supervisão

Vamos começar criando um módulo novo. Por convenção chamarei de *Application:*

<pre class="language-elixir" data-title="lib/coffee_shop/application.ex" data-line-numbers><code class="lang-elixir">defmodule CoffeeShop.Application do
  use Application

  def start(_type, _args) do
    children = []
    opts = [strategy: :one_for_one, name: CoffeeShop.Supervisor]

<strong>    Supervisor.start_link(children, opts)
</strong>  end
end
</code></pre>

Na linha 8 iniciamos o supervisor de nossa aplicação e passamos outros supervisores filhos. Adicionaremos depois o *Ecto* nesse pedaço.

Agora precisamos adicionar o supevisor de nossa aplicação ao nosso projeto. Vamos até o mix.exs e adicionar uma nova opção `mod` na função `application/0` passando o módulo Application que criamos.

<pre class="language-elixir" data-title="mix.exs" data-line-numbers><code class="lang-elixir">defmodule CoffeeShop.MixProject do
  use Mix.Project

  # ...
  
  def application do
    [
      extra_applications: [:logger],
<strong>      mod: {CoffeeShop.Application, []}
</strong>    ]
  end

  # ...
end
</code></pre>

Como segundo item da tupla adicionaremos uma lista vazia. Esse valor sçao argumentos que podemos passar para dentro do processo. Não temos necessidade de fazer isso, então, continuará vazio.

Pronto, nosso projeto agora tem suporte a árvore de supervisão. Podemos seguir.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://consumindo-apis-com-elixir.cafecomelixir.com.br/problemas-de-api-externa/rate-limit-de-longa-duracao/configuracoes-necessarias.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
