Adattato da alltax.it — il sistema più maturo testato con utenti reali.
Backend:
- FeedbackController: 6 endpoint (submit, mine, list, show, update, resolve)
- FeedbackService: createReport + classifyWithAI + broadcastResolution
- AIService::classifyFeedback() — 10s timeout, 500 token, JSON puro
- EmailService::sendFeedbackResolved() — broadcast email org
- DB migration 014: tabella feedback_reports
Frontend:
- feedback.js: FAB rosso #EF4444, modal 2 fasi (form → AI → password gate)
- Tab "Le mie segnalazioni" con badge status
- Auto-init su tutte le pagine autenticate (common.js::checkAuth)
- api.js: 6 metodi client; style.css: stili completi
Worker:
- scripts/feedback-worker.php: cron ogni 30 min
→ docker exec nis2-agile-devenv + Claude Code CLI
→ risoluzione autonoma con POST /api/feedback/{id}/resolve
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
33 lines
1.6 KiB
SQL
33 lines
1.6 KiB
SQL
-- Migration 014: Sistema Segnalazioni & Risoluzione AI
|
|
-- Adattato da alltax.it/docs/sistema-segnalazioni-standard.html
|
|
-- Data: 2026-03-10
|
|
|
|
CREATE TABLE IF NOT EXISTS feedback_reports (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
organization_id INT NOT NULL,
|
|
user_id INT NOT NULL,
|
|
user_email VARCHAR(255) NOT NULL,
|
|
user_role VARCHAR(50) NULL,
|
|
page_url VARCHAR(500) NULL,
|
|
tipo ENUM('bug','ux','funzionalita','domanda','altro') NOT NULL DEFAULT 'bug',
|
|
priorita ENUM('alta','media','bassa') NOT NULL DEFAULT 'media',
|
|
descrizione TEXT NOT NULL,
|
|
attachment LONGTEXT NULL COMMENT 'Base64 screenshot (max ~1.5MB)',
|
|
status ENUM('aperto','in_lavorazione','risolto','chiuso') NOT NULL DEFAULT 'aperto',
|
|
nota_admin TEXT NULL,
|
|
ai_categoria VARCHAR(100) NULL,
|
|
ai_priorita ENUM('alta','media','bassa') NULL,
|
|
ai_suggerimento TEXT NULL,
|
|
ai_risposta TEXT NULL COMMENT 'Risposta leggibile per l utente',
|
|
ai_processed TINYINT(1) NOT NULL DEFAULT 0,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
INDEX idx_org_status (organization_id, status),
|
|
INDEX idx_user (user_id),
|
|
INDEX idx_ai_processed (ai_processed, status),
|
|
|
|
CONSTRAINT fk_feedback_org FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE,
|
|
CONSTRAINT fk_feedback_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|