A AdoPet é uma empresa fictícia que funciona como intermediária entre adotantes de pets e ONGs com foco em retirar animais das ruas. A proposta da AdoPet é trazer mais usuários e aumentar a interação entre possíveis adotantes e representantes dessas ONGs e para isso, o objetivo do projeto é implementar uma plataforma e levar a empresa pro mundo digital.
Este projeto foi desenvolvido como resultado de um Desafio Back-End (6ª edição) exclusivo para alunos da escola de tecnologia Alura. Eu escolhi o Java com o SpringBoot para implementar a API. O Frond-end, assim como as telas de UI/UX do projeto, já foram pré fornecidas.
Os arquivos do Figma estão disponibilizados em: Adopet.
O primeiro passo para iniciar a API é acessar o Spring Initializr. Uma interface que simplifica o trabalho do desenvolvedor. Aqui, podemos definir o groupId, o artefato e até mesmo as dependências do projeto com apenas alguns cliques. Decidi adicionar algumas dependências posteriormente, ao longo do desenvolvimento do projeto, mas para dar o pontapé inicial, escolhi essas.
O banco de dados para usar a aplicação será o h2, escolhido por ser um ambiente de desenvolvimento e pela praticidade de uso. Para analisar a configuração do banco você deve acessar o arquivo resources/application.properties. Vale notar que as tabelas (entidades) serão criadas automaticamente com a ajuda do Spring Data, as classes que serão tabelas estão no pacote model
Em minha jornada contínua para aprimorar minhas habilidades de desenvolvimento, recebi uma tarefa para criar funcionalidades essenciais na Classe/Entidade Tutor. Estas funcionalidades incluem a implementação dos verbos HTTP: GET, POST, PUT e DELETE.
Minha arquitetura de software é meticulosamente estruturada em camadas distintas, cada uma com sua própria responsabilidade. Tenho a camada model, que define a estrutura dos meus dados. A camada service é onde manipulo a lógica de negócios. A camada controller é responsável por receber e responder às solicitações HTTP. Além disso, tenho a camada config e outras, todas trabalhando juntas para fornecer uma aplicação robusta e escalável.
Para garantir a qualidade e a confiabilidade de minhas implementações, todos os verbos HTTP foram rigorosamente testados no Insomnia, uma plataforma de teste de API de alto desempenho. Isso me permite verificar e validar minhas implementações, garantindo que elas funcionem como esperado.
Implementando Pet e Abrigo
Nesta sprint, vou focar na implementação das entidades Pet e Abrigo no sistema. Após minha própria análise decide criar um relacionamento ManyToOne/OneToMany, onde um Pet pertence a um único Abrigo, e um Abrigo pode ter vários Pets.
Para ambas as entidades, vou implementar o CRUD completo, permitindo a criação, leitura, atualização e exclusão de Pets e Abrigos. A implementação levará em consideração a lógica de negócio específica do projeto, como regras de validação de dados.
Eu também criei o record Endereço com o intuito de gravar o endereço do Abrigo, usando a anotação @Embeddable
A figura acima mostra o mapeamento, com a ajuda do Spring Data e o Hybernate, as tabelas do banco foram criadas automaticamente, sem precisar escrever os comandos SQL.
Durante a última Sprint, implementei várias funcionalidades novas que aprimoraram significativamente o sistema. Entre elas, destaco a Classe Pet, a Classe Abrigo e a funcionalidade de Adoção.
Adotei uma regra de negócios específica para o meu sistema. Ao cadastrar um abrigo, posso optar por cadastrar pets simultaneamente ou não. Caso opte por não cadastrar os pets no momento da criação do abrigo, posso fazê-lo posteriormente, fornecendo o ID do abrigo.
Quanto à funcionalidade de adoção, ela requer um Tutor e um Pet. Uma vez concluída a adoção, o atributo ‘adotado’ do Pet é atualizado para ‘true’.
Para facilitar esse processo, criei uma classe auxiliar que recebe um JSON específico. Este JSON contém o e-mail do tutor, que é único no meu banco de dados, e o ID do Pet que é o alvo da adoção.
Abaixo as entradas do método POST para as funcionalidades:
Depois de implementar os CRUD's e funcionalidades (ainda faltando alguns ajustes). Nessa Sprint o objetivo é implementar a segurança da API, vou utilizar o Spring Security e o Token JWT. Pretendo também ao final criar uma documentação no swagger.
Primeiro passo é adicionar as dependências necessárias no pom.xml











