129 lines
8.6 KiB
SQL
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;
|