data = {}; try { requestBody = toString(getHttpRequestData().content); if (len(requestBody)) data = deserializeJSON(requestBody); } catch (any e) {} phone = structKeyExists(data, "Phone") ? data.Phone : ""; // Strip non-digits phone = reReplace(phone, "[^0-9]", "", "all"); if (len(phone) == 0) { writeOutput(serializeJSON({ "OK": false, "ERROR": "missing_phone" })); abort; } // Find user by phone qUser = queryExecute(" SELECT ID, FirstName, LastName, EmailAddress, ContactNumber FROM Users WHERE REPLACE(REPLACE(REPLACE(ContactNumber, '-', ''), '(', ''), ')', '') LIKE ? OR ContactNumber LIKE ? ", [ { value: "%" & phone & "%", cfsqltype: "cf_sql_varchar" }, { value: "%" & phone & "%", cfsqltype: "cf_sql_varchar" } ], { datasource: "payfrit" }); if (qUser.recordCount == 0) { writeOutput(serializeJSON({ "OK": false, "ERROR": "user_not_found", "PHONE": phone })); abort; } userId = qUser.ID; // Get all employee records for this user qEmployees = queryExecute(" SELECT e.ID, e.BusinessID, e.StatusID, CAST(e.IsActive AS UNSIGNED) AS IsActive, b.Name FROM Employees e JOIN Businesses b ON e.BusinessID = b.ID WHERE e.UserID = ? ", [{ value: userId, cfsqltype: "cf_sql_integer" }], { datasource: "payfrit" }); employees = []; for (row in qEmployees) { arrayAppend(employees, { "EmployeeID": row.ID, "BusinessID": row.BusinessID, "Name": row.Name, "StatusID": row.StatusID, "IsActive": row.IsActive }); } writeOutput(serializeJSON({ "OK": true, "USER": { "UserID": qUser.ID, "Name": trim(qUser.FirstName & " " & qUser.LastName), "Email": qUser.EmailAddress, "Phone": qUser.ContactNumber }, "EMPLOYEES": employees }));