Lucas Smaniotto Schuch - 2121101016
Valtemir Junior Gomes da Silva - 2121101043
Projeto desenvolvido para a integração de disciplinas do curso de Ciências da Computação da UFFS, ministradas por Felipe Grando (Programação II), Denio Duarte (Banco de Dados I), Marina Girolimetto e Raquel Aparecida Pegoraro (Engenharia de Software I), com o intuito de desenvolver um sistema web para solucionar um problema real.
- Index
O projeto consiste em um sistema de gestão de uma clínica de terapia e estética, que possui um site para que clientes solicitem agendamentos e uma área administrativa para as funcionárias da clínica gerenciarem os agendamentos, clientes, seções, seviços e pacotes.
Durante o desenvolvimento os seguintes requisitos foram desenvolvidos:
-
Requisitos Funcionais:
- Área pública
- Solicitações de contato
- Área privada
- Login de Usuário
- Manutenção de Clientes
- Manutenção de Serviços
- Manutenção de Agendamentos
- Área pública
-
Requisitos Não Funcionais:
- Usabilidade
- Segurança
- Compatibilidade
- Disponibilidade
- Requisitos Legais
- Requisitos de Usuário:
docs/User Requirements.pdf
- Modelo Conceitual:
docs/Conceptual Model.png
- Modelo Lógico Relacional:
- Diagrama:
docs/Relational Logical Model.png
- Diagrama:
- Modelo Físico:
db/Physical_Model.sql
O projeto foi dividido em duas pastas, sendo elas server
e client
. A pasta server
contém o código do servidor/backend, enquanto a pasta client
contém o código do cliente/frontend.
O projeto também conta com uma pasta docs
, que contém a documentação do projeto, requisitos de usuário, modelo conceitual e modelo lógico relacional.
A pasta server
contém as seguintes pastas:
src
: Contém o código do servidor.config
: Contém os arquivos de configuração do servidor.controllers
: Contém os controladores do servidor.database
: Contém os arquivos de configuração do banco de dados.middlewares
: Contém os middlewares do servidor.models
: Contém os modelos do banco de dados.routes
: Contém as rotas do servidor.app.js
: Arquivo de configuração do servidor.server.js
: Arquivo de inicialização do servidor.
A pasta client
contém as seguintes pastas:
src
: Contém o código do cliente.assets
: Contém as imagens dos componentes e do carousel.components
: Contém os componentes do cliente.pages
: Contém as páginas do cliente.public
: Páginas públicas do cliente.secure
: Páginas privadas do cliente.
util
: Contém scripts de utilidade do cliente.api
: Contém consumidores da API do servidor.
public
: Contém os arquivos públicos do cliente.
O projeto foi desenvolvido com o gerenciados de pacotes npm, portanto é necessário que o mesmo esteja instalado em sua máquina.
Para instalar as dependências do projeto, execute o comando npm install
na pasta raiz das pastas server
e client
.
Para executar o projeto, é necessário configurar o banco de dados. Para isso, crie um banco de dados PostgreSQL e configure as variáveis de ambiente do projeto, seguindo o arquivo .env.example
na pasta server
, além de executar as migrations do banco de dados, executando o comando npx sequelize db:migrate
.
Para executar o projeto, o servidor e o cliente devem ser executados separadamente.
Para executar o servidor, execute o comando npm run dev
na pasta server
, e o servidor será executado na porta 3333
em modo de desenvolvimento.
Para executar o servidor em modo de produção, execute o comando npm run start
na pasta server
.
Para executar o cliente, execute o comando npm run start-dev
na pasta client
e o cliente será executado na porta 3000
em modo de desenvolvimento.
Para executar o cliente em modo de produção, execute o comando npm start
na pasta client
.
Para execução de builds, consulte os arquivos package.json
das pastas server
e client
.
- Node.js: linguagem de programação utilizada para desenvolver o servidor.
- Express: utilizado para definir os endpoints do servidor.
- Sequelize: utilizado para realizar a conexão com o banco de dados, definir os modelos e realizar as migrations.
- Nodemon: utilizado para reiniciar o servidor automaticamente quando um arquivo é alterado.
- Bcrypt: utilizado para realizar a criptografia de dados sensíveis.
- Jsonwebtoken: utilizado para realizar a autenticação de usuários.
- Cors: utilizado para permitir o acesso ao servidor de outros domínios.
- Dotenv: utilizado para carregar as variáveis de ambiente do servidor.
- Pg e Pg-hstore: utilizados para realizar a conversão de dados do banco de dados PostgreSQL.
- Eslint: utilizado para padronizar o código.
- React: biblioteca utilizada para desenvolver o cliente.
- React Router Dom: utilizado para definir as rotas do cliente.
- React Icons: utilizado para utilizar ícones .svg.
- Styled Components: utilizado para estilizar os componentes sem a necessidade de arquivos .css e reutilização de componentes.
- Eslint: utilizado para padronizar o código.
- Prettier: utilizado para padronizar o código.
- React Slick, Slick Carousel, Framer Motion: utilizado para criar o carrossel de imagens.
- React Google Maps API: utilizado para criar o mapa de localização da clínica.
- Sweet Alert2: utilizado para criar as mensagens de alerta estilizadas.
- env-cmd: utilizado para carregar as variáveis de ambiente do cliente.
- PostgreSQL: SGBD utilizado para armazenar os dados do projeto.