Bem-vindo à Adopet API, uma aplicação desenvolvida com Fastify para gerenciar adoções de pets. Este projeto foi criado como parte do desafio Alura Challenge Backend 6ª edição.
Siga os passos abaixo para configurar o projeto localmente:
-
Clone o repositório:
git clone https://github.com/michelsandre/adopet-api-fastify.git cd adopet-api-fastify
-
Instale as dependências:
npm install
-
Configure as variáveis de ambiente:
Crie um arquivo
.env
na raiz do projeto com o seguinte conteúdo:# Exemplo de configurações # Define a porta que o servidor deverá inicializar (opcional) PORT=8080 # Define o endereço do banco de dados, no caso será SQLite. Se não existir, será criado. # Leia a documentação do prisma para outros banco de dados: # https://www.prisma.io/docs/orm/overview/databases DATABASE_URL="file:./db/dev.db" # Chave secreta para geração e validação do token # Pode ser gerada através https://randomkeygen.com/ JWT_SECRET="sua-chave-secreta" # Define a validade do token. Ex: '10m' - 10 minutos. EXPIRES_IN='10m'
-
Execute as migrações do Prisma para criar o banco de dados:
npx prisma migrate dev --name init
-
(Opcional) Popule o banco de dados com dados iniciais:
npx prisma db seed
-
Inicie o servidor em modo de desenvolvimento:
npm run dev
Abra http://localhost:8080 para acessar a API.
No diretório do projeto, você pode executar os seguintes comandos:
Inicia o aplicativo em modo de desenvolvimento.
Abra http://localhost:8080 para visualizar no navegador.
Inicia o aplicativo em modo de produção.
Executa os testes da aplicação.
src/routes
: Contém as rotas da aplicação, organizadas por módulos comotutores
,pets
,abrigos
.adocao
elogin
.src/plugins
: Plugins globais para funcionalidades como autenticação, validação e tratamento de erros.prisma
: Configuração do banco de dados e scripts de seed.
- Fastify: Framework web rápido e eficiente.
- Prisma: ORM para manipulação do banco de dados.
- Zod: Validação de esquemas de dados.
- TypeScript: Tipagem estática para JavaScript.
- JWT: Autenticação baseada em tokens.
Para configurar um banco de dados diferente do sqlite, verificar o arquivo /prisma/schema.prisma
:
datasource db {
# alterar o tipo do provider abaixo para o banco desejado, postgresql por exemplo
provider = "sqlite"
# endereço do banco de dados no arquivo .env
#postgresql://user:senha@host:port/nome_banco_dados"
url = env("DATABASE_URL")
}
- GET
/tutores
: Retorna todos os tutores cadastrados. - GET
/tutores/:id
: Retorna os detalhes de um tutor específico pelo ID. - POST
/tutores
: Cria um novo tutor. Campos obrigatórios:nome
,email
,senha
. - PATCH
/tutores/:id
: Atualiza os dados de um tutor específico pelo ID. - DELETE
/tutores/:id
: Remove um tutor específico pelo ID.
- GET
/pets
: Retorna todos os pets disponíveis para adoção. Também permite busca paginada, ex:/pets?page=1
. - GET
/pets/:id
: Retorna os detalhes de um pet específico pelo ID. - POST
/pets
: Cria um novo registro de pet. Campos obrigatórios:nome
,descricao
,idade
,endereco
,imagem
. - PATCH
/pets/:id
: Atualiza os dados de um pet específico pelo ID. - PATCH
/pets/:petId/:abrigoId
: Atribui um pet a um abrigo. - DELETE
/pets/:id
: Remove um pet específico pelo ID.
- GET
/abrigos
: Retorna todos os abrigos cadastrados. - GET
/abrigos/:id
: Retorna os detalhes de um abrigo específico pelo ID, incluindo os pets sob seus cuidados. - POST
/abrigos
: Cria um novo abrigo. Campo obrigatório:nome
. - PATCH
/abrigos/:id
: Atualiza os dados de um abrigo específico pelo ID. - DELETE
/abrigos/:id
: Remove um abrigo específico pelo ID.
- GET
/adocao
: Retorna todos os registros de adoção. - POST
/adocao/:tutorId/:petId
: Cria um registro de adoção, alterando o status do pet paraadotado: true
. - DELETE
/adocao/:id
: Remove um registro de adoção, alterando o status do pet paraadotado: false
.
- POST
/login/tutor
: Realiza a autenticação de um tutor e retorna um token JWT. - POST
/login/abrigo
: Realiza a autenticação de um abrigo e retorna um token JWT.
adopet-api-fastify/
├── prisma/ # Configuração e seed do banco de dados
├── requisicoes/ # Exemplos de requisições HTTP
├── src/
│ ├── enum/ # Definições de enums
│ ├── interfaces/ # Interfaces compartilhadas
│ ├── plugins/ # Plugins globais do Fastify
│ ├── routes/ # Rotas organizadas por módulos (tutores, pets, abrigos, etc.)
│ ├── shared/ # Schemas e utilitários compartilhados
│ ├── types/ # Tipos TypeScript
│ ├── utils/ # Funções utilitárias
│ ├── app.ts # Configuração principal do Fastify
├── .env # Variáveis de ambiente
├── package.json # Configurações do projeto e dependências
├── tsconfig.json # Configuração do TypeScript
├── README.md # Documentação do projeto
Recomenda-se a instalação da extensão REST Client
para testar as requisições HTTP. Arquivos de exemplo estão disponíveis na pasta requisicoes
.
Este projeto está licenciado sob a licença MIT.
Feito com ❤️ por André Michels.