Executando verificação de segurança...
19
Zaqueu
9 min de leitura ·

👨🏻‍💻 +1.000 Commits Depois: Checkpoint do Meu Projeto Open-Source 📈

Venho desenvolvendo um projeto open-source há cerca de 2 anos: O Syki é um sistema de gerenciamento de instituições de ensino que pode ser usado por gestores, professores e alunos.

Esse post é um checkpoint do projeto, onde trago alguns números atingidos até agora:

  • 👨🏻‍💻 +1.000 commits
  • ⭐ +140 estrelas no GitHub
  • 🧪 +500 testes automatizados
  • 📍 +90 endpoints documentados
  • 🚀 +50 funcionalidades implementadas

No repositório do projeto você encontra tudo sobre as funcionalidades do sistema, as tecnologias utilizadas, documentação e muito mais!

Sumário

  1. Funcionalidades
  2. Tecnologias
  3. Testes
  4. CI/CD
  5. Infra
  6. Usabilidade
  7. Processamento Assíncrono
  8. Auditoria
  9. Observabilidade
  10. Rate Limiting
  11. Documentação
  12. Real Time
  13. Cache
  14. Arquitetura
  15. Banco de Dados

1 - Funcionalidades

O Syki possui diversas funcionalidades, que podem ser categorizadas com base em cada perfil de usuário do sistema:

  • Acadêmico: usuário em cargo de gestão dentro da instituição de ensino
  • Professor: usuário que leciona nas turmas da instituição
  • Aluno: usuário matriculado em algum curso da instituição
  • Adm: usuário administrador do sistema globalmente

Existem também as funcionalidades "Cross", que podem ser acessadas por qualquer usuário, como as de "Login" e "Esqueci Minha Senha".

1.1 - Cross

1.1.1 - Cadastro de Usuário

  • Cadastrar-se no sistema informando seu email.
  • Definir senha utilizando o link de confirmação de email.

1.1.2 - Esqueci Minha Senha

  • Redefinir sua senha utilizando o link de redefinição de senha.

1.1.3 - Login Padrão

  • Logar no sistema informando email e senha.

1.1.4 - Setup MFA

  • Utilizar um app de autenticação (ex: Google Authenticator) para configurar o segundo fator de autenticação.

1.1.5 - Login MFA

  • Logar no sistema apenas ao informar corretamente o TOTP gerado no app (Time-Based One-Time Password).

1.1.6 - Receber Notificações

  • Listar notificações relacionadas com sua instituição, curso ou atividades das turmas.
  • Marcar notificações já visualizadas como lidas.

1.2 - Acadêmico

1.2.1 - Insights

  • Acessar diversos dados consolidados sobre a instituição, atualizados em tempo real.

1.2.2 - Campus

  • Criar um novo campus.
  • Editar um campus já existente.
  • Listar todos os campus da instituição.

1.2.3 - Cadastro de Cursos

  • Criar um novo curso.
  • Listar todos os cursos da instituição.

1.2.4 - Cadastro de Disciplinas

  • Criar uma nova disciplina.
  • Listar todas as disciplinas da instituição.

1.2.5 - Cadastro de Grades Curriculares

  • Criar uma nova grade curricular, vinculando curso e disciplinas.
  • Listar todas as grades curriculares da instituição.

1.2.6 - Ofertar Curso

  • Ofertar um curso, vinculando campus, período acadêmico, turno, curso e grade curricular.
  • Listar todas as ofertas de curso da instituição.

1.2.7 - Cadastro de Professores

  • Criar um novo professor.
  • Listar todos os professores da instituição.

1.2.8 - Gerenciamento de Turmas

  • Abrir um nova turma, vinculando disciplina, professor, período acadêmico e horários.
  • Liberar uma turma para matrícula, dentro do período de matrícula vigente.
  • Iniciar uma turma após validar todas as matrículas.
  • Finalizar uma turma ao término do período acadêmico.
  • Listar todas as turmas da instituição.

1.2.9 - Acompanhamento de Turma

  • Analisar as notas dos alunos nas atividades, bem como suas frequências em cada aula.

1.2.10 - Cadastro de Alunos

  • Criar um novo aluno, vinculando com determinada oferta de curso.
  • Listar todos os alunos da instituição.

1.2.11 - Abertura de Períodos Acadêmicos

  • Abrir um novo período acadêmico.
  • Listar todos os períodos acadêmicos da instituição.

