POC Flask application to apply repository pattern, dependency injection and inversion of control.
- Create a virtual environment at the root of the project:
py -m venv venv
- Activate virtual environment:
- CMD:
venv\Scripts\activate
- Git Bash:
source venv/Scripts/activate
- Install dependencies:
pip install -r requirements.txt
-
Create a new Postgres database at your machine or in a container named flask_dip
-
Update username, password and host of the connection URL on .env file at the root of the project
-
Create Tables:
flask db_create
- Run the server on port 5000:
flask run
- Use a REST Client to make requests to the API, such as Insomnia or Postman.
- Make a POST request to
http://localhost:5000/createUser
, with the following JSON body:
{
"id": 1,
"name": "Arthur"
}
-
Follow previous steps until step 3 included
-
Run tests:
pytest
Fiz esta POC com base principalmente em dois link:
- Cosmic Python (Principalmente capítulos 1, 2 e 4)
Todo o trabalho que está na branch master foi feito utilizando uma estrutura de pastas que fui achando mais sensato. Já a branch folder_structure segue a estrutura de pastas do primeiro artigo linkado acima.
-
Qual estrutura de pastas se encaixa melhor em uma aplicação de larga escala? É necessário alguma adaptação nelas?
-
Criei dois métodos para o UserService, e utilizo os dois métodos no endpoint de User, o qual contém a verificação de usuário existente. Esta é a forma mais correta de se fazer? Ou então deveria estar contida dentro de um método do service maior, que englobe os métodos
add
eget
do UserRepository? -
Escrevi dois testes unitários utilizando o FakeUserRepository apenas para exemplificar. Caso eu queira escrever um terceiro teste para a verificação de usuário existente, o mais correto seria construir um setup para um teste de integração no endpoint? Penso que se esta verificação estiver dentro do UserService, não precisaria de um teste de integração.
-
Alguma sugestão de mudança ou melhoria?