Escolar Documentos
Profissional Documentos
Cultura Documentos
Serra
2022
EWERSON VIEIRA NASCIMENTO
Serra
2022
Dados Internacionais de Catalogação na Publicação (CIP)
CDD 005.1
COMISSÃO EXAMINADORA
_________________________________________________
Prof. Me. Daniel Ribeiro Trindade (Orientador)
Instituto Federal do Espírito Santo - Campus Serra
__________________________________________________
Profª Drª Cristina Klippel Dominicini
Instituto Federal do Espírito Santo - Campus Serra
___________________________________________________
Prof. Me. Felipe Frechiani de Oliveira
Instituto Federal do Espírito Santo - Campus Serra
MINISTÉRIO DA EDUCAÇÃO
INSTITUTO FEDERAL DO ESPÍRITO SANTO
SISTEMA INTEGRADO DE PATRIMÔNIO, ADMINISTRAÇÃO E
FOLHA DE ASSINATURAS
CONTRATOS
Emitido em 11/02/2022
Agradeço ao meu pai, Gilberto Nascimento Filho, por todo apoio, compreensão e motivação,
nos momentos bons e nos ruins, para que eu jamais desistisse.
Agradeço a meu orientador, Prof. Me. Daniel Ribeiro Trindade, por toda a paciência,
dedicação e ajuda prestada.
Por fim, agradeço a todos os colegas e professores que estiveram comigo durante essa
caminhada no curso, tornando minha jornada a melhor possível.
O insucesso é apenas uma oportunidade para recomeçar com mais inteligência.
(FORD, 2007)
RESUMO
O mercado de beleza masculina vem crescendo ano após ano em todo o mundo, com
relatórios apontando crescimento, no Brasil, de 70% entre 2012 e 2017. Dentre os diversos
setores que compõem este mercado, o setor de barbearias é um dos que recebem mais
investimentos, seja em infraestrutura, capacitação de pessoas e até mesmo tecnologia. Outra
área que cresceu muito nos últimos anos foi a popularização do uso de smartphones. Além
do surgimento de aplicativos para resolverem demandas específicas, surgiram também
aplicativos agregadores, condensando em um mesmo app diversas alternativas para o
usuário acerca de um mesmo tema, como o iFood no setor alimentício, o Flipboard
no setor de notícias e o Anchor para distribuição de podcasts. Com esses pontos em
mente surgiu o presente trabalho, onde foi desenvolvido um sistema para gerenciamento
de barbearias. Foram desenvolvidas duas interfaces: uma web, utilizando a biblioteca
React, e outra mobile, utilizando o React Native, para diferentes tipos de usuários. Além
disso, uma API foi desenvolvida utilizando Node.js para permitir a comunicação das
interfaces com os dados da aplicação. Dentre as diversas funcionalidades do sistema, as
principais são a possibilidade do usuário visualizar diversas barbearias e agendar sua
visita a um estabelecimento por meio de um aplicativo móvel, e facilitar o controle da
agenda dos barbeiros dessas barbearias. Para demonstrar os resultados produzidos, foram
disponibilizadas ao final deste trabalho imagens do sistema com descrições das telas e das
funcionalidades produzidas, utilizando dados fictícios.
The male beauty market has been growing year after year around the world, with reports
pointing to a growth of 70% in Brazil between 2012 and 2017. Among the various
sectors that make up this market, the barbershop sector is one of those that receive more
investments, whether in infrastructure, people trainment and even technology. Another
area that has grown a lot in recent years has been the popularization of the use of
smartphones. In addition to the emergence of applications to solve specific demands,
aggregating applications have also emerged, condensing in the same app several alternatives
for the user on the same topic, such as iFood in the food sector, Flipboard in the news
sector and Anchor for podcasts distribution. With these points in mind, the present work
emerged, with the development of a system for managing barbershops. Two interfaces were
developed: a web interface, using the React library, and a mobile interface, with React
Native, for different types of users. In addition, an API was developed using Node.js to
allow interfaces to communicate with application data. Among the various functionalities
of the system, the main ones are the possibility for the users to view several barbershops
and schedule their visit to an establishment through a mobile application, and facilitate the
control of the barbers’ agenda in these barbershops. To demonstrate the results achieved,
at the end of this paper images of the system with descriptions of the screens and the
produced functionalities were made available, using fictitious data.
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.1 DEFINIÇÃO DO PROBLEMA . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2 OBJETIVOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.1 Objetivo geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.2 Objetivos específicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3 ESTRUTURA DO TRABALHO . . . . . . . . . . . . . . . . . . . . . . . 15
2 REFERENCIAL TEÓRICO . . . . . . . . . . . . . . . . . . . . . 16
2.1 ENGENHARIA DE SOFTWARE . . . . . . . . . . . . . . . . . . . . . . 16
2.1.1 Diagrama de casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1.2 Diagrama de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.3 Requisitos funcionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1.4 Requisitos não funcionais . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1.5 Model-View-Controller ou MVC . . . . . . . . . . . . . . . . . . . . . 19
2.2 DESENVOLVIMENTO WEB . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.1 Protocolo HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.2 Frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.3 Backend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.4 Arquitetura REST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3 DESENVOLVIMENTO MOBILE . . . . . . . . . . . . . . . . . . . . . . . 24
2.4 TRABALHOS CORRELATOS . . . . . . . . . . . . . . . . . . . . . . . . 26
3 METODOLOGIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1 DESCRIÇÃO GERAL DO SISTEMA . . . . . . . . . . . . . . . . . . . . 29
3.2 REQUISITOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.1 Requisitos funcionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.2 Requisitos não funcionais . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2.3 Modelagem do sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2.3.1 Diagrama geral da aplicação . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2.3.2 Diagramas de casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2.3.3 Diagrama de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3 PROCESSO DE DESENVOLVIMENTO . . . . . . . . . . . . . . . . . . . 36
3.3.1 Ferramentas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3.2 Implementação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.3.2.1 Banco de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.3.2.2 Backend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.3.2.3 Aplicação mobile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.3.2.4 Frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.3.3 API REST de comunicação frontend - backend . . . . . . . . . . . 44
4 RESULTADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.1 APRESENTAÇÃO DOS RESULTADOS . . . . . . . . . . . . . . . . . . . 45
4.1.1 Web - Roteiro de uso de donos de barbearias . . . . . . . . . . . . 45
4.1.2 Web - Roteiro de uso de barbeiros . . . . . . . . . . . . . . . . . . . 52
4.1.3 Mobile - Roteiro de uso de clientes de barbearias . . . . . . . . . . 55
4.2 DISCUSSÃO SOBRE OS RESULTADOS . . . . . . . . . . . . . . . . . . 67
5 CONSIDERAÇÕES FINAIS . . . . . . . . . . . . . . . . . . . . . 69
5.1 TRABALHOS FUTUROS . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
APÊNDICE A – DOCUMENTAÇÃO DA API . . . . . . . . . . 74
13
1 INTRODUÇÃO
A profissão de barbeiro é uma das mais antigas de que se tem registro. Estudos indicam
que a prática de barbear pode ter surgido cerca de 6000 anos atrás em serviços oferecidos
para a nobreza Egípcia, onde utilizavam pedras afiadas ou conchas de ostras (SCALI-
SHEAHAN, 2010). Na Grécia de 500 a.C. barbeiros cuidavam não somente da barba,
como de machucados e cicatrizes nos rostos dos homens. Em 290 a.C. a profissão já era
muito popular em Roma, onde as barbearias eram lugares onde os homens podiam não
apenas barbear, mas discutir sobre política e notícias do dia. Com o surgimento da navalha
em 1740 e seu aperfeiçoamento em 1840 por William Henson, que criou o sistema de
barbear em forma de “T”, aliado ao surgimento de cursos profissionalizantes, que tornaram
obrigatórias licenças ou certificações para exercer a profissão de barbeiro, o número de
barbearias nos Estados Unidos sofreu um aumento muito rápido e o sucesso se espalhou
por todos os nichos da sociedade (BARBEIROS, 2018d). Este sucesso se tornou o modelo
de empreendimento das barbearias que conhecemos atualmente.
No entanto, as formas com que consumimos alguns produtos e serviços sofreram mudanças
depois da popularização dos smartphones. Aplicativos móveis tornaram-se uma opção
muito fácil e rápida para consumirmos produtos de setores como alimentação, transporte,
acomodação e notícias. Os maiores destaques são os aplicativos agregadores, como iFood1 e
Uber Eats2 para alimentação, Flipboard3 para notícias, Booking4 para acomodações, entre
outros. Estes aplicativos atuam como facilitadores, tanto para quem consome, como para
quem oferece produtos e serviços por meio deles, já que incluem várias fontes diferentes
em seus catálogos, oferecendo diversas opções para seus usuários.
No final de 2019 surgiu um novo fator que modificou não apenas a dinâmica como
consumimos produtos e serviços, mas como nos relacionamos como sociedade: a COVID-
19. É uma doença causada pelo novo coronavírus SARS-CoV-2 que possui alta taxa de
transmissão e distribuição global (Governo Federal, 2021). A velocidade com que o vírus se
espalhou pelo mundo fez com que a OMS declarasse que vivemos numa pandemia do novo
coronavírus e, com isso, diversos países adotaram medidas de isolamento social a fim de
preservar a saúde de seus cidadãos. Essas medidas envolvem o uso de máscaras, controle
do número de indivíduos presentes em estabelecimentos, maior rigor na higienização dos
ambientes e até mesmo o lockdown, que é uma imposição do Estado para bloqueio total
de atividades a fim de desacelerar a propagação do vírus. Com isso, o período de espera
comumente presente em comércios e lojas de prestadores de serviços se tornou algo a ser
evitado.
1
https://www.ifood.com.br/
2
https://www.ubereats.com/br
3
https://pt-br.about.flipboard.com/
4
https://www.booking.com/index.pt-br.html
14
Com estes pontos em mente, surgiu a ideia de criar um aplicativo móvel que agregasse
diversas barbearias e facilitasse o consumo e a prestação dos serviços das mesmas através
do gerenciamento dos horários de atendimento destas barbearias, contribuindo com as
novas necessidades de isolamento social advindas do momento de pandemia que vivemos.
Posto isso, este trabalho visa desenvolver um sistema para gerenciamento de horários em
barbearias a fim de possibilitar que as vantagens citadas possam ser usufruidas por um
público maior.
1.2 OBJETIVOS
Os seguintes objetivos específicos foram identificados para que o objetivo geral fosse
atingido:
O trabalho está dividido da seguinte forma: neste capítulo foi apresentada uma introdução
sobre o assunto, a contextualização do tema, a motivação do trabalho, a definição do
problema e os objetivos pretendidos. No capítulo 2 é apresentado o referencial teórico
do trabalho, onde é explicado o funcionamento de uma barbearia bem como algumas
de suas características, além de abordar alguns softwares existentes nesta área que se
correlacionam com o deste trabalho. No capítulo 3 é demonstrada a metodologia utilizada
no desenvolvimento deste sistema de gerenciamento de barbearias. No capítulo 4 são
apresentados os resultados obtidos e são discutidas decisões de design e desenvolvimento
do código da solução proposta. Por fim, o capítulo 5 contém a conclusão e são discutidos
possíveis melhorias e trabalhos futuros que podem ser desenvolvidos a partir desse trabalho.
16
2 REFERENCIAL TEÓRICO
Este tipo de diagrama descreve uma possível utilização do sistema do ponto de vista
do usuário. Para tanto, ele descreve as principais funcionalidades e interações dessas
funcionalidades com os usuários (JACOBSON, 1992). A fim de representar os pontos
mencionados, os diagramas de casos de uso são compostos de 4 principais elementos: o
cenário, que representa a sequência de eventos decorrentes da interação do usuário com o
sistema; os atores, que são os diferentes possíveis usuários do sistema no caso de uso em
questão; o caso de uso propriamente dito, que é justamente a tarefa ou funcionalidade a
ser realizada pelo usuário; e a comunicação, sendo o que liga os atores com os casos de
uso. Um exemplo de caso de uso pode ser observado na imagem a seguir.
17
Fonte: Wikipedia
O diagrama de classes é útil para ilustrar e documentar a estrutura e as relações das classes
que servem de modelo para os objetos (FALBO, 2017). Este tipo de diagrama mapeia
os atributos, operações e relações entre os objetos do sistema, descrevendo exatamente
aquilo que deve estar presente no sistema a ser modelado. Nestes diagramas, as classes e
interfaces são representadas por retângulos com 3 divisões horizontais: a primeira para
informar o nome da classe; a segunda para os atributos da classe; e a terceira informa os
métodos que a classe possui. Além da definição dos elementos, outro ponto de grande
relevância no diagrama são as interações entre os componentes, marcadas pelas ligações
feitas por diversos tipos de linhas, podendo representar associação, generalização ou
herança, composição ou agregação. O comportamento deste tipo de diagrama pode ser
observado na Figura 2.
1
https://pt.wikipedia.org/wiki/Diagrama_de_caso_de_uso
18
Fonte: Wikipedia
Os requisitos funcionais representam todas as ações que o software deve realizar por meio
de suas funções ou serviços (FALBO, 2017). São descrições das interações entre o sistema e
o ambiente e de seus comportamentos através de entradas específicas. Os requisitos devem
ser descritos de forma objetiva e não ambígua. No sistema abordado neste trabalho, um
exemplo de requisito funcional seria “o sistema deve permitir a realização de agendamentos
de serviços nas barbearias”.
Este padrão arquitetural é composto por três camadas que estão presentes em seu nome:
Model, a camada responsável pela lógica da aplicação, que realiza as operações do sistema de
fato; View, a parte que o usuário interage, responsável por toda a exibição das informações
para o usuário; e Controller, responsável por gerenciar o fluxo de dados e ações entre as
requisições dos usuários e o que é repassado para a Model. O MVC é muito utilizado por
conta da sua separação de responsabilidades entre as diferentes partes do mesmo sistema
(GAMMA et al., 2006), isolando a lógica da regra de negócio da apresentação para o
usuário, possibilitando a existência de diversas interfaces, ou Views, que interagem com o
restante do sistema.
Figura 3 – Padrão MVC
Como base para toda troca de dados realizada na internet temos o Hypertext Transfer
Protocol, ou HTTP. É um protocolo que estabelece uma relação cliente-servidor entre as
3
https://medium.com/trainingcenter/bf95a744c66d
20
partes, onde o cliente inicia as requisições a fim de obter recursos de um servidor (Mozilla
Developer Network, 2021). Esses recursos podem ser imagens, vídeos, textos ou mesmo
páginas web inteiras.
Nos primórdios da internet, era comum que nessas requisições o cliente recebesse como
resposta uma página web inteira. Essas páginas possuíam conteúdos estáticos, ou seja, não
sofriam alterações após sua renderização em tela. Com o avanço da internet, esse tipo de
abordagem foi se tornando cada vez menos frequente, já que se deseja mais interatividade
entre os usuários e os sites. Dessa forma, o surgimento de páginas web dinâmicas foi um
caminho natural, onde certas partes do conteúdo se modificam de acordo com a interação
do usuário, seja para exibir uma lista de resultados em uma pesquisa, renderizar um mapa
de acordo com o endereço informado, etc.
O HTTP evoluiu com o tempo e hoje possui diversos métodos de requisição, dentre eles os
mais utilizados neste trabalho são:
• POST, para enviar dados ao servidor. (geralmente criando novas entradas na base de
dados).
É com base nesses métodos de requisição que a interface do usuário (frontend) interage
com o servidor (backend) da aplicação.
2.2.2 Frontend
O React é uma biblioteca gratuita de código aberto construída pelo Facebook em 2011
para construção de interfaces de usuário ou componentes da interface de usuário. No
desenvolvimento web, o foco do React se dá na criação de single-page applications, ou
SPAs, conhecidos como “aplicativos de página única” no português. Os SPAs são páginas
dinâmicas que consomem o conteúdo de acordo com as ações do usuário sem recarregar a
página, fornecendo uma experiência de usuário semelhante à de uma aplicação desktop.
Hoje o React é utilizado por milhares de empresas em todo o mundo, como Uber, Airbnb,
Facebook, Netflix, Instagram, Twitter e muitas outras.
2.2.3 Backend
linguagens, como o Laravel11 para PHP, Spring12 para Java ou Django13 para Python.
Neste trabalho, com o intuito de simplificar a base de código reutilizando conhecimentos e
linguagens de programação, optou-se pela utilização de Node.js na construção do backend,
utilizando a arquitetura REST.
Fonte: Voximplant
A Figura 615 mostra como a arquitetura REST funciona, onde o frontend faz uma requisição
HTTP para a API REST e ela, por sua vez, faz as validações e consultas necessárias para
retornar as informações solicitadas pelo frontend.
móveis. Para desenvolver esse tipo de aplicação, por muito tempo a única maneira possível
era escrevendo código específico de cada plataforma, ou seja, o desenvolvedor precisaria
escrever cada aplicação em código nativo: utilizando Java ou Kotlin para Android, e
Swift ou Objective-C para o iOS. Com o avanço da tecnologia, surgiram ferramentas de
desenvolvimento multiplataforma, onde os desenvolvedores escrevem o código utilizando
uma única linguagem e a ferramenta realiza o trabalho de traduzir esse código para a
plataforma nativa do sistema.
Uma dessas ferramentas é o React Native16 , uma biblioteca criada pelo Facebook em 2015,
baseada no React, com foco no desenvolvimento de aplicações móveis multiplataforma
utilizando JavaScript. Em contraponto aos frameworks que fazem uso de WebViews,
ou seja, o aplicativo é basicamente um website exibido no smartphone, o diferencial do
React Native é a conversão do código JavaScript para a linguagem nativa do sistema
operacional do smartphone, o que torna a experiência mais próxima do que seria uma
aplicação totalmente nativa.
Na Figura 717 temos um exemplo de como funciona a conversão do código React Native
para as plataformas nativas, onde cada elemento é transformado no seu equivalente em
código nativo de cada plataforma, como exemplo: o elemento Image do React Native é
16
https://reactnative.dev/
17
https://reactnative.dev/docs/intro-react-native-components
26
Neste trabalho a biblioteca React Native foi escolhida pois possibilita o reuso de código
entre as interfaces de usuário web e mobile, utiliza JavaScript como o restante do sistema,
fazendo com que o mesmo conhecimento seja reaproveitado no desenvolvimento dos diversos
componentes da aplicação, o que facilita a manutenção e reduz o time to market, ou tempo
de colocação no mercado, que é o tempo para que o produto seja desenvolvido até estar
disponível para os usuários finais. Além disso, facilita para que mais pessoas possam
continuar o desenvolvimento do projeto no futuro, já que demanda menos recursos por
ser uma base mais enxuta de conhecimento, ferramentas, linguagens de programação e
hardware para o desenvolvimento de aplicações móveis.
Alguns trabalhos acadêmicos possuem, como resultado final, um software que também
soluciona um dos principais problemas que o presente trabalho se propõe a resolver: realizar
o gerenciamento de uma barbearia.
Uma dessas soluções é o software Two Style (MARTINS, 2019), que foca seus esforços
numa solução desktop para um único estabelecimento, não permitindo que o cliente escolha
entre diferentes estabelecimentos. Este software permite o cadastro, a listagem, atualização
e remoçao de clientes, serviços, agendamentos e funcionários.
Outra solução é o Sistema Beleza Vip (ÁVILA, 2013), que, além de ter as mesmas
funcionalidades presentes no software Two Style, oferece a possibilidade de gerar relatórios,
informando para o dono do estabelecimento a quantidade de serviços prestados em
determinada data ou período, bem como o número de clientes atendidos e o valor recebido
por esses serviços. Esta é uma funcionalidade que não está presente no software produzido
no presente trabalho. O sistema desenvolvido e aqui exposto atua como um gerenciador
de barbearias, porém é mais do que isso: é um agregador de serviços.
Este trabalho segue a linha do iFood e estende o conceito para os serviços de barbearias.
Esse modelo foi usado principalmente por conta do sucesso da plataforma iFood no país e a
18
https://www.skyscanner.com.br/
28
familiaridade que os usuários tem com a aplicação. Portanto, além de ser um gerenciador de
barbearias, este trabalho possui como diferencial a proposta de ser um software agregador
de barbearias, tendo, além de uma interface web como um dos resultados finais, um
aplicativo móvel para Android e iOS.
29
3 METODOLOGIA
Como base para o desenvolvimento das interfaces foi utilizado como fonte de inspiração o
aplicativo iFood, por ter uma boa avaliação nas lojas de aplicativos e ser um sistema que
também gerencia as atividades de diversos estabelecimentos, porém de nichos diferentes.
O sistema para gerenciamento das atividades de barbearias presente neste trabalho foi
dividido em duas interfaces distintas: uma interface web para utilização por parte dos
donos de barbearias e também pelos barbeiros que realizam os serviços ofertados pelos
estabelecimentos; e uma aplicação móvel a fim de atender os clientes dessas barbearias. Na
interface web o dono de uma barbearia pode cadastrá-la, informando os dados da mesma,
os dias e horários de funcionamento, os serviços que ela oferece e os barbeiros que atendem
no estabelecimento. Ao barbeiro é possível visualizar sua agenda com os atendimentos
realizados, cancelados e futuros, com a identificação do cliente e o horário marcado. Já
o cliente que acessa a aplicação móvel tem acesso à lista de barbearias cadastradas na
plataforma, a localização, avaliação, os serviços ofertados, os valores cobrados por cada
um dos serviços, os barbeiros disponíveis e datas e horários disponíveis para agendar a
ida até o estabelecimento. Este usuário pode agendar um serviço pelo aplicativo, cancelar
um agendamento, avaliar a prestação de serviço dos agendamentos que ele realizou, editar
suas informações de cadastro e pesquisar barbearias,
3.2 REQUISITOS
Para construir este projeto foi necessário definir algumas funcionalidades essenciais para a
consistência da aplicação. Essas definições estão apresentadas abaixo, começando pelos
30
requisitos funcionais, que ditam o que a aplicação deve fazer, enquanto os requisitos
não funcionais dão suporte aos requisitos funcionais informando como o sistema deve
realizar tais funções. Nas tabelas abaixo temos a apresentação desses requisitos com seus
identificadores e uma descrição sobre cada um deles.
O sistema desenvolvido neste trabalho foi idealizado para ter interfaces distintas interagindo
com uma mesma API, que, por sua vez, é a responsável pela lógica de negócio da aplicação
e pela interação com os dados no banco de dados. A Figura 9 ilustra o funcionamento
geral da aplicação.
32
Além da disposição dos elementos que compõem o sistema, para o seu desenvolvimento
foram desenhados alguns cenários utilizando diagramas de caso de uso. O primeiro deles
(Figura 10) representa as possíveis ações de um usuário em um dispositivo móvel, ou seja,
um cliente de uma barbearia.
33
O segundo diagrama (Figura 11) mostra as ações que um barbeiro pode realizar por meio
de sua área na interface web. Este usuário pode, propositalmente, realizar um número
menor de ações, já que não é o tipo de usuário principal do sistema.
34
Por fim, um último diagrama de uso (Figura 12) foi desenhado listando as possibilidades
para um usuário que fosse dono de uma barbearia. Este também acessaria a interface web
e suas funcionalidades estão mais ligadas à gerência dos componentes de sua barbearia,
como os barbeiros que atuam no seu estabelecimento, os horários de funcionamento e os
serviços oferecidos.
35
3.3.1 Ferramentas
Para a construção do sistema presente neste trabalho, foi necessário o uso de diversas
ferramentas de desenvolvimento. Como base para o desenvolvimento do código foi utilizado
o editor de código Visual Studio Code1 , pela flexibilidade fornecida com o uso das extensões
presentes no software. Para a configuração inicial da aplicação o Docker2 foi utilizado.
Docker é uma plataforma que possibilita a conteinerização de softwares, onde o programador
descreve em um arquivo os softwares que ele necessita e, rodando apenas algumas linhas
de código, consegue subir um ambiente de desenvolvimento com tudo o que necessita.
No desenvolvimento, o Docker foi utilizado para agilizar o setup inicial da aplicação e
possibilitar o desenvolvimento a partir de computadores diferentes. Uma ferramenta que o
Docker possibilita configurar mais rapidamente é o PostgreSQL3 , que foi o banco de dados
relacional utilizado para construir as tabelas do sistema.
Como um dos focos deste trabalho foi tirar vantagem da possibilidade de reaproveitar tanto
código quanto conhecimento, a aplicação mobile seguiu o padrão da interface web, usando
a versão mobile do React, o React Native. A diferença do React Native para o React
utilizado na web é basicamente o foco na criação de interfaces mobile. No desenvolvimento
do app mobile também foi utilizada a biblioteca Styled Components com o mesmo princípio
empregado em sua utilização na web. E, por fim, para visualizar e interagir com a aplicação
foi necessário utilizar um emulador de celular. Como a aplicação foi desenvolvida utilizando
um computador com o sistema operacional Ubuntu na versão 18, não foi possível emular a
versão iOS do app, já que isso só é possível em um computador com o macOS da Apple.
Portanto, foi escolhido o Android Studio6 para emular um celular Android e possibilitar a
visualização do resultado do código produzido.
A disposição das ferramentas mencionadas nesta seção pode ser verificada a seguir,
onde é indicado o contexto em que cada uma das ferramentas foi utilizada durante
o desenvolvimento do código.
Ferramenta Contexto
Ubuntu 18.0.4 Backend, Frontend e Mobile
Visual Studio Code Backend, Frontend e Mobile
Docker Backend, Frontend e Mobile
PostgreSQL Backend
Node.js Backend
Express Backend
Insomnia Backend
React Frontend
Styled Components Frontend e Mobile
Google Chrome Frontend
React Native Mobile
Android Studio Mobile
3.3.2 Implementação
sistema. Essa decisão favoreceu o posterior desenvolvimento das interfaces, já que os testes
poderiam ser feitos utilizando as rotas reais já validadas no backend. A primeira interface
a ser desenvolvida foi a aplicação mobile. Isso se deu por conta do processo de criação
dos protótipos de tela, que neste trabalho foram destinados apenas ao processo criativo
do app mobile. Apenas após a finalização da aplicação mobile se deu o desenvolvimento
do frontend web. Os testes, até esse ponto, que se utilizavam de ações dos usuários deste
frontend eram feitos com inserção de dados por chamadas diretas à API, utilizando o
software Insomnia. Nas subseções a seguir, serão detalhados os fluxos de implementação
de cada uma das partes do sistema.
O banco de dados objeto-relacional escolhido para o sistema deste trabalho foi o PostgreSQL,
dada sua facilidade para integrar com o código JavaScript utilizando o ORM Sequelize7 .
Um ORM, sigla para Object Relational Mapper, ou mapeamento objeto-relacional no
português, é uma técnica para facilitar o desenvolvimento de código orientado a objetos ao
utilizarmos um banco de dados relacional (Wikipedia, 2021), de forma que as bibliotecas
ou frameworks ORM mapeiam os objetos dessas classes para as tabelas do banco de
dados, tornando os atributos das classes em colunas dessas tabelas, fazendo com que
o desenvolvedor não precise criar códigos SQL para cuidar da persistência dos dados.
Para a criação de tabelas e relacionamentos entre elas, alguns frameworks ORM utilizam
o conceito de migrations (Prisma, 2021), que, no caso do ORM Sequelize, são códigos
JavaScript descrevendo alterações no modelo de dados, criando ou removendo: tabelas,
colunas em alguma tabela ou até mesmo relacionamentos entre tabelas.
Como o foco deste trabalho está no desenvolvimento do software em si, o uso do banco de
dados se deu de forma simples, com sua evolução na aplicação se dando exclusivamente
da forma mais cômoda para o desenvolvedor: através de código, e, neste caso, JavaScript.
Todas as tabelas, atributos e relacionamentos entre as tabelas foram desenvolvidos sob
demanda, a partir da necessidade de alguns destes itens no decorrer do desenvolvimento das
funcionalidades do backend. Na Figura 14 é possível visualizar um esquema da disposição
final do banco de dados da aplicação onde cada bloco desse diagrama representa uma
tabela do banco de dados. Dentro desses blocos estão os atributos, ou colunas, de cada
tabela. E, por fim, interligando as tabelas, estão os relacionamento entre elas.
7
https://sequelize.org/v5/
40
3.3.2.2 Backend
A primeira parte da aplicação a ser desenvolvida foi a API REST responsável pela lógica
de negócio do projeto. Esse desenvolvimento só foi iniciado após a definição de alguns
requisitos funcionais, apresentados na Seção 3.2.1, pois eles funcionaram como um guia
para o que a API deveria realizar.
41
A organização do backend, assim como das demais interfaces, seguiu com um repositório
independente e uma estrutura de arquivos particular. Os arquivos referentes às variáveis de
ambiente e a pasta tmp, contendo arquivos temporários como os uploads de imagens, ficaram
na raiz do projeto, assim como os arquivos de configurações dos pacotes NPM8 utilizados
na aplicação. Os pacotes NPM (Node Package Manager) são basicamente pacotes contendo
códigos Node.js de terceiros a fim de abstrair determinadas funcionalidades necessárias
no desenvolvimento do código, como: utilização de um ORM, upload de imagens ou
manipulação de datas no JavaScript.
As tabelas do banco de dados foram todas criadas via código, utilizando o conceito de
migrations com o ORM Sequelize. Isso facilitou a realização de alterações no banco de
dados durante o desenvolvimentos pois com poucos comandos era possível modificar todo
o trabalho já realizado sem perder tempo solucionando conflitos. As classes da aplicação
foram desenvolvidas definindo apenas seus atributos e suas associações. Todos os métodos
referentes a essas classes ficaram separados nos controladores, cujos arquivos possuem o
mesmo nome das classes acrescidos do complemento "Controller", exemplo: Barber.js e
BarberController.js. Esses controladores possuem no máximo 5 métodos cada:
Para a construção de cada um desses métodos, foi necessário realizar a validação dos dados
de entrada, já que os mesmos serão enviados para o banco de dados e devem respeitar
certos tipos de dados, assim como alguns parâmetros não podem estar vazios em alguns
casos.
Todas as rotas desenvolvidas para a API ficaram contidas no arquivo routes.js dentro
do diretório src e para invocá-las é necessário que o usuário esteja autenticado. Essa
autenticação é feita por meio do uso de tokens JWT9 , que é um padrão utilizado para
autenticação em requisições web onde o token é um código Base64 e seu conteúdo
decodificado é um JSON que possui dados que possibilitam a autenticação da requisição
(TreinaWeb Tecnologia, 2021). Para obter esse token JWT é necessário que o usuário
realize login no sistema, ou seja, crie uma nova sessão na aplicação. Por conta disso, apenas
as rotas de cadastro e de login na aplicação não fazem uso do middleware de autenticação,
em todas as outras rotas temos o middleware atuando e impedindo que as requisições
sejam feitas por usuários não autenticados. Os testes dessa dinâmica da API e de todas as
rotas desenvolvidas nesta etapa de desenvolvimento do sistema foram feitos utilizando o
software Insomnia.
O início do desenvolvimento do app se deu pelas telas inicias para o usuário final, ou seja,
as telas de login e cadastro do usuário. Estas telas já estavam presentes no layout e, embora
não tenham sido construídas exatamente como no protótipo, sofreram grande influência
desse design inicial. A esta altura do desenvolvimento do sistema como um todo o backend
já havia sido construído, portanto todo o desenvolvimento desta aplicação se tornou mais
um trabalho de estilização e controle dos componentes da mesma. Desta forma, por já saber
que as requisições feitas à API estavam com o funcionamento correto, a implementação
teve seu foco nos componentes visuais e em seus comportamentos, simulando interações
e preenchimento dos dados diretamente no código. Apenas após a finalização de toda a
estilização da aplicação esses dados e requisições falsas foram substituídos pelas invocações
reais das rotas criadas na API.
Em relação ao armazenamento de dados, esta interface apenas fez uso deste recurso
para a autenticação do usuário. Uma vez que um usuário realiza o login no app, os
dados desta requisição são salvos no armazenamento local do dispositivo, conhecido como
AsyncStorage 10 . O AsyncStorage é global para o aplicativo e, como o nome sugere, realiza
operações assíncronas, guardando dados no formato chave-valor de forma não criptografada.
Quando o usuário realiza o logout da aplicação, as informações mencionadas anteriormente
são deletadas do AsyncStorage. Essa dinâmica que permite o controle de acesso dos
usuários às telas da aplicação, de acordo com este status do login.
3.3.2.4 Frontend
O desenvolvimento do frontend web não contou com a criação de mockups para criação
das telas da aplicação, porém, em questão de design, a interface foi feita em harmonia
com o que foi desenvolvido no aplicativo móvel, utilizando a mesma paleta de cores. Este
projeto contou com uma estrutura de diretórios bem simples, exemplificada abaixo:
/
public
src
assets
components
pages
layouts
10
https://reactnative.dev/docs/asyncstorage
44
routes
services
No diretório public fica o HTML base da página, que conta basicamente com o favicon, ou
ícone do site, e a instrução para a cor do tema do site em dispositivos mobile. Em src está
todo o conteúdo de fato desta aplicação, começando pelas logos dentro de assets. Dentro
de components ficaram alguns elementos que se repetem na aplicação, como botões, a barra
lateral e a barra inferior. Na pasta pages estão todas as páginas da aplicação e, dentro de
layouts, as configurações padrões de design para páginas em que o usuário está logado
e para as que ele não está logado. Todos os componentes e páginas estão organizados
em suas próprias pastas, contendo apenas dois arquivos: index.js, contendo a lógica do
componente, e styles.js, onde estão as estilizações do componente ou página em questão.
Por fim, no diretório routes estão as rotas da aplicação e em services a configuração de
navegação.
O código foi iniciado pela criação das telas de login e cadastro de usuário, com design
semelhante ao que foi implementado no aplicativo móvel. Em seguida, o desenvolvimento
seguiu com as telas a serem utilizadas pelos donos das barbearias, com ênfase na criação
de gráficos dispondo informações relevantes para este tipo de usuário. Após a finalização
destas telas, deu-se início ao desenvolvimento das telas para os barbeiros destas barbearias.
Como o foco desta interface web foi a simplicidade, imaginando que seu uso seria menor
em comparação ao aplicativo móvel, existem apenas duas telas para cada um dos tipos de
usuário: tela principal, mostrando as informações principais para cada tipo de usuário,
e a tela de edição de perfil do usuário. Apesar da simplicidade, houve uma atenção à
responsividade da aplicação já que é esperado que, ao menos os barbeiros, façam uso desta
parte do sistema por meio de um smartphone.
No apêndice A estão documentadas todas as rotas da API deste trabalho, com exemplos
de requisições, separadas em subseções de acordo com o que cada uma delas manipula. As
requisições à API, de modo geral, foram feitas utilizando o header "Content-Type"com o
valor "application/json"e fazendo uso de um Bearer Token, que é adquirido ao realizar login
na aplicação. As exceções ficam por conta da requisição para criação de novos usuários, que
não necessita de autenticação para ser acessada, e a requisição para upload de avatares para
usuários e barbearias, onde o header "Content-Type"possui o valor "multipart/form-data".
45
4 RESULTADOS
Para tornar mais objetiva a análise deste software, é importante especificar quais são as
principais funcionalidades a serem levadas em consideração. Neste caso, as funcionalidades
principais são a listagem das barbearias, já que isso envolve o correto cadastro das
informações do estabelecimento e também do dono da mesma; a realização de agendamentos
por parte dos clientes das barbearias, que é a principal funcionalidade do sistema; e a
visualização destes agendamentos por parte dos barbeiros e dos clientes que realizaram
essa ação. Além das funcionalidades em si, é necessário observar também se as informações
nas interfaces estão sendo dispostas de forma clara para os usuários, atentando-de à
responsividade no caso do uso da interface web por usuários que sejam barbeiros.
Na próxima seção os resultados serão separados em roteiros de uso dos diferentes tipos de
usuários do sistema, com o objetivo de mostrar um ciclo de uso de cada um deles com as
principais funcionalidades de cada interface.
Nesta seção serão apresentados três diferentes roteiros de uso do sistema para os diferentes
usuários da aplicação: um roteiro para donos de barbearias, um para os barbeiros destas
barbearias e, por fim, um roteiro para os clientes das barbearias. Destes roteiros, os
resultados dos dois primeiros são apresentados utilizando a interface web, já o último,
referente aos clientes das barbearias, contará com a exibição das telas do aplicativo móvel.
A tela inicial para os usuários da interface web é a tela de login (Figura 15. Uma tela
bastante similar à que está presente no aplicativo móvel, onde o usuário deve inserir apenas
seu login e senha.
46
Caso seja o primeiro acesso do usuário, o mesmo deve se registrar na aplicação. Para isso
existe a tela de cadastro de usuário (Figura 16, exigindo apenas o nome, e-mail e a criação
de uma senha para que o usuário esteja apto a utilizar o sistema.
Após realizar o login, a tela a ser exibida dependerá do tipo de usuário que está acessando
o sistema. No caso deste roteiro, o usuário é dono de uma barbearia e, portanto, sua tela
inicial quando estiver logado será a de detalhes da barbearia (Figura 17). Se o usuário
não registrou uma barbearia no sistema ainda, a tela irá conter apenas um botão para
realizar o cadastro da barbearia.
Para criar a barbearia, o usuário deve clicar no botão "Cadastrar Barbearia". Após
o clique um modal surgirá na tela solicitando algumas informações a respeito do
estabelecimento a ser cadastrado, como nome, cnpj e o endereço do mesmo (Figura
18).
48
Após clicar em "criar barbearia", o usuário verá as informações de sua barbearia listadas
na tela que antes abrigava apenas o botão para cadastro de uma barbearia (Figura 19).
Porém, para uma exibição completa dos dados, é necessário que o usuário cadastre cada
um dos itens que fazem parte da sua barbearia: os barbeiros, os serviços oferecidos e os
horários de funcionamento. Para cadastrá-los, há um botão para cada uma dessas ações,
cujo funcionamento é semelhante ao de cadastrar uma barbearia: ao clicar no botão, um
modal se abre e basta que o usuário informe os dados necessários e clique no botão de
ação ao final de cada modal para cadastrar o item (Figuras 19, 20 e 21).
49
Toda a interface foi desenvolvida de modo que as telas sejam responsivas, ou seja, caso o
usuário acesse o sistema através do navegador web de um celular, as páginas da aplicação
se ajustarão ao tamanho da tela do dispositivo e a visualização por parte do usuário não
será prejudicada. A Figura 23 um exemplo de visualização desta tela de detalhes da
barbearia de modo responsivo.
Por fim, outra página presente na visualização dos usuários web é a página de perfil (Figura
24). Ela é comum tanto aos donos de barbearia quanto aos barbeiros destas barbearias.
Nesta página o usuário pode alterar seus dados e sua foto de perfil, além de poder realizar
52
o logout da aplicação.
Assim como no roteiro de uso dos donos de barbearias, os barbeiros que utilizam a interface
web do sistema irão se deparar inicialmente com as telas de login e registro na aplicação.
Porém, já que os donos de barbearias registram cada um dos barbeiros na aplicação, estes
já acessam o sistema estando aptos a realizar login. Após o login, a tela inicial para estes
usuários é a tela de detalhes da agenda, onde o barbeiro pode visualizar cada um dos
horários de atendimento de seu dia de trabalho, com estilizações distintas para horários
passados, horários que possuem um agendamento cadastrado e horários disponíveis (Figura
25). É nesta tela também que o barbeiro pode, se desejar, cancelar um atendimento à um
cliente. Para isso, basta clicar no ícone vermelho de agenda com um X ao centro. Uma
mensagem de confirmação será exibida e, após o usuário confirmar, o atendimento será
cancelado.
53
Assim como as demais telas da aplicação, esta tela possui um design responsivo, já que
foi pensada, intencionalmente, para que os barbeiros a utilizem preferencialmente via
smartphones (Figura 26).
54
A primeira tela que um usuário irá se deparar no aplicativo móvel, caso não tenha iniciado
uma sessão, é a tela de login (Figura 28). Caso o usuário já tenha cadastro na aplicação,
basta que insira seu e-mail, a senha e clique em Entrar.
56
Se o usuário ainda não possuir cadastro, existe uma tela para cadastro de usuário (Figura
29). Ela pode ser acessada ao clicar no botão Criar conta. Para o cadastro é necessário
informar apenas o nome completo, o e-mail e uma senha. O perfil do usuário será criado
após o clique em Cadastrar.
57
Após realizar o login na aplicação, a sessão do usuário ficará salva, com o app tendo
facilmente à disposição os dados inseridos para realizar login e o token JWT obtido como
resposta da requisição. Neste caso, o usuário pode fechar o aplicativo e sempre que abrí-lo
novamente a tela inicial será a de listagem de barbearias, que possui o nome Início
na barra de navegação inferior (Figura 30). A partir deste ponto, o aplicativo enviará
automaticamente o token JWT em todas as requisições do usuário.
Na listagem de barbearias cada item retornado pela API é exibido como um pequeno card
contendo a imagem de identificação da barbearia, o nome da mesma, seu endereço e sua
58
avaliação no aplicativo, que é composta pela média das notas que os usuários deram para
os atendimentos realizados na barbearia em questão.
Selecionar uma barbearia é uma das principais funcionalidades do aplicativo já que, para
realizar o agendamento de um serviço em uma barbearia, o primeiro passo do usuário é
visualizar e selecionar o estabelecimento de sua preferência dentre os que estão listados.
Para facilitar essa escolha, foi criada a tela de busca por barbearias (Figura 31), onde
o usuário pesquisa estabelecimentos cadastrados no sistema pelo nome. Em questão
de funcionalidade, a diferença da requisição feita nesta tela para a tela de listagem de
59
barbearias fica por conta apenas da inclusão de um filtro para que o nome das barbearias
listadas correspondam ao que o usuário está digitando. Nesta busca foi utilizada a técnica
de debounce, onde a requisição para buscar barbearias é disparada automaticamente 300
milisegundos após o usuário parar a digitação.
Após a escolha da barbearia de sua preferência, o usuário é direcionado para uma tela
que contém detalhes do estabelecimento selecionado (Figura 32), exibindo os serviços
oferecidos, seus barbeiros e os horários disponíveis de acordo com seu funcionamento. É
nesta tela que o usuário tem a possibilidade de realizar um agendamento selecionando
60
Os serviços são identificados pelo nome e o valor cobrado em reais. A exibição dos barbeiros
conta com uma foto de identificação (avatar) e seus respectivos nomes. Já os horários
para realização de agendamentos seguem um padrão de duração de 30 minutos para cada
um deles no intervalo definido pelo dono da barbearia entre o início e o encerramento das
operações de cada dia.
Antes que o agendamento seja realmente realizado, é necessário que o usuário confirme a
ação. Para isso, após selecionar todos os campos necessários na tela anterior e clicar em
61
O usuário também pode visualizar os agendamentos de atendimentos que estão por vir ao
clicar na aba PRÓXIMOS. Se não existirem atendimentos futuros, a tela será exibida
sem nenhum resultado, com uma mensagem informando a situação ao usuário (Figura 35).
63
Caso o usuário tenha algum atendimento futuro para comparecer, este será exibido com
uma nova funcionalidade: a possibilidade de cancelar o agendamento.
64
Para cancelar um agendamento, basta que o usuário clique no ícone vermelho de agenda
com um X ao centro, no canto superior direito do card de agendamento (Figura 36). Como
é uma ação crítica, é necessário que o usuário confirme a ação. Por isso, ao clicar no botão
mencionado, uma janela surgirá para informar o usuário dos riscos da ação e solicitar a
confirmação da mesma (Figura 37). Caso o usuário confirme a ação, ela aparecerá com o
status Cancelado na lista de agendamentos anteriores.
65
Por fim, o usuário pode consultar e alterar as informações de seu perfil na aba Perfil da
barra de navegação (Figura 39). Nesta tela é possível alterar a foto de perfil, o nome e a
senha do usuário, além de possibilitar a realização do logout da aplicação. Para atualizar
as informações é necessário que o usuário clique em Atualizar perfil após modificar os
valores dos campos desejados. Caso o usuário deseje encerrar sua sessão no aplicativo,
basta clicar em Sair do Barbex e ele será redirecionado para a tela de login do aplicativo.
67
Após a apresentação dos resultados, é possível verificar consistência entre os layouts das
interfaces web e mobile, fazendo com que o sistema possua uma identidade própria. O
nome da aplicação (Barbex) foi dado de forma a ter um nome simples, fácil e que remetesse
ao tema em que está inserida. Além disso, foram usadas poucas cores no design das
interfaces, com o laranja atuando como realce para a marca e para os botões para ações
do usuário, o vermelho para situações de alerta em ações críticas como o cancelamento
de um agendamento ou a realização de logout, e tons de cinza e branco para os textos
68
presentes no sistema, já que foi escolhido um fundo escuro tanto para a interface web
quanto para a mobile. Com a utilização de diferentes tons dessas cores e tamanhos das
fontes dos textos foi possível hierarquizar e priorizar os conteúdos mais importantes a
serem exibidos, chamando a atenção do usuário.
A aplicação web, apesar de ser teoricamente uma interface a ser utilizada em notebooks e
desktops, foi pensada de forma responsiva pelo crescimento da utilização de smartphones
para a navegação na web. Não apenas isso, mas a responsividade oferece maior conforto
e facilidade para os usuários desta aplicação, principalmente os barbeiros, que podem
consultar a agenda rapidamente, bastando apenas realizar o login no site.
De modo geral, o sistema é enxuto, com a maior parte das funcionalidades presentes no
aplicativo móvel. Isso se dá por ser um trabalho de conclusão de curso, onde o escopo deve
ser menor para que sua realização seja factível com o tempo disponível para sua elaboração.
Porém, a aplicação permite que, com mais tempo de desenvolvimento, possa se tornar ou
ser usada como um produto de fato. Isso acontece, em partes, pela facilidade de incorporar
novas funcionalidades na API do sistema, onde, no momento, já existem funcionalidades
prontas que não tiveram seu uso implementado nas interfaces web ou mobile. Algumas
delas são: a possibilidade de notificar o barbeiro a respeito de um agendamento, ou um
usuário sobre o cancelamento de um atendimento; a possibilidade do usuário do aplicativo
móvel favoritar os estabelecimentos que mais gostou; e, também no aplicativo móvel,
possibilitar que o usuário tenha uma lista de endereços salvos, podendo alternar entre
eles quando quiser. Todas essas funcionalidades possuem lógica desenvolvida no backend
e tabelas prontas. Mais informações sobre essas possibilidades podem ser conferidas na
seção 5.1, onde serão discutidos trabalhos futuros.
Por fim, foi possível verificar que, ao final do desenvolvimento e apresentação das telas de
cada interface, os usuários de cada parte do sistema estão aptos a visualizar as informações
disponíveis e seus dados cadastrados de forma clara, com as aplicações exibindo apenas as
informações necessárias, de forma objetiva. Com isso os usuários podem realizar qualquer
ação disponível em seus contextos em menos de 10 cliques.
69
5 CONSIDERAÇÕES FINAIS
Neste trabalho foi desenvolvido um sistema para gerenciar horários de barbearias utilizando
o ecossistema da linguagem de programação JavaScript. O sistema é composto por uma
API responsável pela lógica de negócio e duas interfaces, uma web e outra mobile, e
possibilita a interação de donos de barbearias, barbeiros e clientes de barbearias com a
aplicação.
Para desenvolvimento do projeto, vários conceitos foram utilizados. Entre eles podem ser
citados: arquitetura MVC, arquitetura REST, fundamentos de desenvolvimento web e
mobile e conceitos de experiência do usuário e interface de usuário. Também foi estudado
o funcionamento das bibliotecas React e React Native para desenvolvimento do sistema.
Para que fosse possível gerenciar os horários de barbearias foi necessário mapear os itens
necessários para o funcionamento das mesmas. Após a identificação desses itens, a API
foi construída para possibilitar a manipulação destes dados, como endereço, barbeiros
cadastrados e serviços oferecidos. O resultado obtido é observado através das interfaces
construídas, tanto web quanto mobile, para interagir com essa API.
Os resultados obtidos com as interfaces web e mobile mostram que o sistema foi capaz de
realizar com sucesso as principais ações necessárias para o gerenciamento das atividades
de barbearias, como o cadastro de barbearias e barbeiros, a listagem de barbearias para
os clientes e a realização de agendamentos no app mobile, bem como o cancelamento dos
mesmos e a avaliação dos serviços prestados.
Ainda que os objetivos apresentados tenham sido alcançados, melhorias podem ser aplicadas
por trabalhos futuros:
70
• Adicionar lógica para efetuar pagamentos pelos serviços diretamente pelo aplicativo
móvel.
REFERÊNCIAS
Mozilla Developer Network. Uma visão geral do HTTP. 2021. Disponível em:
<https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Overview>. Acesso em: 12 dez.
2021.
Red Hat, Inc. O que é API REST? 2021. Disponível em: <https://www.redhat.com/
pt-br/topics/api/what-is-a-rest-api>. Acesso em: 17 dez. 2021.
A.1 SESSÕES
Resposta
1 {
2 " user " : {
3 " id " : 1 7 ,
4 " name " : " Novo Usuario " ,
5 " email " : " novousuario@gmail . com " ,
6 " barber " : false ,
7 " avatar " : null
8 },
9 " token " : " eyJhbGciOiJIUzI 1 NiIsInR 5 cCI 6 IkpXVCJ 9 . eyJpZCI 6
MTcsImlhdCI 6 MTY 0 MDYxMjU 0 OCwiZXhwIjoxNjQxMjE 3 MzQ 4 fQ .
wATUqNpBpdaiS 4 Dl - K 0 Hxn 0 LpDTMiOQgCKi 2 z 5 YcFF 8 "
10 }
A.2 USUÁRIOS
Resposta
75
1 {
2 " id " : 1 7 ,
3 " name " : " Novo Usuario " ,
4 " email " : " novousuario@gmail . com " ,
5 " barber " : false
6 }
Resposta
1 {
2 " id " : 1 7 ,
3 " name " : " Novo Usuario " ,
4 " email " : " novo_usuario@email . com " ,
5 " barber " : false ,
6 " avatar " : null
7 }
A.3 IMAGENS
Resposta
76
1 {
2 " url " : " http : // localhost : 3 3 3 3 / images / 2 6 1 3 0 4 2 5 8 9 1 b 9 d 6 0 ad 9 f 3 0
b 2 2 1 9 1 a 0 9 9 . jpg " ,
3 " id " : 7 ,
4 " name " : " 1 0 5 6 7 8 B 4 -7 0 5 7 -4 3 7 9 -9 DA 5 -5 2 1 6 0 FD 3 3 8 8 4 . jpg " ,
5 " path " : " 2 6 1 3 0 4 2 5 8 9 1 b 9 d 6 0 ad 9 f 3 0 b 2 2 1 9 1 a 0 9 9 . jpg " ,
6 " updatedAt " : " 2 0 2 2 -0 1 -1 2 T 0 1 : 3 2 : 3 7 . 6 0 0 Z " ,
7 " createdAt " : " 2 0 2 2 -0 1 -1 2 T 0 1 : 3 2 : 3 7 . 6 0 0 Z "
8 }
A.4 BARBEIROS
Resposta
1 {
2 " id " : 9 ,
3 " user " : {
4 " id " : 2 0 ,
5 " name " : " Barbeiro " ,
6 " email " : " barbeiro@gmail . com " ,
7 " avatar " : null
8 },
9 " barbershop " : {
10 " id " : 2 6 ,
11 " name " : " Novissima Barbearia "
12 }
13 }
Resposta
1 [
2 {
3 " id " : 6 ,
4 " user " : {
5 " id " : 7 ,
6 " name " : " Dougras " ,
7 " email " : " dougras@gmail . com " ,
8 " barber " : true ,
9 " avatar " : null
10 }
11 },
12 {
13 " id " : 7 ,
14 " user " : {
15 " id " : 1 5 ,
16 " name " : " Teco " ,
17 " email " : " teco@email . com " ,
18 " barber " : true ,
19 " avatar " : null
20 }
21 }
22 ]
Resposta
A.5 AGENDAMENTOS
Resposta
1 {
2 " past " : false ,
3 " cancelable " : true ,
4 " id " : 5 1 ,
5 " date " : " 2 0 2 2 -0 1 -0 5 T 1 4 : 0 0 : 0 0 . 0 0 0 Z " ,
6 " service " : " Corte de cabelo " ,
7 " price " : 2 4 . 9 ,
8 " canceled_at " : null ,
9 " createdAt " : " 2 0 2 2 -0 1 -0 5 T 0 6 : 1 2 : 1 0 . 6 8 7 Z " ,
10 " updatedAt " : " 2 0 2 2 -0 1 -0 5 T 0 6 : 1 2 : 1 0 . 6 8 7 Z " ,
11 " rating_id " : null ,
12 " barber " : {
13 " id " : 6 ,
14 " user " : {
15 " id " : 7 ,
16 " name " : " Dougras " ,
17 " email " : " dougras@gmail . com " ,
18 " avatar " : null
19 }
20 },
21 " barbershop " : {
22 " id " : 2 5 ,
23 " name " : " Maltadas Barbershop " ,
24 " address " : {
25 " id " : 4 ,
26 " street " : " Avenida S o Paulo " ,
27 " number " : " 3 5 8 4 " ,
28 " complement " : " Loja 2 " ,
29 " neighborhood " : " I t a p u " ,
30 " cep " : " 2 9 1 0 1 5 0 2 " ,
31 " city " : {
32 " id " : 1 ,
33 " city " : " Vila Velha " ,
34 " state " : {
35 " id " : 4 ,
79
Resposta
1 [
2 {
3 " past " : false ,
4 " cancelable " : true ,
5 " id " : 5 1 ,
6 " date " : " 2 0 2 2 -0 1 -0 5 T 1 4 : 0 0 : 0 0 . 0 0 0 Z " ,
7 " service " : " Corte de cabelo " ,
8 " price " : 2 4 . 9 ,
9 " canceled_at " : null ,
10 " createdAt " : " 2 0 2 2 -0 1 -0 5 T 0 6 : 1 2 : 1 0 . 6 8 7 Z " ,
11 " updatedAt " : " 2 0 2 2 -0 1 -0 5 T 0 6 : 1 2 : 1 0 . 6 8 7 Z " ,
12 " barber " : {
13 " id " : 6 ,
14 " user " : {
15 " id " : 7 ,
16 " name " : " Dougras " ,
17 " email " : " dougras@gmail . com " ,
18 " avatar " : null
19 }
20 },
21 " barbershop " : {
22 " id " : 2 5 ,
23 " name " : " Maltadas Barbershop " ,
24 " avatar " : {
25 " url " : " http : // localhost : 3 3 3 3 / images / 7 5 c 9 ca 3 2 6 f 5 1 d 7 3
fcd 6 fb 2 af 5 6 9 5 e 9 af . jpeg " ,
26 " id " : 5 ,
27 " path " : " 7 5 c 9 ca 3 2 6 f 5 1 d 7 3 fcd 6 fb 2 af 5 6 9 5 e 9 af . jpeg "
80
28 },
29 " address " : {
30 " id " : 4 ,
31 " street " : " Avenida S o Paulo " ,
32 " number " : " 3 5 8 4 " ,
33 " complement " : " Loja 2 " ,
34 " neighborhood " : " I t a p u " ,
35 " cep " : " 2 9 1 0 1 5 0 2 " ,
36 " city " : {
37 " id " : 1 ,
38 " city " : " Vila Velha " ,
39 " state " : {
40 " id " : 4 ,
41 " state " : " ES "
42 }
43 }
44 }
45 },
46 " rating " : null
47 }
48 ]
Resposta
A.6 AGENDA
Resposta
1 {
2 " appointments " : [
3 {
4 " past " : false ,
81
A.7 NOTIFICAÇÕES
Resposta
1 [
2 {
3 " read " : false ,
4 " _id " : " 6 1 d 5 3 6 ba 3 9 fb 7 c 4 b 9 2 4 2 9 c 5 f " ,
5 " content " : " Novo agendamento de Novo Usuario para dia 0 5
de janeiro , s 1 1 : 0 0 h " ,
6 " user " : 7 ,
7 " createdAt " : " 2 0 2 2 -0 1 -0 5 T 0 6 : 1 2 : 1 0 . 7 5 3 Z " ,
8 " updatedAt " : " 2 0 2 2 -0 1 -0 5 T 0 6 : 1 2 : 1 0 . 7 5 3 Z " ,
9 " __v " : 0
10 }
11 ]
82
Resposta
1 {
2 " read " : true ,
3 " _id " : " 6 1 d 5 3 6 ba 3 9 fb 7 c 4 b 9 2 4 2 9 c 5 f " ,
4 " content " : " Novo agendamento de Novo Usuario para dia 0 5 de
janeiro , s 1 1 : 0 0 h " ,
5 " user " : 7 ,
6 " createdAt " : " 2 0 2 2 -0 1 -0 5 T 0 6 : 1 2 : 1 0 . 7 5 3 Z " ,
7 " updatedAt " : " 2 0 2 2 -0 1 -0 5 T 0 6 : 2 1 : 3 9 . 9 5 1 Z " ,
8 " __v " : 0
9 }
Resposta
1 [
2 {
3 " time " : " 0 8 : 0 0 " ,
4 " value " : " 2 0 2 2 -0 1 -0 6 T 0 8 : 0 0 : 0 0 -0 3 : 0 0 " ,
5 " available " : true
6 },
7 {
8 " time " : " 0 8 : 3 0 " ,
9 " value " : " 2 0 2 2 -0 1 -0 6 T 0 8 : 3 0 : 0 0 -0 3 : 0 0 " ,
10 " available " : true
11 },
12 {
13 " time " : " 0 9 : 0 0 " ,
14 " value " : " 2 0 2 2 -0 1 -0 6 T 0 9 : 0 0 : 0 0 -0 3 : 0 0 " ,
15 " available " : true
16 },
17 {
18 " time " : " 0 9 : 3 0 " ,
83
97 {
98 " time " : " 1 7 : 3 0 " ,
99 " value " : " 2 0 2 2 -0 1 -0 6 T 1 7 : 3 0 : 0 0 -0 3 : 0 0 " ,
100 " available " : true
101 }
102 ]
Resposta
1 {
2 " weekday " : " segunda - feira " ,
3 " opening_hour " : " 1 0 : 0 0 : 0 0 " ,
4 " closing_hour " : " 1 8 : 0 0 : 0 0 " ,
5 " barbershop " : {
6 " id " : 2 6 ,
7 " name " : " Novissima Barbearia " ,
8 " cnpj " : " 1 2 3 3 3 3 3 3 4 4 4 4 5 7 "
9 }
10 }
Resposta
1 [
2 {
3 " id " : 2 1 ,
4 " weekday " : " segunda - feira " ,
86
Resposta
1 {
2 " id " : 2 3 ,
3 " opening_hour " : " 1 0 : 0 0 : 0 0 " ,
4 " closing_hour " : " 2 3 : 0 0 : 0 0 "
5 }
87
Resposta
A.10 BARBEARIAS
Resposta
1 {
2 " id " : 2 6 ,
3 " name " : " Nova Barbearia " ,
4 " cnpj " : " 1 2 3 3 3 3 3 3 4 4 4 4 5 7 " ,
5 " grade " : null ,
6 " createdAt " : " 2 0 2 2 -0 1 -0 4 T 1 8 : 2 1 : 3 7 . 3 0 3 Z " ,
7 " updatedAt " : " 2 0 2 2 -0 1 -0 4 T 1 8 : 2 1 : 3 7 . 3 0 3 Z " ,
8 " avatar_id " : null ,
9 " address " : {
10 " id " : 1 5 ,
11 " street " : " Rua nova " ,
12 " number " : " 1 2 3 4 " ,
13 " complement " : null ,
14 " neighborhood " : " I t a p u " ,
15 " cep " : " 2 9 1 0 1 6 1 0 " ,
16 " city " : {
17 " id " : 1 ,
18 " city " : " Vila Velha " ,
19 " state " : {
20 " id " : 4 ,
21 " state " : " ES "
88
22 }
23 }
24 },
25 " User " : {
26 " id " : 1 7 ,
27 " name " : " Novo Usuario " ,
28 " email " : " novousuario@gmail . com " ,
29 " barber " : false ,
30 " avatar_id " : null
31 },
32 " avatar " : null
33 }
Resposta
1 [
2 {
3 " id " : 2 6 ,
4 " name " : " Nova Barbearia " ,
5 " grade " : null ,
6 " address " : {
7 " id " : 1 5 ,
8 " street " : " Rua nova " ,
9 " number " : " 1 2 3 4 " ,
10 " complement " : null ,
11 " neighborhood " : " I t a p u " ,
12 " cep " : " 2 9 1 0 1 6 1 0 " ,
13 " city " : {
14 " id " : 1 ,
15 " city " : " Vila Velha " ,
16 " state " : {
17 " id " : 4 ,
18 " state " : " ES "
19 }
20 }
21 },
22 " avatar " : null
89
23 },
24 {
25 " id " : 2 5 ,
26 " name " : " Maltadas Barbershop " ,
27 " grade " : 4 ,
28 " address " : {
29 " id " : 4 ,
30 " street " : " Avenida S o Paulo " ,
31 " number " : " 3 5 8 4 " ,
32 " complement " : " Loja 2 " ,
33 " neighborhood " : " I t a p u " ,
34 " cep " : " 2 9 1 0 1 5 0 2 " ,
35 " city " : {
36 " id " : 1 ,
37 " city " : " Vila Velha " ,
38 " state " : {
39 " id " : 4 ,
40 " state " : " ES "
41 }
42 }
43 },
44 " avatar " : {
45 " url " : " http : // localhost : 3 3 3 3 / images / 7 5 c 9 ca 3 2 6 f 5 1 d 7 3 fcd
6 fb 2 af 5 6 9 5 e 9 af . jpeg " ,
46 " id " : 5 ,
47 " path " : " 7 5 c 9 ca 3 2 6 f 5 1 d 7 3 fcd 6 fb 2 af 5 6 9 5 e 9 af . jpeg "
48 }
49 },
50 {
51 " id " : 2 1 ,
52 " name " : " Barbearia do Lukinhas " ,
53 " grade " : null ,
54 " address " : {
55 " id " : 1 1 ,
56 " street " : " Alameda Z " ,
57 " number " : " 6 3 " ,
58 " complement " : null ,
59 " neighborhood " : " Interlagos " ,
60 " cep " : " 2 9 1 0 7 5 6 3 " ,
90
Resposta
1 {
2 " id " : 2 6 ,
3 " name " : " Novissima Barbearia " ,
4 " cnpj " : " 1 2 3 3 3 3 3 3 4 4 4 4 5 7 " ,
5 " grade " : null ,
6 " createdAt " : " 2 0 2 2 -0 1 -0 4 T 1 8 : 2 1 : 3 7 . 3 0 3 Z " ,
7 " updatedAt " : " 2 0 2 2 -0 1 -0 5 T 0 3 : 3 5 : 3 8 . 7 0 0 Z " ,
8 " avatar_id " : null ,
9 " address " : {
10 " id " : 1 5 ,
11 " street " : " Rua nova " ,
12 " number " : " 1 2 3 4 " ,
13 " complement " : null ,
14 " neighborhood " : " I t a p u " ,
15 " cep " : " 2 9 1 0 1 6 1 0 " ,
16 " city " : {
17 " id " : 1 ,
18 " city " : " Vila Velha " ,
91
Resposta
Resposta
1 {
2 " id " : 2 6 ,
3 " name " : " Novissima Barbearia " ,
4 " cnpj " : " 1 2 3 3 3 3 3 3 4 4 4 4 5 7 " ,
5 " grade " : null ,
6 " createdAt " : " 2 0 2 2 -0 1 -0 4 T 1 8 : 2 1 : 3 7 . 3 0 3 Z " ,
7 " updatedAt " : " 2 0 2 2 -0 1 -0 5 T 0 3 : 3 5 : 3 8 . 7 0 0 Z " ,
8 " address " : {
9 " id " : 1 5 ,
10 " street " : " Rua nova " ,
11 " number " : " 1 2 3 4 " ,
12 " complement " : null ,
92
A.11 ENDEREÇOS
Resposta
1 {
2 " id " : 1 5 ,
3 " street " : " Rua nova " ,
4 " number " : " 1 2 3 " ,
5 " complement " : null ,
6 " neighborhood " : " I t a p u " ,
7 " cep " : " 2 9 1 0 1 6 1 0 " ,
8 " createdAt " : " 2 0 2 2 -0 1 -0 4 T 1 8 : 0 0 : 0 7 . 3 5 1 Z " ,
9 " updatedAt " : " 2 0 2 2 -0 1 -0 4 T 1 8 : 0 0 : 0 7 . 3 5 1 Z " ,
10 " city_id " : 1 ,
93
Resposta
1 {
2 " id " : 1 5 ,
3 " street " : " Rua nova " ,
4 " number " : " 1 2 3 4 " ,
5 " complement " : null ,
6 " neighborhood " : " I t a p u " ,
7 " cep " : " 2 9 1 0 1 6 1 0 " ,
8 " city " : {
9 " id " : 1 ,
10 " city " : " Vila Velha " ,
11 " state " : {
12 " id " : 4 ,
13 " state " : " ES "
14 }
15 }
16 }
Resposta
Resposta
1 {
2 " id " : 7 ,
3 " user_id " : 1 7 ,
4 " address_id " : 1 0 ,
5 " updatedAt " : " 2 0 2 2 -0 1 -0 4 T 1 8 : 0 9 : 5 0 . 6 9 6 Z " ,
6 " createdAt " : " 2 0 2 2 -0 1 -0 4 T 1 8 : 0 9 : 5 0 . 6 9 6 Z " ,
7 " main " : false
8 }
Resposta
1 [
2 {
3 " id " : 7 ,
4 " main " : false ,
5 " address " : {
6 " id " : 1 0 ,
7 " street " : " Alameda S " ,
8 " number " : " 6 9 " ,
9 " complement " : null ,
10 " neighborhood " : " Interlagos " ,
11 " cep " : " 2 9 1 0 7 5 6 9 " ,
12 " city " : {
13 " id " : 1 ,
14 " city " : " Vila Velha " ,
15 " state " : {
16 " id " : 4 ,
95
Resposta
1 {
2 " id " : 7 ,
3 " main " : true ,
4 " address " : {
5 " id " : 1 0 ,
6 " street " : " Alameda S " ,
7 " number " : " 6 9 " ,
8 " complement " : null ,
9 " neighborhood " : " Interlagos " ,
10 " cep " : " 2 9 1 0 7 5 6 9 " ,
11 " city " : {
12 " id " : 1 ,
13 " city " : " Vila Velha " ,
14 " state " : {
15 " id " : 4 ,
16 " state " : " ES "
17 }
18 }
19 }
20 }
96
A.13 FAVORITOS
Resposta
1 {
2 " id " : 9 ,
3 " barbershop " : {
4 " id " : 2 5 ,
5 " name " : " Maltadas Barbershop " ,
6 " cnpj " : " 1 2 3 3 3 3 3 3 4 4 4 4 1 2 " ,
7 " grade " : 4 ,
8 " address_id " : 4 ,
9 " owner " : 1 ,
10 " avatar_id " : 5 ,
11 " avatar " : {
12 " url " : " http : // localhost : 3 3 3 3 / images / 7 5 c 9 ca 3 2 6 f 5 1 d 7 3 fcd
6 fb 2 af 5 6 9 5 e 9 af . jpeg " ,
13 " id " : 5 ,
14 " path " : " 7 5 c 9 ca 3 2 6 f 5 1 d 7 3 fcd 6 fb 2 af 5 6 9 5 e 9 af . jpeg "
15 }
16 }
17 }
Resposta
1 [
2 {
3 " id " : 9 ,
4 " barbershop " : {
5 " id " : 2 5 ,
6 " name " : " Maltadas Barbershop " ,
97
Resposta A requisição de sucesso apresenta apenas um código HTTP 200 como resposta.
A.14 AVALIAÇÕES
Resposta
1 {
2 " id " : 2 2 ,
3 " user_id " : 8 ,
4 " barbershop_id " : 2 5 ,
5 " grade " : 5 ,
6 " comment " : " Atendimento muito bom !!!" ,
7 " updatedAt " : " 2 0 2 2 -0 1 -0 5 T 0 4 : 4 1 : 2 9 . 4 3 4 Z " ,
98
Resposta
1 [
2 {
3 " id " : 2 1 ,
4 " grade " : 4 ,
5 " comment " : " Muito boa !" ,
6 " createdAt " : " 2 0 1 9 -1 1 -0 2 T 0 3 : 3 2 : 3 9 . 5 2 2 Z " ,
7 " user " : {
8 " name " : " Magno " ,
9 " avatar " : null
10 }
11 },
12 {
13 " id " : 2 0 ,
14 " grade " : 4 ,
15 " comment " : null ,
16 " createdAt " : " 2 0 1 9 -1 1 -0 2 T 0 3 : 3 2 : 0 3 . 9 5 3 Z " ,
17 " user " : {
18 " name " : " Magno " ,
19 " avatar " : null
20 }
21 }
22 ]
Resposta
1 {
2 " id " : 5 ,
3 " service_id " : 2 ,
4 " price " : 1 5 . 9 5 ,
5 " barbershop_id " : 2 6 ,
6 " updatedAt " : " 2 0 2 2 -0 1 -0 5 T 0 4 : 0 7 : 0 0 . 1 7 3 Z " ,
7 " createdAt " : " 2 0 2 2 -0 1 -0 5 T 0 4 : 0 7 : 0 0 . 1 7 3 Z "
8 }
Resposta
1 [
2 {
3 " id " : 5 ,
4 " price " : 1 5 . 9 5 ,
5 " Service " : {
6 " name " : " Aparar barba "
7 }
8 }
9 ]
Resposta
1 {
2 " id " : 5 ,
3 " price " : 2 0 ,
4 " createdAt " : " 2 0 2 2 -0 1 -0 5 T 0 4 : 0 7 : 0 0 . 1 7 3 Z " ,
5 " updatedAt " : " 2 0 2 2 -0 1 -0 5 T 0 4 : 1 0 : 2 8 . 6 8 6 Z " ,
6 " barbershop_id " : 2 6 ,
100
Resposta A requisição de sucesso apresenta apenas um código HTTP 200 como resposta.