Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Fluxo de download das 
ferramentas 
Objetivo
Permitir download dos conteúdos das ferramentas (exceto exercício) em PDF
Fluxo principal
1. Usuário clica "Baixar"
2. Frontend identifica ferramenta:
  Summary  Chama action diretamente (materialApi)
  Outras ferramentas  GET  ?download=true (tools-api)
3. Backend detecta download=true:
  HomeworkHelp → método específico → todas as questões
  Outras ferramentas → método normal → todos os dados disponíveis
4. Frontend: formatToPDF
5. Frontend: downloadPDF
6. Arquivo salvo
Implementação
Backend
Nova rota dedicada (reutiliza o método existente getContentHandler 
router.get('/tools/:contentId/download', ToolsController.getContentHandler);
Implementação da versão Simplificada (ferramentas sem 
paginação):
Alterações no controller getContentHandler :
 Detecta rota de download:
Verifica se req.path().includes('/download')
Fluxo de download das ferramentas 1
 Mantém fluxo normal:
Chama o método getContentHandler do handler normalmente
 Adiciona contexto de download:
Se for rota /download → adiciona no resultado:
downloadContext: true
success: true
toolName
Implementação da versão com HomeworkHelp:
Nova rota dedicada (reutiliza o método existente getContentHandler )
router.get('/tools/:contentId/download', ToolsController.getContentHandler);
Novo método  handleGetAllContent()  (específico download) para buscar todas as 
questões sem paginação no  HomeworkHelpHandler
Novo método findAllQuestionsByContentId() no repositório SEM LIMIT  busca tudo)
 Lógica condicional no controller para lidar com rota /download
1. Detecta rota de download
 const isDownload = req.path().includes('/download');
2. Escolhe fluxo
 if (isDownload && toolName === 'homeworkhelp') {
 // DOWNLOAD método específico → busca tudo
 result = await (handler as HomeworkHelpHandler).handleGetAllConten
t({ contentId, userId });
 } else {
 // NAVEGAÇÃO método já usado
 result = await handler.getContentHandler({ contentId, userId, hasPermi
Fluxo de download das ferramentas 2
ssion, page, limit });
 }
3. Adiciona context
if (downloadMode) {
 result.downloadContext = true; // visualizador sabe que é download
 result.success = true;
 result.toolName = toolName;
}
Frontend
A lógica de download é centralizada no ContentToolsService , que identifica o tipo de 
handler e executa o fluxo adequado.
Fluxo geral
 Mapeia o handler da ferramenta ( action ou service )
getDownloadHandler(toolName) {
 const handlers = {
 summary: 'summary/downloadSummary', // action
 mindmap: new MindmapService(), // service
 flashcards: new FlashcardsService(),
 homeworkhelp: new HomeworkHelpService() 
 };
 return handlers[toolName]
}
 Executa o método principal downloadToolContent() , que orquestra toda a lógica:
Verifica o tipo do handler;
Se for action, dispara a action no store (ex. Summary);
Fluxo de download das ferramentas 3
Se for service, faz o GET do conteúdo com /download, formata 
via formatToPDF
 Chama o método downloadPDF que gera e baixa o arquivo.
Exemplo de fluxo:
 Summary (action) - material-api
1. Usuário clica "Download"
2. handleDownload() → new ContentToolsService('summary')
3. downloadToolContent() → { type: 'action', action: 'summary/downloadSum
mary' }
4. Frontend dispara: store.dispatch('summary/downloadSummary')
5. Action faz: createSummary() → formatToPDF  downloadPDF
Mapeia formatter: 'summary/downloadSummary'
Chama action: store.dispatch('summary/downloadSummary')
Fluxo: createSummary() → formatToPDF → downloadPDF
Formatação:
Remove tags HTML e organiza o texto
Cria PDF com pdf-lib?
→ Mindmap (service) - tools-api
1. Usuário clica "Baixar PDF"
2. handleDownload() → new ContentToolsService('mindmap')
3. downloadToolContent() → getToolContentForDownload() → formatToPDF 
→ downloadPDF
4. PDF baixado automaticamente
Mapeia formatter: formatter = new MindmapService()
Fluxo de download das ferramentas 4
Fluxo: getToolContent() → formatToPDF → downloadPDF
Formatação:
Localiza o SVG no HTML do D3.js
Converte o SVG em PNG 
Embeda o PNG no PDF (sug, pdf-lib)
Fluxo de download das ferramentas 5