Skip to content

JohnPetros/tech-guardian

Repository files navigation

Tech Guardian 🛡️


Sobre o Projeto | Demonstração | Funcionalidades | Práticas de acessibilidade aplicadas | Deploy | Tecnologias | Como rodar a aplicação? | Como contribuir | Layout | Licença

🖥️ Sobre o Projeto

Esse é um projeto Help Desk, ou seja, uma aplicação voltada para registrar e solucionar problemas relacionado a algum hardware ou sistema de uma empresa.

No caso do Tech Guardian, há dois tipos de usuário: aquele que pode abrir chamados relatando a ocorrência de um problema relacionado a um patrimônio da empresa (denominado como Tech), e aquele que pode sugerir uma solução para resolver o problema em questão (denominado como Guardian).

O objetivo para a construção desse projeto foi estudar e aplicar conceitos básicos de backend, como autenticação, permissão de usuário, renderização estática, CRUD, paginação e filtragem de dados utilizando NodeJs e EJS.


✨ Funcionalidades

Autenticação de usuário

  • Deve ser possível autenticar um usuário por e-mail e senha
  • Não deve ser possível autenticar um usuário que não existe
  • Todas as ações por dentro do sistema devem exigir autenticação do usuário, caso contrário o usuário deve voltar para tela de autenticação
  • Deve ser possível verificar se um usuário é do tipo Tech, Guardian ou Admin

Cadastro de usuário

  • Deve ser possível cadastrar um usuário
  • Ao se cadastrar o usuário pode escolher ser do tipo Tech ou Guardian, mas não Admin
  • Não deve ser possível cadastrar um usuário já existente
  • O usuário cadastrado deve ter um avatar registrado por padrão
  • [] Somente um usuário do tipo Admin pode cadastrar outro usuário do tipo Admin

Listagem de chamados

  • Deve ser possível listar chamados, com seus respectivos dados, bem como o usuário que criou o chamado
  • Deve ser possível filtrar chamados título, patrimônio associado, data de criação ou por status (se está aberto/pendente ou fechado/solucionado)
  • Deve ser possível paginar os chamados
  • Deve ser possível aplicar uma ou mais filtragens ao mesmo tempo
  • Qualquer tipo de usuário pode ver os chamados listados
  • Na listagem de chamados fechados deve ser possível ver os dados do usuário que solucionou o chamado

Criação de chamado

  • Deve ser possível criar um novo chamado
  • Chamados recém-criados deve estar com status aberto por padrão
  • Apenas usuários do tipo Tech podem criar chamados
  • Os dados do chamado podem ser lidos por qualquer tipo de usuário

Solução de chamado

  • Deve ser possível enviar uma solução escrita que vise solucionar um chamado
  • Apenas usuários do tipo Guardian podem enviar soluções
  • Não deve ser possível enviar uma solução associado a um chamado que já esteja fechado, ou seja, solucionado
  • A solução enviada pode ser lida por qualquer tipo de usuário

Abertura e fechamento de chamado

  • Deve ser possível abrir novamente um chamado
  • Somente chamados que estejam fechados podem ser abertos novamente
  • Somente chamados com solução podem ser fechados
  • Somente usuário do tipo Tech pode abrir novamente ou fechar um chamado
  • Somente o usuário que criou o chamado pode abri-lo novamente ou fechá-lo

Edição de chamado

  • Deve ser possível editar os dados de um chamado
  • Somente os dados inseridos ao criar um chamado podem ser editados
  • Somente usuário do tipo Tech pode editar um chamado
  • Somente o usuário que criou o chamado pode editá-lo

Deleção de chamado

  • Deve ser possível deletar um chamado
  • Não deve ser possível deletar um chamado que não existe
  • Somente usuário do tipo Tech pode deletar um chamado
  • Somente usuário que criou o chamado pode deletá-lo

Usuário administrador

  • Todo e qualquer ação feita por um usuário do tipo Tech ou Guardian pode ser feita por um usuário do tipo Admin

Cadastro de patrimônio

  • Deve ser possível cadastrar um patrimônio
  • Não deve ser possível cadastrar um patrimônio já existente
  • Somente usuário do tipo Admin pode cadastrar um patrimônio

Listagem de patrimônios

  • Deve ser possível listar patrimônios
  • Deve ser possível filtrar os patrimônios por título
  • Deve ser possível paginar os patrimônios
  • Somente usuário do tipo Admin pode visualizar, filtrar e paginar os patrimônios

