Skip to content

LeoAChaves/Rosemary_API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

62 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌹 Rosemary_API 💀

Node.js Express SQLite Jest

Projeto final de módulo (IV) do curso de Web Dev Full Stack da Resilia Educação.

Projeto realizado utilizando o Node.js com framework Express.


🚀 Demo ao Vivo

API em produção: https://rosemary-api.up.railway.app

⚠️ O Railway free tier pode colocar o app para dormir após 15 minutos sem uso. O primeiro acesso pode levar alguns segundos.


🎯 Objetivo

Esse projeto tem como objetivo criar uma API REST para uma entidade (agenda) de um estúdio de tatuagem, onde deve ser possível aplicar as operações de CRUD.


📝 Pré-Requisitos


🎁 Pacotes utilizados

Dependências de produção:

Pacote Versão Descrição
Cors 2.8.5 Habilita CORS na API
Express 4.17.3 Framework web
SQLite3 5.0.0 Banco de dados SQLite

Dependências de desenvolvimento:

Pacote Versão Descrição
Nodemon 2.0.15 Reinicia servidor automaticamente
Jest 27.5.1 Framework de testes
Supertest 6.2.2 Testes de requisições HTTP

💻 Instalação da Aplicação

# Clone o repositório
git clone https://github.com/LeoAChaves/Rosemary_API.git

# Entre na pasta
cd Rosemary_API

# Instale as dependências
npm install

# Crie e popule o banco de dados
npm run database

# Inicie o servidor
npm start

A API estará disponível em http://localhost:3030


📌 Rotas implementadas

GET /agenda

Retorna todos os agendamentos.

Resposta:

{
  "agenda": [
    {
      "ID": 1,
      "Cliente_ID": 1,
      "Funcionario_ID": 3,
      "Data": "2022-03-09",
      "Hora": "09:30:00",
      "Servico": "Portifolio_ID 5",
      "Duracao": "60"
    }
  ],
  "error": false
}

GET /agenda/id/:ID

Retorna agendamento por ID.

GET /agenda/cliente/:Cliente_ID

Retorna todos os agendamentos de um cliente.

GET /agenda/funcionario/:Funcionario_ID

Retorna todos os agendamentos de um funcionário.

GET /agenda/data/:Data

Retorna todos os agendamentos de uma data (formato: YYYY-MM-DD).

POST /agenda

Cria um novo agendamento.

Requisição:

{
  "Cliente_ID": 10,
  "Funcionario_ID": 2,
  "Data": "2024-12-15",
  "Hora": "14:30:00",
  "Servico": "Tatuagem de âncora",
  "Duracao": "90"
}

PUT /agenda/id/:ID

Atualiza um agendamento existente.

DELETE /agenda/id/:ID

Remove um agendamento.


🔬 Testes

Para executar os testes:

npm run test

📁 Estrutura do Projeto

Rosemary_API/
├── src/
│   ├── assets/
│   │   └── README/
│   │       └── Rosemary.png
│   ├── controllers/
│   │   ├── indexController.js
│   │   └── agendaController.js
│   ├── DAO/
│   │   └── agendaDAO.js
│   ├── database/
│   │   ├── sqlite-db.js
│   │   ├── create-and-populate.js
│   │   └── database.db
│   └── models/
│       └── agendaModel.js
├── tests/
├── app.js
├── server.js
├── package.json
├── Dockerfile
├── railway.toml
└── README.md

🔧 Troubleshooting

Erro: SQLITE_CANTOPEN: unable to open database file

Solução: O diretório do banco não tem permissão de escrita.

# Local
chmod 777 database/

# Railway
# Adicione um volume persistente conforme instruções acima

Erro: PORT already in use

Solução: Altere a porta no arquivo server.js ou configure a variável PORT.

const port = process.env.PORT || 3030;

🌱 Desenvolvido por

Leonardo de Almeida Chaves ✈️

Linkedin Badge GitHub Badge


🌐 Acessar API

Desenvolvido com ❤️ e Node.js

About

API REST para gestão de agenda de estúdio de tatuagem. Desenvolvida com Node.js, Express e SQLite. Permite operações completas de CRUD para agendamentos, com validações de data, hora, duração e disponibilidade de funcionários.

Topics

Resources

Stars

Watchers

Forks

Contributors