Skip to content

API RESTful para CRUD de usuários e receitas, com autenticação JWT e upload de imagens via Cloudinary

Notifications You must be signed in to change notification settings

laracmiranda/Receitas_API

Repository files navigation

🍜 Receitas API

Node.js Express PrismaORM PostgreSQL Neon JWT Bcrypt LICENSE

API RESTful desenvolvida para gerenciar receitas, comentários e favoritos de usuários.
Permite criar, visualizar, atualizar e deletar receitas, adicionar comentários e favoritar receitas.

📌 Observações

  • Você pode conferir a API diretamente aqui! - Receitas API
  • Documentação completa disponível em Documentação
  • Testes podem ser feitos diretamente pela documentação, sem a necessidade rodar localmente!

📲 Funcionalidades

👤 Usuários

  • Cadastro e login de usuários
  • Autenticação JWT com expiração
  • Senhas criptografadas com bcryptjs
  • Atualização de perfil
  • Exibição de perfil com quantidade de receitas cadastradas e curtidas
  • Redefinição de senha via e-mail com token com nodemailer

🥪 Receitas

  • CRUD completo (GET, POST, PUT, DELETE)
  • Upload de imagens com Cloudinary
  • Exibição das receitas cadastradas para o usuário autenticado
  • Paginação para a exibição da lista de receitas
  • Exibição formatada para evitar duplicação de dados
  • Exibição da quantidade de likes e avaliações da receita

💬 Comentários

  • Usuários autenticados podem adicionar comentários nas receitas
  • Comentários podem ser deletados por quem os fez
  • Exibição da lista de comentários com paginação por receita

❤️ Favoritos

  • Usuários autenticados podem favoritar receitas
  • As receitas favoritadas podem ser removidas quando desejar
  • Paginação para a exibição da lista de receitas favoritadas

Avaliações

  • Usuários autenticados podem deixar avaliações de 1 à 5 nas receitas
  • As receitas possuem média de avaliações
  • Só pode ser feita uma avaliação por usuário

🛠️ Tecnologias

  • Node.js - Runtime JavaScript
  • Express.js - Framework web
  • Neon (PostgreSQL) - Banco de dados na nuvem
  • JWT - Autenticação
  • Bcrypt - Criptografia de senhas
  • Joi - Validação de dados
  • Nodemailer - E-mail para redefinição de senha
  • PrismaORM - Comunicação com Banco de Dados
  • Cloudinary - Upload de imagens
  • Swagger - Documentação da API

Você pode aprender algumas etapas desse projeto nesses repositórios feitos por mim!

👉 Armazenando imagens em banco relacional

👉 Redefinir senha com nodemailer


📦 Instalação

  1. Clone o repositório:
git clone https://github.com/laracmiranda/Receitas_API.git
  1. Entre na pasta do projeto:
cd Receitas_API
  1. Instale as dependências:
npm install
  1. Configure as variáveis de ambiente no arquivo .env:
DATABASE_URL=postgresql://USER:PASSWORD@HOST:PORT/DATABASE
SECRET_JWT=SuaChaveSecreta
CLOUDINARY_CLOUD_NAME=seu_cloud_name
CLOUDINARY_API_KEY=sua_api_key
CLOUDINARY_API_SECRET=sua_api_secret
EMAIL_USER=email_completo_nodemailer
EMAIL_PASS=senha_app_nodemailer
PORT=sua_porta
  1. Rode as migrations do Prisma:
npx prisma migrate dev
  1. Inicie a API:
npm run dev

Caso não defina uma rota personalizada, a API estará disponível em http://localhost:3000.


📂 Estrutura do Banco de Dados (Prisma)

  • User: id, name, email, password, recipes[], favorites[], comments[]
  • Recipe: id, name, category, ingredients[], steps, image, userId, favorites[], comments[]
  • Favorite: id, userId, recipeId, creationDate
  • Comment: id, content, userId, recipeId, creationDate
  • Rating: id, value, userId, recipeId

📝 Testando a API

Sugestão de fluxo no Insomnia ou Postman:

  1. Criar usuário → POST /users
{
	"name": "Teste",
	"email": "teste@gmail.com",
	"password": "12345678"
}
  1. Fazer login → POST /login
{
	"email": "teste@gmail.com",
	"password": "12345678"
}
  1. Criar receita → POST /recipes (autenticado)
  • Selecionar Form Data para incluir os dados com envio de imagem. Exemplo de dados:
name: Bolo de Chocolate
category: Sobremesa
ingredients: 2 ovos, 400g de farinha, 300g de nescau
steps: Misture tudo, unte uma forma e coloque para assar por 40 minutos
image: (upload de imagem)
  1. Adicionar comentário → POST /comments/:recipeId (autenticado)
{
	"content": "Gostei da receita"
}
  1. Favoritar receita → POST /favorite/:recipeId (autenticado)
  • Passar o id da receita no endpoint
  1. Deixar uma avaliação → POST /rating/:recipeId (autenticado)
  • Passar o id da receita no endpoint

🤝 Contribuição

  1. Faça um fork deste repositório
  2. Crie uma branch com sua feature (git checkout -b feature/nome-da-feature)
  3. Commit suas mudanças (git commit -m 'Adiciona nova feature')
  4. Push para a branch (git push origin feature/nome-da-feature)
  5. Abra um Pull Request explicando o que altera e por quê

🔴 Metas

  • Redefinição de senha para usuários com token via e-mail
  • Deploy
  • Documentação

📃 Licença

Este projeto está licenciado sob a licença MIT

About

API RESTful para CRUD de usuários e receitas, com autenticação JWT e upload de imagens via Cloudinary

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published