`;
+ const deleteBtn = div.querySelector('.delete-btn');
+ deleteBtn.addEventListener('click', async (e) => {
+ e.stopPropagation();
+ if (confirm(`Deseja realmente excluir a análise de desenho do aluno "${item.alunoName}"?`)) {
+ try {
+ const delResp = await fetch(`/api/garatujas/${item.id}`, { method: 'DELETE' });
+ if (!delResp.ok) throw new Error('Falha ao deletar');
+ alert('Análise deletada com sucesso.');
+ loadGaratujasHistory();
+ if (activeGaratujaReport && activeGaratujaReport.id === item.id) {
+ activeGaratujaReport = null;
+ garatujasAlunoInput.value = '';
+ garatujaImgPreview.src = '';
+ garatujaPreviewContainer.style.display = 'none';
+ garatujaReportArea.innerHTML = '';
+ garatujaResultArea.style.display = 'none';
+ }
+ } catch (err) {
+ alert('Erro ao excluir análise: ' + err.message);
+ }
+ }
+ });
+
div.addEventListener('click', async () => {
try {
const detailResp = await fetch(`/api/garatujas/${item.id}`);
@@ -5242,13 +5268,38 @@ const initApp = () => {
const previewText = lines.length > 60 ? lines.substring(0, 60) + '...' : lines;
div.innerHTML = `
-
-
🏃♂️ ${escapeHtml(item.faixaEtaria.split(' ')[0])} (${item.faixaEtaria.includes('bem pequenas') ? 'Bem Pequenas' : (item.faixaEtaria.includes('pequenas') ? 'Pequenas' : 'Bebês')})
+
+ 🏃♂️ ${escapeHtml(item.faixaEtaria.split(' ')[0])} (${item.faixaEtaria.includes('bem pequenas') ? 'Bem Pequenas' : (item.faixaEtaria.includes('pequenas') ? 'Pequenas' : 'Bebês')})
+
Recursos: ${escapeHtml(previewText)}
${new Date(item.createdAt).toLocaleDateString('pt-BR')}
`;
+ const deleteBtn = div.querySelector('.delete-btn');
+ deleteBtn.addEventListener('click', async (e) => {
+ e.stopPropagation();
+ if (confirm(`Deseja realmente excluir esta atividade psicomotora do histórico?`)) {
+ try {
+ const delResp = await fetch(`/api/brincar-ativo/${item.id}`, { method: 'DELETE' });
+ if (!delResp.ok) throw new Error('Falha ao deletar');
+ alert('Atividade deletada com sucesso.');
+ loadBrincarAtivoHistory();
+ if (activeBrincarAtivoReport && activeBrincarAtivoReport.id === item.id) {
+ activeBrincarAtivoReport = null;
+ brincarAtivoFaixaSelect.value = '';
+ brincarAtivoRecursosInput.value = '';
+ brincarAtivoReportArea.innerHTML = '';
+ brincarAtivoResultArea.style.display = 'none';
+ }
+ } catch (err) {
+ alert('Erro ao excluir atividade: ' + err.message);
+ }
+ }
+ });
+
div.addEventListener('click', async () => {
try {
const detailResp = await fetch(`/api/brincar-ativo/${item.id}`);
diff --git a/server.js b/server.js
index 573cdbb..516c44d 100644
--- a/server.js
+++ b/server.js
@@ -970,6 +970,47 @@ app.get('/api/garatujas/:id', requireAuth, async (req, res) => {
}
});
+app.delete('/api/garatujas/:id', requireAuth, async (req, res) => {
+ const { id } = req.params;
+ const usuarioId = req.user?.id || '00000000-0000-0000-0000-000000000000';
+ try {
+ const imageRes = await dbPool.query(
+ `SELECT image_url FROM escola.garatujas WHERE id = $1 AND usuario_id = $2`,
+ [id, usuarioId]
+ );
+
+ const dbRes = await dbPool.query(
+ `DELETE FROM escola.garatujas WHERE id = $1 AND usuario_id = $2`,
+ [id, usuarioId]
+ );
+ if (dbRes.rowCount === 0) {
+ return res.status(404).json({ error: 'Análise não encontrada ou não pertence ao usuário.' });
+ }
+
+ if (imageRes.rows.length > 0 && imageRes.rows[0].image_url) {
+ const imgUrl = imageRes.rows[0].image_url;
+ if (imgUrl.startsWith('/generated-media/')) {
+ const fs = require('fs');
+ const filename = imgUrl.replace('/generated-media/', '');
+ const filepath = path.join(__dirname, 'public', 'generated-media', filename);
+ if (fs.existsSync(filepath)) {
+ try {
+ fs.unlinkSync(filepath);
+ } catch (unlinkErr) {
+ console.error('Erro ao deletar arquivo de imagem fisicamente:', unlinkErr);
+ }
+ }
+ }
+ }
+
+ res.json({ success: true, message: 'Análise de desenho deletada com sucesso.' });
+ } catch (err) {
+ console.error('Erro ao deletar garatuja:', err);
+ res.status(500).json({ error: 'Erro ao deletar análise.' });
+ }
+});
+
+
// ============================================================
// ROTAS DO BRINCARATIVO (CIRCUITOS PSICOMOTORES E BRINCADEIRAS)
// ============================================================
@@ -1077,6 +1118,25 @@ app.get('/api/brincar-ativo/:id', requireAuth, async (req, res) => {
}
});
+app.delete('/api/brincar-ativo/:id', requireAuth, async (req, res) => {
+ const { id } = req.params;
+ const usuarioId = req.user?.id || '00000000-0000-0000-0000-000000000000';
+ try {
+ const dbRes = await dbPool.query(
+ `DELETE FROM escola.brincar_ativo WHERE id = $1 AND usuario_id = $2`,
+ [id, usuarioId]
+ );
+ if (dbRes.rowCount === 0) {
+ return res.status(404).json({ error: 'Atividade não encontrada ou não pertence ao usuário.' });
+ }
+ res.json({ success: true, message: 'Atividade deletada com sucesso.' });
+ } catch (err) {
+ console.error('Erro ao deletar brincar-ativo:', err);
+ res.status(500).json({ error: 'Erro ao deletar atividade.' });
+ }
+});
+
+
// Rota GET para obter configurações do agente
app.get('/api/agent-config', requireAuth, (req, res) => {
const config = readAgentConfig();