Este projeto é uma API desenvolvida em .NET Framework que consome a API PokeAPI para fornecer informações sobre Pokémons.
- Obter informações sobre 10 Pokémons aleatórios
- Obter informações sobre 1 Pokémon específico
- Cadastrar mestre Pokémon com nome, idade e CPF em um banco de dados SQLite
- Informar que um Pokémon foi capturado
- Listar todos os Pokémons capturados
O projeto foi desenvolvido utilizando as seguintes tecnologias:
- Microsoft.NET - plataforma de desenvolvimento utilizada
- ASP.NET Core - framework utilizado para desenvolvimento da API
- SQLite - sistema de gerenciamento de banco de dados utilizado para persistência dos dados da aplicação
- Swashbuckle - biblioteca utilizada para geração de documentação da API
- Tynamix.ObjectFiller - biblioteca utilizada para geração de dados aleatórios
- FluentAssertions
- Tynamix.ObjectFiller
- xUnit
- Microsoft.NET.Test.Sdk
- Clone este repositório em sua máquina
- Abra o projeto em seu IDE preferido
- Instale as dependências do projeto
- Compile e execute a aplicação
- Acesse as rotas da API conforme descrito abaixo
- Baixar o .NET 7 SDK e Runtime: O .NET 7 SDK é um conjunto de ferramentas essenciais para a criação e execução de aplicativos .NET. Certifique-se de baixar e instalar o .NET 7 SDK no seu computador antes de tentar executar o projeto.
- Download .NET 7
- Instalar o Visual Studio 2022: O Visual Studio 2022 é um ambiente de desenvolvimento integrado que fornece uma interface amigável para criar, depurar e gerenciar projetos .NET. Certifique-se de instalar o Visual Studio 2022 no seu computador antes de tentar executar o projeto.
- Download Visual Studio 2022
- Verificar as especificações do sistema: Certifique-se de que o seu computador atenda às especificações necessárias para executar o .NET 7 SDK e o Visual Studio 2022. Verifique as informações de requisitos mínimos de sistema para cada um deles antes de tentar instalar.
Este arquivo descreve as rotas da API do PokemonController.
A seguir estão as rotas da API do PokemonController com suas descrições, métodos HTTP e parâmetros.
- Método: GetAllPokemonsAsync
- Rota: GET /api/pokemon
- Descrição: Obtém uma lista de todos os Pokémons disponíveis.
- Parâmetros de consulta:
- limit (opcional): O número máximo de Pokémons a serem retornados.
- Retorno: Uma lista de Pokémons.
- Método: SearchPokemonAsync
- Rota: GET /api/pokemon/{pokemonName}
- Descrição: Busca um Pokémon específico pelo seu nome ou ID na API.
- Parâmetros de consulta:
- pokemonName: O nome do Pokémon a ser procurado.
- Retorno: Um objeto GetResponseDTO contendo um PokemonDTO se o Pokémon for encontrado, caso contrário retorna NotFound.
- Método: GetPokemonEvolutionsAsync
- Rota: GET /api/pokemon/{pokemonName}/evolutions
- Descrição: Obtém informações sobre as evoluções de um Pokémon especificado.
- Parâmetros de consulta:
- pokemonName: O nome do Pokémon a ser pesquisado.
- Retorno: Uma lista de informações sobre as evoluções do Pokémon.
- Método: CapturePokemon
- Rota: POST /api/pokemon/{pokemonName}/{masterId}/capture
- Descrição: Captura um Pokémon para um mestre Pokémon especificado.
- Parâmetros de corpo:
- masterId: O ID do mestre Pokémon.
- pokemonName: O nome do Pokémon a ser capturado.
- forceCapture (opcional): Define se a captura deve ser forçada, mesmo que o Pokémon já tenha sido capturado anteriormente pelo mestre.
- Retorno: Um objeto GetResponseDTO contendo o número de Pokémons capturados pelo mestre até o momento.
- Método: GetAllCapturedPokemons
- Rotas:
- GET /api/pokemon/captured/{masterId}
- GET /api/pokemon/captured
- Descrição: Obtém todos os Pokémons capturados filtrando por um mestre ou não.
- Parâmetros de consulta:
- masterId (opcional): O ID do mestre Pokémon.
- Retorno: Um objeto GetResponseDTO contendo uma lista de Pokémons capturados pelo mestre especificado ou por todos os mestres.
- DDD
- TDD
- CLEAN ARCH.
- CLEAN CODE
- SOLID
A metodologia DDD ajuda a focar no negócio e nos requisitos do sistema, permitindo que criar uma estrutura de código que reflita o domínio da aplicação. Isso significa que a arquitetura da aplicação é baseada em um modelo de domínio rico, que descreve as entidades, objetos de valor, agregados e serviços que compõem o sistema. Essa abordagem ajuda a criar uma separação clara entre as camadas de negócio e de infraestrutura, garantindo que as funcionalidades de negócio possam ser implementadas sem depender dos detalhes da infraestrutura.
A metodologia TDD, por sua vez, ajuda a garantir a qualidade do código e a evitar problemas de regressão. Com ela, temos testes automatizados para cada funcionalidade do sistema antes mesmo de começar a implementá-las. Isso ajuda a definir claramente os requisitos de cada funcionalidade e a evitar que o código seja implementado de forma incorreta ou incompleta. Além disso, a prática de escrever testes antes de implementar o código ajuda a identificar e corrigir problemas de design e arquitetura precocemente.
Com base em Clean Architecture e Clean Code, seu projeto tem uma estrutura de código bem organizada, clara e legível, com foco na separação de responsabilidades e na manutenção da coesão e baixo acoplamento entre as diferentes camadas da aplicação. Isso ajuda a garantir a escalabilidade do projeto, permitindo que ele cresça e evolua ao longo do tempo sem se tornar difícil de manter.
Em resumo, a combinação de DDD, TDD, Clean Architecture e Clean Code traz diversos benefícios para escalabilidade do projeto, permitindo que ele seja implementado de forma eficiente, com qualidade e robustez, e que possa ser facilmente mantido e evoluído ao longo do tempo.
Além das metodologias DDD e TDD, a API também conta com uma tela inicial básica ao executar o projeto BLAZOR em WebAssembly. Essa tela contém três botões para acessar a documentação, o repositório GitHub e os testes da API via Swagger.
A tela inicial é uma ótima forma de fornecer aos usuários um acesso rápido e fácil às informações importantes sobre a API. Ao clicar no botão "Documentação", o usuário é direcionado para uma página que contém a documentação completa da API, incluindo informações sobre os endpoints, os parâmetros de entrada, os formatos de retorno e muito mais.