-- Initial Schema for Repairs Multi-tenant App CREATE TABLE IF NOT EXISTS companies ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, uprn_required BOOLEAN DEFAULT FALSE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, company_id INT NOT NULL, name VARCHAR(255) NOT NULL, email VARCHAR(255) UNIQUE NOT NULL, role ENUM('admin', 'standard') DEFAULT 'standard', FOREIGN KEY (company_id) REFERENCES companies(id) ); CREATE TABLE IF NOT EXISTS clients ( id INT AUTO_INCREMENT PRIMARY KEY, company_id INT NOT NULL, name VARCHAR(255) NOT NULL, is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (company_id) REFERENCES companies(id) ); CREATE TABLE IF NOT EXISTS job_statuses ( id INT AUTO_INCREMENT PRIMARY KEY, company_id INT NOT NULL, name VARCHAR(255) NOT NULL, is_default BOOLEAN DEFAULT FALSE, FOREIGN KEY (company_id) REFERENCES companies(id) ); CREATE TABLE IF NOT EXISTS jobs ( id INT AUTO_INCREMENT PRIMARY KEY, company_id INT NOT NULL, job_ref VARCHAR(100) NOT NULL, uprn VARCHAR(100), address_1 VARCHAR(255), address_2 VARCHAR(255), address_3 VARCHAR(255), postcode VARCHAR(20), description TEXT, status_id INT, client_id INT, works_approved BOOLEAN DEFAULT FALSE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE(company_id, job_ref), FOREIGN KEY (company_id) REFERENCES companies(id), FOREIGN KEY (status_id) REFERENCES job_statuses(id), FOREIGN KEY (client_id) REFERENCES clients(id) ); CREATE TABLE IF NOT EXISTS activity_logs ( id INT AUTO_INCREMENT PRIMARY KEY, job_id INT NOT NULL, company_id INT NOT NULL, user_id INT NOT NULL, user_name VARCHAR(255), event_type VARCHAR(100), field_name VARCHAR(100), old_value TEXT, new_value TEXT, metadata JSON, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (job_id) REFERENCES jobs(id), FOREIGN KEY (company_id) REFERENCES companies(id) ); -- Seed Initial Demo Company INSERT INTO companies (name) VALUES ('Repairs Pro Ltd'); SET @company_id = LAST_INSERT_ID(); INSERT INTO users (company_id, name, email, role) VALUES (@company_id, 'Admin User', 'admin@repairspro.com', 'admin'); INSERT INTO job_statuses (company_id, name, is_default) VALUES (@company_id, 'To Be Surveyed', 1), (@company_id, 'Booking Required', 0), (@company_id, 'Completed', 0); INSERT INTO clients (company_id, name) VALUES (@company_id, 'Main Housing Assoc');