Edição de patrimônio

  • Deve ser possível editar um patrimônio
  • Não deve ser possível editar um patrimônio que não existe
  • Somente usuário do tipo Admin pode editar um patrimônio

Deleção de patrimônio

  • Deve ser possível deletar um patrimônio
  • Não deve ser possível deletar um patrimônio que não existe
  • Somente usuário do tipo Admin pode deletar um patrimônio

Listagem de usuários

  • Deve ser possível listar usuários
  • Deve ser possível filtrar os usuários por título ou por tipo (se é do tipo Tech ou Guardian)
  • Deve ser possível paginar os usuários
  • Somente usuário do tipo Admin pode visualizar, filtrar e paginar os usuários

Edição de usuário

  • Deve ser possível editar a conta de um usuário
  • Somente o usuário que cadastrou a conta ou usuário do tipo Admin pode editá-la
  • Deve ser possível mudar o tipo de usuário (Tech ou Guardian, mas não do tipo Admin)
  • Dever ser possível mudar o avatar de usuário enviando um arquivo de imagem válido
  • Todos os dados do usuário são atualizados de uma vez, porém o usuário pode escolher altarar ou não sua senha
  • Somente usuário do tipo Admin pode mudar o tipo de outro usuário para Admin

Deleção de usuário

  • Deve ser possível deletar a conta de um usuário
  • Somente o usuário que cadastrou a conta ou um usuário do tipo Admin pode deletá-la

🛠️ Tecnologias

Este projeto foi desenvolvido usando as seguintes tecnologias:

✔️ HTML Para a contrução das páginas

✔️ CSS Para a estilização das páginas

✔️ JS Para a criação de ações dinâmicas das páginas

✔️ NodeJs Para executar JS no lado do servidor e prover os recursos e as funcionalidades principais da aplicação

✔️ EJS - para renderização de recursos estáticos como páginas HTML, arquivos CSS, JS e imagens

✔️ Phosphor icons - para exibição de ícones

✔️ PostgreSQL - banco de dados da aplicação

✔️ Knex - Para a construção automáticas de queries para interagir com o banco de dados

Para mais detalhes acerca das dependências do projeto veja o arquivo package.json


🚀 Como rodar a aplicação?

🔧 Pré-requisitos

Antes de baixar o projeto você vai precisar ter instalado na sua máquina as seguintes ferramentas:

Além disto é bom ter um editor para trabalhar com o código como VSCode

📟 Rodando a aplicação

# Clone este repositório
$ git clone https://github.com/JohnPetros/tech-guardian.git

# Acesse a pasta do projeto
$ cd tech-guardian

# Instale as dependências
$ npm install 
# ou
$ yarn add

# Execute as migrations do banco de dados
$ knex migrate:latest

# Execute a aplicação em modo de desenvolvimenro
$ npm run dev 
# ou
$ yarn dev

# Provavelmente a aplicação estará rodando na porta 3000, então acesse http://localhost:3333

Além disto é crucial configurar as variáveis de ambiente em um arquivo chamado .env antes de executar a aplicação. veja o arquivo .env.example para ver quais variáveis devem ser configuradas


⚙️ Deploy

O deploy dessa aplicação foi realizada usando a plataforma da Render, o que implica dizer que você pode acessar aplicação funcionando acessando esse link.


💪 Como contribuir

# Fork este repositório
$ git clone https://github.com/JohnPetros/tech-guardian.git

# Cria uma branch com a sua feature
$ git checkout -b minha-feature

# Commit suas mudanças:
$ git commit -m 'feat: Minha feature'

# Push sua branch:
$ git push origin minha-feature

Você deve substituir 'minha-feature' pelo nome da feature que você está adicionando

Você também pode abrir um nova issue a respeito de algum problema, dúvida ou sugestão para o projeto. Ficarei feliz em poder ajudar, assim como melhorar este projeto


🎨 Layout

O design do projeto, assim como a ideia geral é inpirado no RocketHelp, aplicativo desenvolvido no evento Ignite Lab 03 - React Native da Rocketseat.


📝 Licença

Esta aplicação está sob licença do MIT. Consulte o Arquivo de licença para obter mais detalhes sobre.


Feito 💜 by John Petros 👋🏻