EduRepo
Conhecimento precisa de versões, permissões e histórico.
Fluxo resumido a partir da implementação revisada. Os detalhes e limites estão nas seções abaixo; esta visualização não é screenshot de produção ou prova de desempenho medido.
Problema e experiência de publicação
O EduRepo organiza trabalhos acadêmicos como repositórios versionados. Título, resumo, instituição, autores, orientadores e anexos fazem parte de uma estrutura que precisa evoluir sem perder o histórico.
A aplicação explora o caminho do rascunho à distribuição: quem pode colaborar, qual versão está sendo consultada e quais arquivos pertencem a ela. É um projeto pessoal de engenharia de publicação, sem alegação de adoção institucional.
Monólito modular e modelo de dados
Next.js App Router reúne interface e API, com TypeScript e funções de serviço para acesso ao domínio. Prisma representa PostgreSQL; Supabase é uma opção de hospedagem do banco, não um requisito para transformar toda a aplicação em serviços independentes.
O schema separa usuários, perfis, repositórios, colaboradores, versões, arquivos, sessões e eventos de auditoria. A combinação repositório/tag é única para identificar versões; intenções de upload e registros de idempotência modelam etapas operacionais.
Autenticação e sessões
O fluxo inclui cadastro, login, logout e recuperação de senha. Senhas passam por bcrypt; sessões e tokens de recuperação têm entidades próprias. Mutação autenticada e proteção CSRF são responsabilidades distintas.
Cookies, validação de sessão e checagem de ator sustentam as rotas. O projeto permite estudar revogação e recuperação sem confundir a existência de uma tela de login com uma política completa de segurança já auditada.
Colaboração e controle por papéis
RBAC distingue proprietário, maintainer, contributor e viewer. As verificações combinam visibilidade do repositório, identidade do ator e vínculo de colaboração para decidir leitura ou edição.
Esse modelo permite distribuir responsabilidade sobre um trabalho sem conceder acesso administrativo global. Os contratos aparecem nas rotas e serviços; sua consistência depende de todas as operações aplicarem a política adequada.
Versões e arquivos relacionados
Uma versão agrupa anexos e mantém uma tag dentro do repositório. Arquivos principais e suplementares têm metadados próprios, separados da localização física no storage. Isso permite consultar o artefato sem tratar o caminho de armazenamento como identidade de negócio.
Páginas de repositório e versão expõem essa organização. Histórico e relação entre entidades ajudam a responder qual material foi publicado e por quem, mesmo quando a aplicação continua evoluindo.
Upload em duas etapas e URLs assinadas
O fluxo presign/complete separa autorização e transferência. O servidor autoriza a intenção, enquanto o cliente transfere o arquivo ao armazenamento compatível com S3. A conclusão verifica identidade, validade da intenção e metadados antes de registrar o arquivo.
O AWS SDK integra Backblaze B2 por compatibilidade S3. O código tenta verificar tamanho e MIME com HEAD; em certos erros registra auditoria e prossegue. Esse comportamento precisa ser considerado em hardening, pois verificação tentada não equivale a rejeição garantida de todo upload inválido.
Idempotência, cache e limites
Operações críticas aceitam uma Idempotency-Key e armazenam respostas com validade. A coordenação de chamadas repetidas reduz duplicações dentro dos caminhos implementados; registros persistentes complementam o cache local.
Redis sustenta cache e rate limiting quando configurado, com fallback em memória. O fallback ajuda no desenvolvimento, mas não oferece coordenação compartilhada entre várias instâncias. TTLs definem quando respostas e contadores deixam de ser reutilizados.
Busca, auditoria e moderação
A busca combina título, resumo e instituição com filtros de ano, visibilidade e paginação. A implementação consultada usa consultas textuais via Prisma; ranking semântico e full-text avançado não são apresentados como funcionalidades já concluídas.
Eventos registram ator, ação, alvo e metadados. Superfícies de administração tratam auditoria e moderação. A integração ClamAV ainda contém um placeholder: a página não a apresenta como antivírus efetivamente executado.
Observabilidade e testes
Wrappers de API coletam métricas; logs estruturados, exportação Prometheus e instrumentação OpenTelemetry opcional dão contexto à operação. Rotas de saúde e diagnóstico ajudam a separar indisponibilidade de dependências e erros de aplicação.
O código possui testes Vitest de rotas, validações, cache, idempotência e serviços, além de cenários Playwright. O workflow define typecheck, testes e build; lint e audit têm caminhos tolerantes a falhas. As suítes foram inspecionadas, sem medir cobertura ou executar um deployment do EduRepo.
Decisões demonstradas e próximos passos
O projeto combina experiência de publicação com contratos de acesso, transferência de arquivos e rastreabilidade. Mostra integração full-stack, modelagem relacional, validação e mecanismos de coordenação de requisições.
As prioridades de evolução são fechar os caminhos permissivos de upload, concluir varredura real, testar múltiplas instâncias e avançar busca e preservação digital. Não são atribuídos números de usuários, disponibilidade ou eficiência não medidos.