/** * Add Schedule Fields to Categories Table * * Adds time-based scheduling fields: * - CategoryScheduleStart: TIME - Start time when category is available (e.g., 06:00:00 for breakfast) * - CategoryScheduleEnd: TIME - End time when category stops being available (e.g., 11:00:00) * - CategoryScheduleDays: VARCHAR(20) - Comma-separated list of day IDs (1=Sun, 2=Mon, etc.) or NULL for all days * * Run this once to migrate the schema. */ response = { "OK": false }; try { // Check if columns already exist qCheck = queryExecute(" SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'payfrit' AND TABLE_NAME = 'Categories' AND COLUMN_NAME IN ('CategoryScheduleStart', 'CategoryScheduleEnd', 'CategoryScheduleDays') ", {}, { datasource: "payfrit" }); existingCols = valueList(qCheck.COLUMN_NAME); added = []; // Add CategoryScheduleStart if not exists if (!listFindNoCase(existingCols, "CategoryScheduleStart")) { queryExecute(" ALTER TABLE Categories ADD COLUMN CategoryScheduleStart TIME NULL ", {}, { datasource: "payfrit" }); arrayAppend(added, "CategoryScheduleStart"); } // Add CategoryScheduleEnd if not exists if (!listFindNoCase(existingCols, "CategoryScheduleEnd")) { queryExecute(" ALTER TABLE Categories ADD COLUMN CategoryScheduleEnd TIME NULL ", {}, { datasource: "payfrit" }); arrayAppend(added, "CategoryScheduleEnd"); } // Add CategoryScheduleDays if not exists if (!listFindNoCase(existingCols, "CategoryScheduleDays")) { queryExecute(" ALTER TABLE Categories ADD COLUMN CategoryScheduleDays VARCHAR(20) NULL ", {}, { datasource: "payfrit" }); arrayAppend(added, "CategoryScheduleDays"); } response["OK"] = true; response["ColumnsAdded"] = added; response["AlreadyExisted"] = listToArray(existingCols); response["MESSAGE"] = arrayLen(added) > 0 ? "Added #arrayLen(added)# column(s): #arrayToList(added)#" : "All columns already exist"; } catch (any e) { response["ERROR"] = "server_error"; response["MESSAGE"] = e.message; response["DETAIL"] = e.detail; } writeOutput(serializeJSON(response));