Documentação Arquitetural para o Comunidades.tech
Autora
Este documento foi produzido por Raquel Ambrozio da Fonseca.
- Matrícula: 116210531
- Contato: raquel.fonseca@ccc.ufcg.edu.br
- Projeto documentado: https://github.com/universoimpulso/comunidadestech
Descrição Arquitetural – Comunidades.tech
Este documento descreve parte da arquitetura de parte do sistema Comunidades.tech. Essa descrição foi baseada principalmente no modelo C4.
É importante destacar que será considerado apenas as principais funcionlidades do Comunidades.tech, ou seja, elementos específicos do sistema e suas implementações não serão detalhados.
Descrição Geral sobre o Comunidades.tech
O Comunidades.tech é um projeto open source desenvolvido pela comunidade da Impulso.Network, que tem como objetivo ser um espaço de visibilidade e fortalecimento das comunidades de tecnologia. O sistema pode ser acessado neste link.
Comunidades.tech
Objetivo Geral
Implementar um sistema para divulgar comunidades nacionais relacionadas a tecnologia, sendo essas vituais ou presenciais.
Objetivos Específicos
Queremos cadastrar e publicar comunidades de tecnologia, levando em consideração suas principais caracteríticas, como tipo (Discord, Meetup, Slack, etc) e categoria (Desenvolvimento de Software, Infraestrutura, Dados, Games, etc ). Por fim, disponibilizar essas comunidades em um catálogo com seus devidos dados, para que as pessoas consigam encontrar (utilizando os filtros) comunidades de seu interesse de maneira rápida e prática.
Contexto
O sistema Comunidades.tech utiliza a API do LinkedIn como login para manter o cadastro e fazer a autenticação do usuário. Esse usuário pode ser classificado nas seguintes categorias:
- Pessoa que representa uma ou mais comunidades e deseja cadastrar e divulgar sua(s) comunidade(s);
- Pessoa que quer participar de comunidade(s) e deseja buscar e visualizar comunidades do seu interesse;
- Ambos.
As informações das comunidades cadastradas são maninpuladas pelo Back-end do sistema Comunidades.tech, e armazenadas em um Banco de Dados mantido pelo mesmo.
Abaixo está o diagrama de contexto.
OBS: Além do LinkedIn, também pode ser utilizada uma conta do Google para realizar o cadastro do usuário, mas, por questões de simplificação, esse detalhe não foi ilustrado.
Containers
O sistema Comunidades.tech é uma aplicação que pode ser dividida basicamente em três grandes partes (containers):
- O Front-end (implementado utilizando React.JS): é a parte que o usuário interage através do seu navergador web para acessar as funcionalidades do sistema;
- O Back-end (implementado utilizando Node.JS): é responsável pela lógica de negócios;
- Banco de Dados (MongoDB): onde os dados sobre os usuários e as comunidades cadastradas/publicadas são armazenados;
Abaixo está o diagrama de containers.
Os containers estão executando/implantandos na plataforma em núvem Heroku. E toda comunicação é feita via API-REST em formato JSON utilizando protocolos HTTPS.
Alguns serviços da API são:
- Adicionar uma comunidade cadastrada;
- Recuperar informações de uma comunidade cadastrada;
- Deletar uma comunidade cadastrada.
Componentes
Os principais componentes da API do sistema Comunidades.tech estão descritos a seguir:
- Login: componente responsável pelo login dos usuários no sistema;
- Segurança: componente responsável por funcionalidades relacionadas ao login, mudança de senhas, etc;
- Cadastro de Usuário: componente responsável pelo cadastro de um usuário no sistema;
- Cadastro de Comunidade: componente responsável pelo cadastro de uma comunidade;
- Edição dos Dados da Comunidade: componente responsável pela atualização dos dados das comunidades cadastradas pelo usuário;
- Dashboard: componente responsável pela vizualização de todas as comunidades cadastradas do usuário.
A seguir está o diagrama de componentes ilustrando os componentes supracitados.
Código
Nesta etapa não faremos diagramas que apresentam detalhes da implementação. Faremos isso mais adiante.
Visão de Informação
O objetivo do sistema é divulgar comunidades, por isso, entender o fluxo das informações relacionadas com o procedimento de cadastro até a divulgação dessas comunidades é muito importante.
O primeiro passo para conseguir publicar uma comunidade é fazer parte do Comunidades.tech, ou seja, ter um cadastrado ativo no sistema. Após o login, é possível visualizar um botão “Casdastre uma comunidade”, clicando nele, será aberta a página de cadastro com alguns formulários que solicitam informações como: nome, localização, membros e links. Após o preenchimento dos quatro formulários, e concluída a revisão dos dados preenchidos, basta clicar no botão “Criar Comunidade”, e acomunidade será cadastrada. Logo pós o cadastro, automaticamente a comunidade será encaminhada para análise, onde ocorre a validação dos dados. Finalmente, a depender do resultado da análise, a comunidade será aprovada e publicada no catálogo de comunidades.
A seguir está o diagrama de máquina de estados para descrever os estados do procedimento de publicação de uma comunidade.
Contribuições Concretas
Para a realização de contribuições acessei o repositório onde está localizado o projeto Comunidades.tech, fiz o fork do projeto, clonei o reposítório, criei uma branch chamada architectural-documentation. Na raiz do projeto, criei um arquivo Markdown chamado architectural-documentationn e uma pasta (com o mesmo nome) para armazenar as imagens utilizadas no Markdown. Por fim, copiei, colei e salvei o conteúdo desse documento (exceto as seções código e contribuições concretas) no arquivo criado. Fiz o commit, o push e realizei o pull request. O pull request pode ser visualizado aqui.
Após revisão do código enviado, foi solicitado que fosse alterado o modo de contato (que estava com um e-mail acadêmico), para o link do meu perfil no GitHub. Logo depois que a alteração foi concluída e submetida, o pull request foi aceito (16/10/2020).
Referências
Todo conteúdo desse documento foi baseado no estudo do código do repositório do projeto, juntamente com informações adicionais adquiridas através de integrantes da comunidade da Impulso Network.