nis2-agile/docs/sql/seed_agile_tech_demo.sql
DevEnv nis2-agile 9b53ca3ba1 [FEAT] MktgLead getJsonBody + script import-feedback-to-nexus + seed demo agile-tech
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 15:42:05 +02:00

129 lines
8.6 KiB
SQL

-- ═══════════════════════════════════════════════════════════════════════════
-- SEED DEMO: Agile Technology SRL (consulting firm) + 3 aziende clienti
-- Database : nis2_agile_db
-- Data : 2026-05-29
-- Scope : ambiente DEV/test. Idempotente (rieseguibile via ON DUPLICATE).
-- Rollback : vedi sezione finale (commentata) per cancellazione totale.
--
-- Tutti i dati sono INVENTATI ai fini test della pipeline
-- consulting_firm → consultant users → client organizations → KB visibility.
-- ═══════════════════════════════════════════════════════════════════════════
USE nis2_agile_db;
SET @now := NOW();
-- ── 1) CONSULTING FIRM ────────────────────────────────────────────────────
INSERT INTO consulting_firms
(name, vat_number, fiscal_code, forma_giuridica, address, city, province, cap,
phone, pec, website, plan, max_organizations, max_users, status, created_at)
VALUES
('Agile Technology SRL', 'IT12345670962', '12345670962', 'SRL',
'Via dei Consulenti 42', 'Milano', 'MI', '20121',
'+39 02 5500 0001', 'agiletech@pec.it', 'https://agile.software',
'enterprise', 100, 20, 'active', @now)
ON DUPLICATE KEY UPDATE name = VALUES(name);
-- Nota: la tabella non ha UNIQUE su vat_number, quindi gestiamo "upsert manuale"
SET @firm_id := (SELECT id FROM consulting_firms
WHERE vat_number = 'IT12345670962' ORDER BY id LIMIT 1);
-- ── 2) CONSULENTI (users con role=consultant, legati al firm) ─────────────
-- Password test: "Consultant2026!" (hash bcrypt cost=10, riusabile per tutti)
SET @pwd := '$2y$10$Z6QwT5qg5sP9ZdYy3mFvgeKv6L9DkH3o0c2.M0Y0PnCqVTwQHvz/i';
INSERT INTO users (email, password_hash, full_name, phone, role, consulting_firm_id, is_active, created_at)
VALUES
('marco.ferri@agiletech.demo', @pwd, 'Marco Ferri', '+39 333 1112201', 'consultant', @firm_id, 1, @now),
('laura.greco@agiletech.demo', @pwd, 'Laura Greco', '+39 333 1112202', 'consultant', @firm_id, 1, @now),
('paolo.rossi@agiletech.demo', @pwd, 'Paolo Rossi', '+39 333 1112203', 'consultant', @firm_id, 1, @now)
ON DUPLICATE KEY UPDATE consulting_firm_id = VALUES(consulting_firm_id),
role = VALUES(role);
SET @u_marco := (SELECT id FROM users WHERE email='marco.ferri@agiletech.demo');
SET @u_laura := (SELECT id FROM users WHERE email='laura.greco@agiletech.demo');
SET @u_paolo := (SELECT id FROM users WHERE email='paolo.rossi@agiletech.demo');
-- ── 3) ORGANIZATIONS CLIENTI (3 aziende, settori diversi) ─────────────────
INSERT INTO organizations
(name, vat_number, fiscal_code, sector, entity_type, voluntary_compliance,
employee_count, annual_turnover_eur, country, city, address, website,
contact_email, contact_phone, subscription_plan, consulting_firm_id, is_active, created_at)
VALUES
('Aurora Sanità S.p.A.', 'IT04501230965', '04501230965', 'health',
'essential', 0, 480, 92000000.00, 'IT', 'Bergamo', 'Via degli Ospedali 8',
'https://aurorasanita.demo', 'compliance@aurorasanita.demo', '+39 035 7001001',
'professional', @firm_id, 1, @now),
('NordWater Utilities S.r.l.', 'IT05512340963', '05512340963', 'water',
'essential', 0, 220, 41500000.00, 'IT', 'Brescia', 'Strada del Depuratore 14',
'https://nordwater.demo', 'security@nordwater.demo', '+39 030 4002002',
'professional', @firm_id, 1, @now),
('Logistica Veloce S.r.l.', 'IT06723450961', '06723450961', 'transport',
'important', 0, 95, 18700000.00, 'IT', 'Verona', 'Viale dei Trasporti 27',
'https://logisticaveloce.demo', 'it@logisticaveloce.demo', '+39 045 5003003',
'free', @firm_id, 1, @now)
ON DUPLICATE KEY UPDATE consulting_firm_id = VALUES(consulting_firm_id);
SET @org_aurora := (SELECT id FROM organizations WHERE vat_number='IT04501230965');
SET @org_nordwater := (SELECT id FROM organizations WHERE vat_number='IT05512340963');
SET @org_logistica := (SELECT id FROM organizations WHERE vat_number='IT06723450961');
-- ── 4) UTENTI INTERNI DELLE ORG CLIENTI (org_admin per ciascuna) ─────────
INSERT INTO users (email, password_hash, full_name, phone, role, is_active, created_at) VALUES
('admin@aurorasanita.demo', @pwd, 'Giulia Bianchi (Aurora)', '+39 035 7001010', 'org_admin', 1, @now),
('admin@nordwater.demo', @pwd, 'Stefano Conti (NordWater)', '+39 030 4002020', 'org_admin', 1, @now),
('admin@logisticaveloce.demo', @pwd, 'Elena Marini (Logistica)', '+39 045 5003030', 'org_admin', 1, @now)
ON DUPLICATE KEY UPDATE role = VALUES(role);
SET @u_admin_aur := (SELECT id FROM users WHERE email='admin@aurorasanita.demo');
SET @u_admin_nw := (SELECT id FROM users WHERE email='admin@nordwater.demo');
SET @u_admin_log := (SELECT id FROM users WHERE email='admin@logisticaveloce.demo');
-- ── 5) user_organizations: org_admin "interno" delle 3 org + consulenti ──
INSERT INTO user_organizations (user_id, organization_id, role, is_primary, joined_at) VALUES
(@u_admin_aur, @org_aurora, 'org_admin', 1, @now),
(@u_admin_nw, @org_nordwater, 'org_admin', 1, @now),
(@u_admin_log, @org_logistica, 'org_admin', 1, @now),
-- Marco è consulente delle 3 org clienti
(@u_marco, @org_aurora, 'consultant', 0, @now),
(@u_marco, @org_nordwater, 'consultant', 0, @now),
(@u_marco, @org_logistica, 'consultant', 0, @now),
-- Laura solo Aurora + NordWater
(@u_laura, @org_aurora, 'consultant', 0, @now),
(@u_laura, @org_nordwater, 'consultant', 0, @now),
-- Paolo solo Logistica
(@u_paolo, @org_logistica, 'consultant', 0, @now)
ON DUPLICATE KEY UPDATE role = VALUES(role);
-- ── 6) firm_org_assignments: mapping firm → org → consulente ─────────────
-- assigned_to = 0 → tutti i membri del firm vedono la org (default)
-- assigned_to = X → solo quel consulente è "lead"
INSERT INTO firm_org_assignments (consulting_firm_id, organization_id, assigned_to, assigned_by, created_at) VALUES
(@firm_id, @org_aurora, 0, @u_marco, @now),
(@firm_id, @org_nordwater, 0, @u_marco, @now),
(@firm_id, @org_logistica, 0, @u_paolo, @now),
-- lead specifici (denota responsabilità primaria)
(@firm_id, @org_aurora, @u_marco, @u_marco, @now),
(@firm_id, @org_nordwater, @u_laura, @u_marco, @now),
(@firm_id, @org_logistica, @u_paolo, @u_paolo, @now)
ON DUPLICATE KEY UPDATE created_at = created_at;
-- ── 7) Riepilogo finale ──────────────────────────────────────────────────
SELECT 'CONSULTING FIRM' AS section, id, name, plan, status FROM consulting_firms WHERE id=@firm_id
UNION ALL SELECT 'CONSULTANT', id, full_name, role, email FROM users WHERE consulting_firm_id=@firm_id
UNION ALL SELECT 'CLIENT ORG', id, name, sector, entity_type FROM organizations WHERE consulting_firm_id=@firm_id
UNION ALL SELECT 'FIRM-ORG MAP', id, CONCAT('firm=', consulting_firm_id), CONCAT('org=', organization_id), CONCAT('assigned_to=', assigned_to) FROM firm_org_assignments WHERE consulting_firm_id=@firm_id;
-- ═══════════════════════════════════════════════════════════════════════════
-- ROLLBACK (decommentare per cancellare TUTTI i dati demo Agile Technology)
-- ═══════════════════════════════════════════════════════════════════════════
-- SET @firm_id := (SELECT id FROM consulting_firms WHERE vat_number='IT12345670962');
-- DELETE FROM firm_org_assignments WHERE consulting_firm_id=@firm_id;
-- DELETE FROM user_organizations WHERE user_id IN (SELECT id FROM users WHERE consulting_firm_id=@firm_id);
-- DELETE FROM user_organizations WHERE organization_id IN (SELECT id FROM organizations WHERE consulting_firm_id=@firm_id);
-- DELETE FROM organizations WHERE consulting_firm_id=@firm_id;
-- DELETE FROM users WHERE consulting_firm_id=@firm_id;
-- DELETE FROM users WHERE email LIKE 'admin@%.demo' AND email IN
-- ('admin@aurorasanita.demo','admin@nordwater.demo','admin@logisticaveloce.demo');
-- DELETE FROM consulting_firms WHERE id=@firm_id;