# Pingr
AVISO
Há uma atualização na documentação: os wireframes das páginas estão disponíveis! Acesse o menu na barra de navegação.
# Contexto
O Pingr é um sistema hipotético inspirado no Twitter (opens new window). Foi criado como projeto para o curso Arquitetura Ágil de Software, ministrado durante o Programa de Verão - IME-USP - 2021 (opens new window).
Agora será utilizado com projeto na disciplina MAC0475 - Laboratório de Sistemas Computacionais Complexos (opens new window) oferecida pelo Departamento de Ciência da Computação - IME-USP.
Todo o material de documentação do sistema estará disponível nesta página.
# Introdução
O Pingr é uma rede social no formato de microblog, caracterizada pelo fato de que os usuários podem postar atualizações limitadas a 140 caracteres. Cada atualização, chamada de ping, pode ser respondida em um novo ping, pode receber uma curtida ou então pode receber pongs -- um compartilhamento por outros usuários.
Depois de um sucesso estrondoso nos primeiros dois anos e do constante crescimento da base de usuários, a empresa Pingr recebeu um grande aporte financeiro na virada de 2020 para 2021. Esse aporte possibilitou a mudança de escritório para um novo lugar onde poderão fazer as rodadas de contratação que planejavam. O planejamento é multiplicar a equipe de desenvolvimento -- indo de 15 para 250 membros ao longo dos próximos 12 meses.
Consulte os requisitos do sistema aqui.
# Proposta de Arquitetura
# Panorama
IMPORTANTE
Esta proposta é de autoria dos professores do curso. Seu propósito é servir como referência do processo de criação, da adoção de padrões e da condução do raciocínio durante a documentação. Não é a única arquitetura correta.
Abaixo, uma visão de microsserviços panorâmica.
As resposnsabilidades e funcionalidades de cada microsserviço são as seguintes:
- Autenticação
- realiza a autenticação das requisições HTTP(S) que entram no sistema. A autorização deve ser realizada por cada um dos demais microsserviços;
- time: Squirtle
- repositório:
- Bate Papo
- gerencia o conteúdo privativo, ou Direct Pings (DPs), permitindo criação de novas conversas e leitura e envio de novas mensagens;
- time: Bulbasaur
- repositório:
- Recomendação
- faz a indexação de todo o conteúdo de pings para gerar as listas de TagNow (Here e World), e dispara buscas por hashtags;
- time: Abra
- repositório:
- Conexões
- gerencia a relação entre usuários, permitindo a solicitação e resolução de solicitação de amizade, além de visualizar e gerenciar a lista de amigos especiais;
- time: Pikachu
- repositório:
- Feed
- gerencia o conteúdo exibido a um usuário em suas mesas, e também permite a criação de mesas secundárias;
- time: Sandshrew
- repositório:
- Interação
- gerencia a interação em pings, permitindo curtir e pongar (compartilhar);
- time: Charmander
- repositório:
- Ping
- permite a criação e a remoção de pings, bem como a edição de visibilidade de um ping (público, privado ou restrito aos amigos especiais);
- time: Ekans
- repositório:
- Perfil
- gerencia a entidade Usuário, permitindo criação, atualização e remoção de conta, além de gerenciar a visibilidade de cada usuário (público ou privado);
- time: Onix
- repositório:
OBSERVAÇÃO
Todos os serviços fazem uso de bancos de dados para persistência e busca de informações, e cada serviço poderia se beneficiar de um modelo de dados diferente. Porém, por questões didáticas, todos os serviços utilizarão o MongoDB (opens new window).
# Eventos e Comunicação interna
Abaixo, uma visão de eventos e comunicação entre serviços.
# Mapeamento Time-Serviço
- Perfil - Onix
- Autenticação - Squirtle
- Conexões - Pikachu
- Bate-Papo - Bulbasaur
- Ping - Ekans
- Recomendação - Abra
- Interação - Charmander
- Feed - Sandshrew
# Padrões
Nesta proposta de arquitetura, alguns padrões de microsserviço são adotados. São eles: