Este é um sistema de reservas para um restaurante, desenvolvido como parte de um desafio técnico para a empresa Digiliza.
Antes de iniciar, certifique-se de ter as seguintes ferramentas instaladas em sua máquina:
Para o desenvolvimento do backend da aplicação, foi utilizado as seguintes tecnologias:
- JavaScript - Linguagem de programação principal.
- Node.js - Ambiente de tempo de execução JavaScript.
- Express - Framework Node.js para criação de APIs RESTful.
- Sequelize - ORM (Object-Relational Mapping) para interagir com o banco de dados PostgreSQL.
- PostgresSQL - Banco de dados relacional utilizado para armazenamento de dados.
- Joi - Biblioteca de validação para validação de dados.
- Bcrypt - Biblioteca para criptografar senhas.
- JWT (JSON Web Tokens) - Para autenticação e autorização.
- date-fns - Para manipulação de datas.
- uuid - Para geração de identificadores únicos.
- Jest - Framework de testes para testes de integração.
- SQLite - Banco de dados em memória utilizado para testes com o Jest.
Siga as etapas abaixo para configurar e executar o servidor backend:
-
Clone o repositório:
git clone https://github.com/mfcastilho/teste-tecnico-digiliza
-
Navegue até a pasta do projeto:
cd seu-repositorio
- Instale as dependências:
cd backend
npm install
- Crie o banco de dados de desenvolvimento PostgreSQL:
npx sequelize db:create --env development
- Execute as migrações do banco de dados:
npx sequelize-cli db:migrate --env development
- Execute os seeds para popular o banco de dados:
npx sequelize-cli db:seed:all --env development
- Inicie o servidor backend:
npm run dev
- O servidor backend estará em execução em http://localhost:3000.
Para o desenvolvimento do frontend da aplicação, foi utilizado as seguintes tecnologias:
- JavaScript - Linguagem de programação principal.
- React - Biblioteca de criação de interfaces de usuário.
- React Router Dom - Para roteamento de páginas no aplicativo React.
- Bootstrap - Framework de CSS para estilização.
- Axios - Cliente HTTP para fazer solicitações à API do backend.
- SweetAlert - Biblioteca para exibir pop-ups de notificação.
- react-toastify - Para exibir notificações de toasts.
- react-icons - Ícones populares como componentes React.
- date-fns - Para manipulação de datas no frontend.
- jwt-decode - Para decodificar tokens JWT no cliente. Siga as etapas abaixo para configurar e executar o frontend:
- Navegue até a pasta do projeto (se ainda não estiver na pasta do projeto):
cd seu-repositorio
- Navegue até a pasta do frontend:
cd frontend
- Instale as dependências:
npm install
- Inicie o servidor frontend:
npm run dev
- O servidor frontend estará em execução em http://localhost:5173.
Os testes de integração foram desenvolvidos com Jest. Para executar os testes do backend, siga estas etapas:
- Navegue até a pasta do projeto (se ainda não estiver na pasta do projeto):
cd seu-repositorio
- Navegue até a pasta do backend:
cd backend
- Execute os testes:
npm test
- Isso executará os testes de integração do backend.
-
A seguir estão os endpoints da API:
-
Obs: Lembre-se de que alguns endpoints podem exigir autenticação com token JWT, dependendo dos requisitos de acesso.
- Método: POST
- Descrição: Permite que os usuários se registrem no sistema.
- Endpoint:
/api/v1/register/client
- Função: Criar um novo usuário no banco de dados com nome, email e senha.
- Método: POST
- Descrição: Permite que os usuários(cliente ou admin) façam login no sistema.
- Endpoint:
/api/v1/login
- Função: Verificar as credenciais do usuário (email e senha) e emitir um token JWT para autenticação subsequente.
- Método: POST
- Descrição: Permite cadastrar uma nova mesa no sistema.
- Endpoint:
/api/v1/table
- Função: Recuperar as mesas do banco de dados.
- Método: GET
- Descrição: Retorna a lista de mesas disponíveis no restaurante.
- Endpoint:
/api/v1/tables
- Função: Recuperar as mesas do banco de dados.
- Método: POST
- Descrição: Permite que os usuários façam uma reserva de mesa.
- Endpoint:
/api/v1/reservation
- Função: Verificar a disponibilidade da mesa, validar o horário da reserva e criar um registro de reserva no banco de dados.
- Método: GET
- Descrição: Retorna a lista de reservas feitas por um usuário.
- Endpoint:
/api/v1/reservations/user
- Função: Recuperar as reservas associadas ao usuário com o ID especificado.
- Método: DELETE
- Descrição: Permite que os usuários cancelem uma reserva existente.
- Endpoint:
/api/v1/reservation/:id
- Função: Verificar se o usuário tem permissão para cancelar a reserva e, se válido, excluir a reserva do banco de dados.
- Método: POST
- Descrição: Permite registrar um Administrador no sistema.
- Endpoint:
/api/v1/register/admin
- Função: Criar um novo admin no banco de dados com nome, email e senha.
- Método: POST
- Descrição: Permite que os usuários(cliente ou admin) façam login no sistema.
- Endpoint:
/api/v1/login
- Função: Verificar as credenciais do usuário (email e senha) e emitir um token JWT para autenticação subsequente.
- Método: GET
- Descrição: Retorna a lista de todas as reservas feitas no sistema.
- Endpoint:
/api/v1/admin/all-reservations
- Função: Recuperar todas as reservas registradas no sistema para exibição no painel administrativo, possivelmente em uma tabela.
- Método: DELETE
- Descrição: Permite que os administradores excluam uma reserva existente.
- Endpoint:
/api/v1/admin/reservation/:id
- Função: Verificar se o administrador tem permissão para excluir a reserva e, se for válido, excluí-la do banco de dados.