1.2.12 - Abertura de Períodos de Matrícula

  • Abrir um novo período de matrícula.
  • Editar as datas de início e fim de um período de matrícula.
  • Listar todos os períodos de matrícula da instituição.

1.2.13 - Envio de Notificações

  • Enviar notificações para alunos e professores.
  • Listar todas as notificações da instituição.

1.3 - Professor

1.3.1 - Insights

  • Acessar diversos dados consolidados sobre suas turmas, atualizados em tempo real.

1.3.2 - Agenda Acadêmica

  • Acompanhar qual o horário semanal das suas aulas.

1.3.3 - Turmas

  • Acessar facilmente todas as turmas do período atual.

1.3.4 - Atividades

  • Criar novas atividades para a turma.
  • Listar todas as atividades da turma.
  • Avaliar com pontuação cada entrega de atividade feita pelos alunos.

1.3.5 - Frequências

  • Realizar chamadas em cada aula.
  • Listar todas as aulas e suas frequências.

1.3.6 - Alunos

  • Acompanhar notas e frequências dos alunos da turma.

1.4 - Aluno

1.4.1 - Insights

  • Acessar diversos dados consolidados sobre seu curso, atualizados em tempo real.

1.4.2 - Agenda Acadêmica

  • Acompanhar qual o horário semanal das suas aulas.

1.4.3 - Disciplinas

  • Visualizar facilmente todas as disciplinas do seu curso, agrupadas por período acadêmico.

1.4.4 - Notas

  • Acompanhar sua nota média no curso, bem como sua nota em cada disciplina.

1.4.5 - Frequência

  • Ver sua frequência total no curso, bem como em cada turma.

1.4.6 - Turmas

  • Acessar facilmente todas as turmas do período atual.

1.4.7 - Atividades

  • Listar todas as atividades da turma, bem como seu desempenho em cada uma.
  • Entrar nos detalhes da atividade e realizar sua entrega via link em anexo.

1.4.8 - Frequências

  • Acompanhar quantidade de presenças, faltas, aulas realizadas e pendentes.
  • Visualizar gráfico com sua frequência em todas as aulas realizadas até o momento.

1.5 - Adm

1.5.1 - Insights

  • Ver dados consolidados sobre todo o sistema, atualizados em tempo real.

1.5.2 - Usuários

  • Acompanhar todos os usuários do sistema.
  • Filtrar quais estão online no momento atual.

1.5.3 - Instituições

  • Listar todas as instituições de ensino cadastradas no sistema.

1.5.4 - Feature Flags

  • Ativar/desativar features flags.

1.5.5 - Eventos

  • Dashboard com eventos pendentes, processando, erros e sucessos.
  • Últimos eventos ocorridos e distribuição por quantidade.
  • Listagem e filtros de todos os eventos gerados por todas as instituições.

1.5.6 - Detalhes de um Evento

  • Dados gerais e origem do evento.
  • Lista dos comandos gerados pelo evento em questão.

1.5.7 - Comandos

  • Dashboard com comandos pendentes, processando, erros e sucessos.
  • Listagem e filtros de todos os comandos gerados por todas as instituições.

1.5.8 - Detalhes de um Comando

  • Dados gerais e origem do comando.
  • Lista do subcomandos gerados pelo comando em questão.
  • Reprocessamento de comando com erro.
  • Vinculo do comando caso ele pertença à um lote.

1.5.9 - Lotes

  • Dashboard com lotes pendentes, processando, erros e sucessos.
  • Listagem e filtros de todos os lotes gerados por todas as instituições.

1.5.10 - Detalhes de um Lote

  • Dados gerais e origem do lote.
  • Próximo comando a ser executado caso o lote termine com sucesso.

2 - Tecnologias

A stack predominante é a da Microsoft, utilizo C# tanto no backend quanto no frontend:

  • API em ASP.NET
  • Front em Blazor Webassembly
  • Daemon em ASP.NET
  • Banco PostgreSQL
  • Build com Docker
  • Deploy no Railway
  • GitHub Actions
  • Seq para logs

3 - Testes

O projeto possui mais de 500 testes automatizados, divididos entre Unidade e Integração.

Os testes de unidade validam regras de negócio apenas utilizando as entidades em memória, sem dependências com o banco de dados.

Já os testes de integração são mais robustos, pois validam que os fluxos de negócio envolvendo Back + Daemon + Postgres estão funcionando corretamente.

