try { // Create ChatMessages table queryTimed(" CREATE TABLE IF NOT EXISTS ChatMessages ( ID INT AUTO_INCREMENT PRIMARY KEY, TaskID INT NOT NULL, SenderUserID INT NOT NULL, SenderType ENUM('customer', 'worker') NOT NULL, MessageBody TEXT NOT NULL, IsRead TINYINT(1) DEFAULT 0, CreatedOn DATETIME DEFAULT NOW(), INDEX idx_task (TaskID), INDEX idx_sender (SenderUserID), INDEX idx_created (CreatedOn) ) ", {}, { datasource: "payfrit" }); // Also add a "Chat" category if it doesn't exist for business 17 existing = queryTimed(" SELECT ID FROM TaskCategories WHERE BusinessID = 17 AND Name = 'Chat' ", {}, { datasource: "payfrit" }); if (existing.recordCount == 0) { queryTimed(" INSERT INTO TaskCategories (BusinessID, Name, Color) VALUES (17, 'Chat', '##2196F3') ", {}, { datasource: "payfrit" }); } // Verify table was created cols = queryTimed("DESCRIBE ChatMessages", {}, { datasource: "payfrit" }); colNames = []; for (c in cols) { arrayAppend(colNames, c.Field); } writeOutput(serializeJSON({ "OK": true, "MESSAGE": "ChatMessages table created successfully", "COLUMNS": colNames })); } catch (any e) { writeOutput(serializeJSON({ "OK": false, "ERROR": e.message })); }