ProDocs
Biblioteca de documentos acadêmicos em .NET + Angular, com busca full-text no conteúdo dos PDFs — meu TCC revisitado e modernizado.
Contexto
Nasceu como Trabalho de Conclusão de Curso da graduação em Engenharia de Computação (2022): uma biblioteca digital para catalogar, buscar e baixar TCCs, artigos, monografias, dissertações e teses. Em 2026 retomei o projeto como estudo de caso de evolução de software — reestruturei a arquitetura, reforcei a segurança e redesenhei a interface.
O desafio
Permitir busca no conteúdo integral dos PDFs (não só título e resumo) sem infraestrutura de busca dedicada, com permissões por perfil de usuário e tudo rodando em um único serviço no plano gratuito do Render.
Papel e responsabilidades
- Extração de texto de PDFs com PdfPig e índice de busca full-text com SQLite FTS5 (tabela virtual + triggers)
- Autenticação JWT (HS512, chave fora do versionamento) com ASP.NET Core Identity e três perfis: comum, avançado e administrador
- Arquitetura em N-camadas com inversão de dependência: Application define contratos, persistência implementa
- Frontend Angular 20 com guards de rota, interceptor de JWT, paginação e modal via ngx-bootstrap
- Cadastro sempre cria usuário comum no backend, ignorando o tipo enviado pelo cliente (defesa contra escalação de privilégio)
- Docker multi-stage + Blueprint do Render: a API serve a própria SPA em produção, um serviço só
Stack e arquitetura
.NET 10 (Web API) + EF Core 10 + SQLite (FTS5) no backend; Angular 20 + ngx-bootstrap + Bootstrap 5 (Bootswatch Cosmo) no frontend; PdfPig para PDFs; xUnit e Karma nos testes; Docker e GitHub Actions no CI.
Destaques
- Busca full-text dentro do conteúdo dos PDFs, não apenas nos metadados
- Backup completo (banco + arquivos) via ZIP gerado no servidor
- Texto integral dos PDFs nunca exposto pela API — usado apenas no índice de busca
- Do TCC acadêmico a produto moderno: arquitetura, segurança e UI evoluídas
Aprendizados
Revisitar meu próprio TCC anos depois foi um exercício raro de evolução de software: enxerguei exatamente o que a pressão de prazo deixou passar e corrigi com o que aprendi desde então — arquitetura em camadas, segurança real de autenticação e busca full-text sem servidores dedicados.