AdoçãoTech é um sistema de gerenciamento de adoção de pets, desenvolvido com foco em facilitar a conexão entre adotantes e animais disponíveis para adoção. Este projeto oferece uma API RESTful, com funcionalidades completas para gerenciar adoções, pets e usuários. Utiliza PostgreSQL para o banco de dados e Docker para configurar o ambiente de desenvolvimento de maneira eficiente.
- Sobre o Projeto
- Tecnologias Utilizadas
- Funcionalidades
- Estrutura do Projeto
- Como Rodar a API
- Melhorias Futuras
Este projeto consiste em uma API para um sistema de adoção de pets, que permite gerenciar os processos de adoção de maneira simples e eficiente. A API oferece endpoints para a criação, atualização, deleção e consulta de pets, adoções e usuários, com autenticação segura por meio de JWT. O banco de dados utilizado é o PostgreSQL e a aplicação está configurada para rodar em containers Docker, facilitando o ambiente de desenvolvimento e a integração contínua.
- Node.js: Plataforma JavaScript do lado do servidor para alta performance e escalabilidade.
- Express: Framework minimalista para criação de APIs RESTful com roteamento eficiente.
- Prisma: ORM moderno para manipulação de dados no PostgreSQL.
- PostgreSQL: Banco de dados relacional para armazenamento seguro e eficiente.
- JWT (JSON Web Token): Para autenticação segura dos usuários.
- bcrypt: Para criptografar senhas e garantir a segurança dos dados.
- Swagger: Para documentação interativa da API.
- Jest: Framework de testes para garantir a qualidade da aplicação.
- React.js: Biblioteca para a criação de interfaces de usuário em páginas web;
- Vite: Ferramenta para auxiliar no desenvolvimento, gerenciando o ambiente de desenvolvimento;
- Axios : Biblioteca usada para fazer requisições HTTP para o Node.js;
- React-router-dom : Para trabalhar com rotas com o React;
- React-icons : Biblioteca de ícones para usar com o React;
-
Criar Adoção: Cria uma nova adoção com a data, ID do pet e ID do usuário.
- Rota:
POST /adoption
- Controlador:
create
emadoptController.js
- Rota:
-
Obter Adoção por ID: Retorna os detalhes de uma adoção específica.
- Rota:
GET /adoption/:id
- Controlador:
getById
emadoptController.js
- Rota:
-
Obter Todas as Adoções: Retorna todas as adoções cadastradas.
- Rota:
GET /adoption
- Controlador:
getAll
emadoptController.js
- Rota:
-
Atualizar Adoção: Atualiza os detalhes de uma adoção.
- Rota:
PUT /adoption/:id
- Controlador:
update
emadoptController.js
- Rota:
-
Deletar Adoção: Deleta uma adoção específica.
- Rota:
DELETE /adoption/:id
- Controlador:
deleteAdoption
emadoptController.js
- Rota:
-
Criar Pet: Cria um novo pet com informações como nome, espécie, raça, etc.
- Rota:
POST /pets
- Controlador:
createPet
empetController.js
- Rota:
-
Obter Pet por ID: Retorna os detalhes de um pet específico.
- Rota:
GET /pets/:id
- Controlador:
getPetById
empetController.js
- Rota:
-
Obter Todos os Pets: Retorna todos os pets cadastrados com opções de filtro.
- Rota:
GET /pets
- Controlador:
getAllPets
empetController.js
- Rota:
-
Atualizar Pet: Atualiza os detalhes de um pet existente.
- Rota:
PUT /pets/:id
- Controlador:
updatePet
empetController.js
- Rota:
-
Deletar Pet: Deleta um pet específico.
- Rota:
DELETE /pets/:id
- Controlador:
deletePet
empetController.js
- Rota:
-
Criar Usuário: Cria um novo usuário com informações como nome, email, telefone, etc.
- Rota:
POST /users
- Controlador:
createUser
emuserController.js
- Rota:
-
Obter Usuário por ID: Retorna os detalhes de um usuário específico.
- Rota:
GET /users/:id
- Controlador:
getUserById
emuserController.js
- Rota:
-
Obter Todos os Usuários: Retorna todos os usuários cadastrados.
- Rota:
GET /users
- Controlador:
getAllUsers
emuserController.js
- Rota:
-
Atualizar Usuário: Atualiza os detalhes de um usuário.
- Rota:
PUT /users/:id
- Controlador:
updateUser
emuserController.js
- Rota:
-
Deletar Usuário: Deleta um usuário específico.
- Rota:
DELETE /users/:id
- Controlador:
deleteUser
emuserController.js
- Rota:
backend/
├── docs/
│ ├── swagger.js
│ └── swagger-output.json
├── prisma/
│ ├── schema.prisma
│ └── seed.js
├── src/
│ ├── controllers/
│ │ ├── adoptController.js
│ │ ├── petController.js
│ │ └── userController.js
│ ├── database/
│ │ └── prismaClient.js
│ ├── routes/
│ │ ├── adoptionRoutes.js
│ │ ├── petRoutes.js
│ │ ├── routes.js
│ │ └── userRoutes.js
│ ├── security/
│ │ ├── crypt.js
│ │ └── jwt-middleware.js
│ ├── app.js
│ └── server.js
├── tests/
│ ├── adoption.tests.js
│ ├── pet.tests.js
│ └── security.tests.js
├── .env
├── compose.yaml
├── jest.config.js
├── package.json
└── README.md
- Docker instalado. Baixe o Docker Desktop aqui.
Confirme se o Docker e o Docker Compose estão instalados corretamente:
docker --version
docker-compose --version
git clone https://github.com/AdocaoTech/adocaoTechApp.git
cd adocaoTechApp/backend
git checkout -b 'nome-da-branch'
Crie um arquivo .env
na raiz do projeto e configure as variáveis de ambiente, conforme o exemplo abaixo:
DATABASE_URL="postgresql://your_db_user:your_db_password@localhost:5432/your_db_name"
DB_USER="your_db_user"
DB_NAME="your_db_name"
DB_PASS="your_db_password"
JWT_SECRET_KEY="SENHA JWT"
ADMIN_PASSWORD="12345"
ADMIN_EMAIL="[email protected]"
Nota: Existe um arquivo
.env.example
no repositório para usar como base.
Instale as dependências do projeto com:
npm install
Inicie o PostgreSQL com Docker:
docker-compose up -d
Aplique as migrações e gere o cliente Prisma:
npx prisma migrate dev --name "nome-descrevendo-a-mudança"
npx prisma generate
Ou use os atalhos definidos no projeto:
npm run migrate "nome-descrevendo-a-mudança"
npm run generate
Para adicionar um administrador ao banco de dados, execute:
npm run seed
Para rodar o servidor:
npm start
O servidor estará disponível em:
http://localhost:3000
.
A API conta com integração do swagger para melhor desenvolvimento, para gerar a documentação e testar as rotas use:
npm run swagger
Acesse a interface em:
http://localhost:3000/docs
.
O projeto conta com testes para verificar o funcionamento da aplicação. Para executá-los, use:
npm test
- Adicionar validação de entrada de dados mais robusta.
- Utilizar um salt único para cada senha.
- Melhorar a documentação no Swagger:
- Adicionar exemplos de uso para as rotas.
- Criar e documentar schemas detalhados.
- Incluir mensagens de retorno mais claras.
AdoçãoTech é um projeto de código aberto, colaborativo e aberto a contribuições. Para mais detalhes, consulte a documentação da API.