Giter Club home page Giter Club logo

store_api's Introduction

TDD Project

O que é TDD?

TDD é uma sigla para Test Driven Development, ou Desenvolvimento Orientado a Testes. A ideia do TDD é que você trabalhe em ciclos.

Ciclo do TDD

C4

Vantagens do TDD

  • entregar software de qualidade;
  • testar procurando possíveis falhas;
  • criar testes de integração, testes isolados (unitários);
  • evitar escrever códigos complexos ou que não sigam os pré-requisitos necessários;

A proposta do TDD é que você codifique antes mesmo do código existir, isso nos garante mais qualidade no nosso projeto. Além de que, provavelmente se você deixar pra fazer os testes no final, pode acabar não fazendo. Com isso, sua aplicação perde qualidade e está muito mais propensa a erros.

Store API

Resumo do projeto

Este documento traz informações do desenvolvimento de uma API em FastAPI a partir do TDD.

Objetivo

Essa aplicação tem como objetivo principal trazer conhecimentos sobre o TDD, na prática, desenvolvendo uma API com o Framework Python, FastAPI. Utilizando o banco de dados MongoDB, para validações o Pydantic, para os testes Pytest e entre outras bibliotecas.

O que é?

Uma aplicação que:

  • tem fins educativos;
  • permite o aprendizado prático sobre TDD com FastAPI + Pytest;

O que não é?

Uma aplicação que:

  • se comunica com apps externas;

Solução Proposta

Desenvolvimento de uma aplicação simples a partir do TDD, que permite entender como criar tests com o pytest. Construindo testes de Schemas, Usecases e Controllers (teste de integração).

Arquitetura

C4
Diagrama de C4 da Store API

Banco de dados - MongoDB

C4
Database - Store API

StoreAPI

Diagramas de sequência para o módulo de Produtos

Diagrama de criação de produto

sequenceDiagram
    title Create Product
    Client->>+API: Request product creation
    Note right of Client: POST /products

    API->>API: Validate body

    alt Invalid body
        API->Client: Error Response
        Note right of Client: Status Code: 422 - Unprocessable Entity
    end

    API->>+Database: Request product creation
    alt Error on insertion
        API->Client: Error Response
        note right of Client: Status Code: 500 - Internal Server Error
        end
    Database->>-API: Successfully created

    API->>-Client: Successful Response
    Note right of Client: Status Code: 201 - Created

Loading

Diagrama de listagem de produtos

sequenceDiagram
    title List Products
    Client->>+API: Request products list
    Note right of Client: GET /products

    API->>+Database: Request products list

    Database->>-API: Successfully queried

    API->>-Client: Successful Response
    Note right of Client: Status Code: 200 - Ok
Loading

Diagrama de detalhamento de um produto

sequenceDiagram
    title Get Product
    Client->>+API: Request product
    Note right of Client: GET /products/{id}<br/> Path Params:<br/>    - id: <id>

    API->>+Database: Request product
    alt Error on query
        API->Client: Error Response
        Note right of Client: Status Code: 500 - Internal Server Error
    else Product not found
        API->Client: Error Response
        Note right of Client: Status Code: 404 - Not Found
        end

    Database->>-API: Successfully queried

    API->>-Client: Successful Response
    Note right of Client: Status Code: 200 - Ok
Loading

Diagrama de atualização de produto

sequenceDiagram
    title PUT Product
    Client->>+API: Request product update
    Note right of Client: PUT /products/{id}<br/> Path Params:<br/>    - id: <id>

    API->>API: Validate body

    alt Invalid body
        API->Client: Error Response
        Note right of Client: Status Code: 422 - Unprocessable Entity
    end

    API->>+Database: Request product
    alt Product not found
        API->Client: Error Response
        Note right of Client: Status Code: 404 - Not Found
        end

    Database->>-API: Successfully updated

    API->>-Client: Successful Response
    Note right of Client: Status Code: 200 - Ok
Loading

Diagrama de exclusão de produto

sequenceDiagram
    title Delete Product
    Client->>+API: Request product delete
    Note right of Client: DELETE /products/{id}<br/> Path Params:<br/>    - id: <id>

    API->>+Database: Request product
    alt Product not found
        API->Client: Error Response
        Note right of Client: Status Code: 404 - Not Found
        end

    Database->>-API: Successfully deleted

    API->>-Client: Successful Response
    Note right of Client: Status Code: 204 - No content
Loading

Desafio Final

  • Create
    • Mapear uma exceção, caso dê algum erro de inserção e capturar na controller
  • Update
    • Modifique o método de patch para retornar uma exceção de Not Found, quando o dado não for encontrado
    • a exceção deve ser tratada na controller, pra ser retornada uma mensagem amigável pro usuário
    • ao alterar um dado, a data de updated_at deve corresponder ao time atual, permitir modificar updated_at também
  • Filtros
    • cadastre produtos com preços diferentes
    • aplique um filtro de preço, assim: (price > 5000 and price < 8000)

Preparar ambiente

Vamos utilizar Pyenv + Poetry, link de como preparar o ambiente abaixo:

poetry-documentation

Links uteis de documentação

mermaid

pydantic

validatores-pydantic

model-serializer

mongo-motor

pytest

store_api's People

Contributors

nayannanara avatar fsaires avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.