Skip to content

Commit

Permalink
Merge pull request #268 from NatalNW7/style/legibilidade-aula-4
Browse files Browse the repository at this point in the history
Melhora a legibilidade de alguns topicos da aula 4
  • Loading branch information
dunossauro authored Nov 17, 2024
2 parents b8d618b + 51397ec commit 8a4523c
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions aulas/04.md
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ TOTAL 54 2 96%

Neste caso, podemos ver que todos os nossos testes passaram com sucesso. Isso significa que nossa funcionalidade de criação de usuário está funcionando corretamente e que nosso modelo de usuário está sendo corretamente persistido no banco de dados.

Embora tudo esteja se encaixando bem, esse teste não é muito legal, pois não faz a validação do objeto como um todo. Conseguimos garantir que toda a estrutura do bando de dados funciona, porém, não conseguimos garantir ainda que todos os valores estão corretos.
Embora tudo esteja se encaixando bem, esse teste não é muito legal, pois não faz a validação do objeto como um todo. Conseguimos garantir que toda a estrutura do banco de dados funciona, porém, não conseguimos garantir ainda que todos os valores estão corretos.

## Eventos do ORM

Expand All @@ -350,7 +350,7 @@ Isso nos permite modificar os dados antes ou depois de determinadas operações

Por exemplo, nosso modelo de `User` não permite que sejam enviados os campos `id` e `created_at` no momento em que a instância de `User` é criada. Por conta da restrição `init=False` no `mapped_column`.

Escrever testes com essa restrição pode nos trazer algumas dificuldades no momento das validações (asserts). Então vamos programar um evento para acontecer **antes** que o dado seja inserido no banco de dados.
Ao escrever testes, essa restrição pode nos trazer algumas dificuldades no momento das validações (asserts). Então vamos programar um evento para acontecer **antes** que o dado seja inserido no banco de dados.

```mermaid
flowchart TD
Expand Down Expand Up @@ -411,7 +411,7 @@ def _mock_db_time(*, model, time=datetime(2024, 1, 1)): #(2)!
1. O decorador `#!python @contextmanager` cria um gerenciador de contexto para que a função `_mock_db_time` seja usada com um bloco `#!python with`. Caso você não tenha experiência com gerenciadores de contexto, você pode assistir a [essa Live](https://youtu.be/fR73UVNXb04){:target="_blank"}.
2. Todos os parâmetros após `*` devem ser chamados de forma nomeada, para ficarem explícitos na função. Ou seja `mock_db_time(model=User)`. Os parâmetros não podem ser chamados de forma posicional `_mock_db_time(User)`, isso acarretará em um erro.
3. Função para alterar alterar o método `created_at` do objeto de target.
4. `event.listen` adiciona um evento relação a um `model` que será passado a função. Esse evento é o `before_insert`, ele executará uma função (hook) antes de inserir o registro no banco de dados. O hook é a função `fake_time_handler`.
4. `event.listen` adiciona um evento relação a um `model` que será passado a função. Esse evento é o `before_insert`, ele executará uma função (hook) antes de inserir o registro no banco de dados. O hook é a função `fake_time_hook`.
5. Retorna o datetime na abertura do gerenciamento de contexto.
6. Após o final do gerenciamento de contexto o hook dos eventos é removido.

Expand Down Expand Up @@ -468,7 +468,7 @@ O teste permanece praticamente igual, com a diferença de que todas as operaçõ

Isso faz com que durante o `commit`, quando os objetos são persistidos da sessão para o banco de dados, o evento de `before_insert` seja executado para cada objeto do modelo passado em `mock_db_time(model=*MODEL*)`.

Por conta do campo `created_at` agora ser determinístico podemos fazer uma comparação completa dos campos.
Por conta do campo `created_at` agora ser determinístico podemos fazer uma comparação completa dos campos.

Para simplificar a comparação de todos os campos, como nossos objetos de modelo são dataclasses, a função `dataclass.asdict()`, converte uma dataclass para um dicionário:

Expand Down Expand Up @@ -571,7 +571,7 @@ Com isso, a estrutura do nosso projeto sofre algumas alterações e novos arquiv
└── test_db.py
```

No arquivo `alembic.ini`: ficam as configurações gerais das nossas migrações. Na pasta `migrations` foram criados um arquivo chamado `env.py`, esse arquivo é responsável por como as migrações serão feitas, e o arquivo `script.py.mako` é um template para as novas migrações.
No arquivo `alembic.ini`: ficam as configurações gerais das nossas migrações. Na pasta `migrations` foram criados dois arquivos, um chamado `env.py` que é responsável por como as migrações serão feitas, e o outro chamado `script.py.mako` que é um template para as novas migrações.

### Criando uma migração automática

Expand Down Expand Up @@ -701,7 +701,7 @@ Vamos acessar o console do sqlite e verificar se isso foi feito. Precisamos cham
```shell title="$ Execução no terminal!"
sqlite3 database.db
```

??? tip "Caso não tenha o SQLite instalado na sua máquina:"

```shell title="Arch"
Expand Down

0 comments on commit 8a4523c

Please sign in to comment.