4 - CI/CD

O Syki conta com um pipeline de CI/CD, que roda no GitHub Actions toda vez que um novo commit é feito na branch master.

Esse pipeline é responsável por buildar toda a solução, rodar os testes automatizados e executar eventuais migrações contra o banco de dados.

Quando o pipeline executa com sucesso, uma integração com a plataforma Railway é disparada para que o deploy de todos os serviços seja realizado. O Railway utiliza os Dockerfiles de cada componente para gerar as imagens e subir os contâiners a partir delas. Todas as configurações necessárias para que as aplicações rodem são armazenadas como variáveis de ambiente direto no Railway.

5 - Infra

Atualmente todos os serviços estão rodando no Railway:

Pretendo migrar toda a infra pra Azure logo logo. Vou utilizar o Terraform para provisionar os recursos na nuvem de maneira organizada e replicável para os ambientes de Staging e Produção.

6 - Usabilidade

O frontend do projeto conta com modos claro e escuro.

Todas as telas são responsivas, funcionando bem tanto no desktop quanto no mobile.

Pretendo criar um app usando Flutter (Android/IOS) para que o aluno possa acessar o Syki.

7 - Processamento Assíncrono

O Syki possui diversos fluxos de negócio naturalmente assíncronos, como o envio de notificações pros usuários via email.

Ele possui um sistema robusto de eventos, comandos e lotes para a realização dessas tarefas.

Ainda é possível acompanhar em tempo real todas as execuções do sistema, possibilitando a rápida detecção de problemas e o reprocessamento de comandos com erro.

No futuro ele vai contar também com reprocessamento automático de falhas.

8 - Auditoria

Muitas das ações dos usuários no sistema possuem auditoria, ou seja, são salvas no banco de dados para que seja possível saber quem, fez o quê, quando e onde dentro da aplicação.

9 - Observabilidade

O padrão OpenTelemetry é utilizado nas aplicações para a coleta de logs, métricas e traces.

No futuro todos esses dados serão enviados para o DataDog.

10 - Rate Limiting

O backend utiliza o middleware de rate limiting nativo do próprio ASP.NET para bloquear o uso abusivo da API.

11 - Documentação

Grande parte do código possui documentação via XML, que é utilizada tanto pela IDE quanto pelo Swagger para gerar o documento de especificação OpenAPI.

Utilizo o Scalar para ler esse documento e gerar a documentação completa da API.

12 - Real Time

A biblioteca SignalR foi utilizada para trazer funcionalidades em tempo real para o sistema.

Hoje é possível ser notificado em tempo real quando uma nova atividade é postada, por exemplo.

O Adm também consegue saber quais usuários estão ativos no momento, além ter acesso a quantas conexões com o servidor cada um está estabelecendo.

13 - Cache

Utilizo a biblioteca Hybrid Cache para cachear alguns dados básicos da instituição, como seus cursos e grades curriculares.

No futuro pode ser necessária a adoção de cache distribuído, usando o Redis por exemplo.

14 - Arquitetura

Todo o desenvolvimento é orientado por simplicidade.

Utilizo Vertical Slices e Result Pattern em praticamente todas as funcionalidades do sistema.

15 - Banco de Dados

Toda a estrutura do banco está mepeada no Entity Framework Core.

Acompanhe a seguir toda a evolução das tabelas:

E agora o estado atual do banco (omiti alguns relacionamentos para não poluir o diagrama):


Qualquer contribuição é bem-vinda!

Fique à vontade para usar o sistema, abrir issues, enviar pull requests e tirar dúvidas.

Carregando publicação patrocinada...
1

iradoo! já pensei em criar uma plataforma só pra anhanguera(faculdade EAD que faço) pudesse implementá-la. O dashboard deles parece ser lá de 2005, horriveL!!

Parabéns pelo projeto, muito bem documentado também!

EDIT: achei legal que você mesmo criou os issues para manter o projeto "vivo", que serve para vc mesmo continuar desenvolvendo o projeto. vou aderir!

3

O sistema da minha faculdade é bem paia também, foi ele que me motivou a desenvolver o Syki hahahaha.

Tenho que organizar melhor as issues ainda, categorizar, usar tags... mas ter todas lá no repositório já ajuda bastante.

Vlw pelo comentário!

1
1

Dá trabalho mas você aprende muito no processo, é bem diferente de fazer projetos menores ou seguir tutoriais.

Vlw pelo comentário!