2026-06-02 15:25:08 -05:00
--
-- MokoWaaS Helpdesk Tables
--
CREATE TABLE IF NOT EXISTS `# __mokowaas_ticket_categories ` (
` id ` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
` title ` VARCHAR ( 255 ) NOT NULL ,
` alias ` VARCHAR ( 255 ) NOT NULL DEFAULT '' ,
` description ` TEXT ,
` auto_assign_user ` INT DEFAULT NULL ,
` sla_response_minutes ` INT UNSIGNED NOT NULL DEFAULT 480 ,
` sla_resolution_minutes ` INT UNSIGNED NOT NULL DEFAULT 2880 ,
` ordering ` INT NOT NULL DEFAULT 0 ,
` published ` TINYINT NOT NULL DEFAULT 1 ,
PRIMARY KEY ( ` id ` ),
KEY ` idx_alias ` ( ` alias ` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
CREATE TABLE IF NOT EXISTS `# __mokowaas_tickets ` (
` id ` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
` subject ` VARCHAR ( 512 ) NOT NULL ,
` body ` TEXT NOT NULL ,
` status ` ENUM ( 'open' , 'in_progress' , 'waiting' , 'resolved' , 'closed' ) NOT NULL DEFAULT 'open' ,
` priority ` ENUM ( 'low' , 'normal' , 'high' , 'urgent' ) NOT NULL DEFAULT 'normal' ,
` category_id ` INT UNSIGNED DEFAULT NULL ,
` created_by ` INT NOT NULL DEFAULT 0 ,
` assigned_to ` INT DEFAULT NULL ,
` created ` DATETIME NOT NULL ,
` modified ` DATETIME DEFAULT NULL ,
` resolved ` DATETIME DEFAULT NULL ,
` closed ` DATETIME DEFAULT NULL ,
` sla_response_due ` DATETIME DEFAULT NULL ,
` sla_resolution_due ` DATETIME DEFAULT NULL ,
` sla_responded ` TINYINT NOT NULL DEFAULT 0 ,
PRIMARY KEY ( ` id ` ),
KEY ` idx_status ` ( ` status ` ),
KEY ` idx_priority ` ( ` priority ` ),
KEY ` idx_assigned ` ( ` assigned_to ` ),
KEY ` idx_category ` ( ` category_id ` ),
KEY ` idx_created ` ( ` created ` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
CREATE TABLE IF NOT EXISTS `# __mokowaas_ticket_replies ` (
` id ` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
` ticket_id ` INT UNSIGNED NOT NULL ,
` user_id ` INT NOT NULL DEFAULT 0 ,
` body ` TEXT NOT NULL ,
` is_internal ` TINYINT NOT NULL DEFAULT 0 ,
` created ` DATETIME NOT NULL ,
PRIMARY KEY ( ` id ` ),
KEY ` idx_ticket ` ( ` ticket_id ` ),
KEY ` idx_created ` ( ` created ` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
CREATE TABLE IF NOT EXISTS `# __mokowaas_ticket_canned ` (
` id ` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
` title ` VARCHAR ( 255 ) NOT NULL ,
` body ` TEXT NOT NULL ,
` category_id ` INT UNSIGNED DEFAULT NULL ,
` ordering ` INT NOT NULL DEFAULT 0 ,
PRIMARY KEY ( ` id ` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
2026-06-02 19:29:10 -05:00
CREATE TABLE IF NOT EXISTS `# __mokowaas_ticket_automation ` (
` id ` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
` title ` VARCHAR ( 255 ) NOT NULL ,
` trigger_event ` VARCHAR ( 50 ) NOT NULL DEFAULT 'ticket_created' ,
` conditions ` TEXT NOT NULL DEFAULT '[]' ,
` actions ` TEXT NOT NULL DEFAULT '[]' ,
` enabled ` TINYINT NOT NULL DEFAULT 1 ,
` ordering ` INT NOT NULL DEFAULT 0 ,
PRIMARY KEY ( ` id ` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
-- Default automation rules
INSERT IGNORE INTO `# __mokowaas_ticket_automation ` ( ` id ` , ` title ` , ` trigger_event ` , ` conditions ` , ` actions ` , ` enabled ` , ` ordering ` ) VALUES
( 1 , 'Auto-close resolved tickets after 7 days' , 'scheduled' , '[{"field":"status","op":"eq","value":"resolved"},{"field":"age_hours","op":"gt","value":"168"}]' , '[{"type":"set_status","value":"closed"},{"type":"add_note","value":"Auto-closed after 7 days with no response."}]' , 1 , 1 ),
( 2 , 'Escalate urgent tickets with no response in 1 hour' , 'scheduled' , '[{"field":"priority","op":"eq","value":"urgent"},{"field":"sla_responded","op":"eq","value":"0"},{"field":"age_hours","op":"gt","value":"1"}]' , '[{"type":"add_note","value":"SLA BREACH: Urgent ticket has no staff response after 1 hour."}]' , 1 , 2 ),
( 3 , 'Notify on high priority ticket creation' , 'ticket_created' , '[{"field":"priority","op":"in","value":"high,urgent"}]' , '[{"type":"add_note","value":"High/urgent ticket created — requires immediate attention."}]' , 1 , 3 );
2026-06-02 15:25:08 -05:00
-- Default categories
INSERT IGNORE INTO `# __mokowaas_ticket_categories ` ( ` id ` , ` title ` , ` alias ` , ` description ` , ` sla_response_minutes ` , ` sla_resolution_minutes ` , ` ordering ` ) VALUES
( 1 , 'General Support' , 'general-support' , 'General questions and assistance' , 480 , 2880 , 1 ),
( 2 , 'Bug Report' , 'bug-report' , 'Report a software bug or issue' , 240 , 1440 , 2 ),
( 3 , 'Feature Request' , 'feature-request' , 'Request a new feature or enhancement' , 1440 , 10080 , 3 ),
( 4 , 'Billing' , 'billing' , 'Billing, invoicing, and payment questions' , 240 , 1440 , 4 ),
( 5 , 'Urgent / Outage' , 'urgent-outage' , 'Site down or critical issue' , 60 , 240 , 5 );
2026-06-03 11:53:54 -05:00
--
-- Privacy Guard Tables
--
CREATE TABLE IF NOT EXISTS `# __mokowaas_consent_log ` (
` id ` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
` user_id ` INT NOT NULL ,
` category ` VARCHAR ( 50 ) NOT NULL ,
` action ` ENUM ( 'granted' , 'revoked' ) NOT NULL ,
` ip_address ` VARCHAR ( 45 ) NOT NULL DEFAULT '' ,
` created ` DATETIME NOT NULL ,
PRIMARY KEY ( ` id ` ),
KEY ` idx_user ` ( ` user_id ` ),
KEY ` idx_category ` ( ` category ` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
CREATE TABLE IF NOT EXISTS `# __mokowaas_data_requests ` (
` id ` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
` user_id ` INT NOT NULL ,
` type ` ENUM ( 'export' , 'delete' , 'anonymize' ) NOT NULL ,
` status ` ENUM ( 'pending' , 'processing' , 'completed' , 'denied' ) NOT NULL DEFAULT 'pending' ,
` notes ` TEXT ,
` processed_by ` INT DEFAULT NULL ,
` created ` DATETIME NOT NULL ,
` processed ` DATETIME DEFAULT NULL ,
PRIMARY KEY ( ` id ` ),
KEY ` idx_user ` ( ` user_id ` ),
KEY ` idx_status ` ( ` status ` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
CREATE TABLE IF NOT EXISTS `# __mokowaas_retention_policies ` (
` id ` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
` content_type ` VARCHAR ( 100 ) NOT NULL ,
` retention_days ` INT UNSIGNED NOT NULL DEFAULT 365 ,
` action ` ENUM ( 'anonymize' , 'delete' , 'archive' ) NOT NULL DEFAULT 'anonymize' ,
` enabled ` TINYINT NOT NULL DEFAULT 1 ,
` description ` VARCHAR ( 255 ) NOT NULL DEFAULT '' ,
PRIMARY KEY ( ` id ` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
-- Default retention policies
INSERT IGNORE INTO `# __mokowaas_retention_policies ` ( ` id ` , ` content_type ` , ` retention_days ` , ` action ` , ` enabled ` , ` description ` ) VALUES
( 1 , 'action_logs' , 90 , 'delete' , 1 , 'Delete action log entries older than 90 days' ),
( 2 , 'waf_logs' , 30 , 'delete' , 1 , 'Delete WAF block logs older than 30 days' ),
( 3 , 'sessions' , 7 , 'delete' , 1 , 'Purge expired sessions older than 7 days' ),
( 4 , 'inactive_users' , 730 , 'anonymize' , 0 , 'Anonymize users inactive for 2 years (disabled by default)' ),
( 5 , 'closed_tickets' , 365 , 'anonymize' , 0 , 'Anonymize closed tickets older than 1 year (disabled by default)' );