38921-vm/db/migrations_002.sql
2026-03-01 22:53:30 +00:00

80 lines
3.1 KiB
SQL

-- Plans table
CREATE TABLE IF NOT EXISTS plans (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(10, 2) DEFAULT 0.00,
max_customers INT DEFAULT 10,
can_custom_domain BOOLEAN DEFAULT FALSE,
is_trial BOOLEAN DEFAULT FALSE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Seed default plans
INSERT INTO plans (name, price, max_customers, can_custom_domain, is_trial) VALUES
('Free Trial', 0.00, 5, FALSE, TRUE),
('Pro', 49.00, 50, TRUE, FALSE),
('Enterprise', 199.00, 1000, TRUE, FALSE);
-- MSPs table (Tenants)
CREATE TABLE IF NOT EXISTS msps (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
plan_id INT NOT NULL,
subdomain VARCHAR(255) UNIQUE,
custom_domain VARCHAR(255) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (plan_id) REFERENCES plans(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Users table
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
msp_id INT NULL, -- NULL for superadmins
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
role ENUM('superadmin', 'msp_admin', 'msp_staff') NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (msp_id) REFERENCES msps(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Onboarding Templates
CREATE TABLE IF NOT EXISTS onboarding_templates (
id INT AUTO_INCREMENT PRIMARY KEY,
msp_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (msp_id) REFERENCES msps(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Onboarding Template Steps (Pages)
CREATE TABLE IF NOT EXISTS onboarding_template_steps (
id INT AUTO_INCREMENT PRIMARY KEY,
template_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
description TEXT,
order_index INT DEFAULT 0,
FOREIGN KEY (template_id) REFERENCES onboarding_templates(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Onboarding Template Fields/Content
CREATE TABLE IF NOT EXISTS onboarding_template_fields (
id INT AUTO_INCREMENT PRIMARY KEY,
step_id INT NOT NULL,
type ENUM('text', 'form_input', 'form_textarea', 'form_select', 'download', 'upload') NOT NULL,
label VARCHAR(255) NOT NULL,
content TEXT, -- Used for 'text' or 'download' URL or 'options' for select
is_required BOOLEAN DEFAULT FALSE,
order_index INT DEFAULT 0,
FOREIGN KEY (step_id) REFERENCES onboarding_template_steps(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Update customers table to link to MSP
ALTER TABLE customers ADD COLUMN msp_id INT NOT NULL AFTER id;
ALTER TABLE customers ADD CONSTRAINT fk_customer_msp FOREIGN KEY (msp_id) REFERENCES msps(id) ON DELETE CASCADE;
-- Create a default superadmin (password: admin123)
-- In a real app, this would be handled via a setup script or CLI.
INSERT INTO users (name, email, password_hash, role) VALUES
('Super Admin', 'admin@msp-portal.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'superadmin');