This repository has been archived on 2026-03-21. You can view files and clone it, but cannot push or open issues or pull requests.
payfrit-biz/api/dev/seedData.cfm
John 16a3b7c9a3 Replace queryExecute with queryTimed across all endpoints for perf tracking
Converts 200+ endpoint files to use queryTimed() wrapper which tracks
DB query count and execution time. Restores perf dashboard files that
were accidentally moved to _scripts/. Includes portal UI updates.
2026-02-02 00:28:37 -08:00

206 lines
5.9 KiB
Text

<cfsetting showdebugoutput="false">
<cfsetting enablecfoutputonly="true">
<cfcontent type="application/json; charset=utf-8" reset="true">
<cfscript>
/**
* Seed Data Script - DEV ONLY
*
* Creates test users and data for development testing.
* This endpoint is disabled on production.
*
* GET: Returns current seed data info
* POST: { "action": "seed" } - Creates seed data
* POST: { "action": "reset" } - Clears all test data and re-seeds
*/
function apiAbort(required struct payload) {
writeOutput(serializeJSON(payload));
abort;
}
// SAFETY: Only allow on dev environment
if (!structKeyExists(application, "isDevEnvironment") || !application.isDevEnvironment) {
apiAbort({
"OK": false,
"ERROR": "forbidden",
"MESSAGE": "This endpoint is only available in development"
});
}
function readJsonBody() {
var raw = getHttpRequestData().content;
if (isNull(raw)) raw = "";
if (!len(trim(raw))) return {};
try {
var data = deserializeJSON(raw);
if (isStruct(data)) return data;
} catch (any e) {}
return {};
}
function createTestUser(phone, firstName, lastName, isVerified = true) {
var userUUID = replace(createUUID(), "-", "", "all");
queryTimed("
INSERT INTO Users (
ContactNumber,
UUID,
FirstName,
LastName,
IsContactVerified,
IsEmailVerified,
IsActive,
AddedOn,
Password,
PromoCode,
MobileVerifyCode
) VALUES (
:phone,
:uuid,
:firstName,
:lastName,
:isVerified,
0,
:isVerified,
:addedOn,
'',
:promoCode,
'123456'
)
", {
phone: { value: phone, cfsqltype: "cf_sql_varchar" },
uuid: { value: userUUID, cfsqltype: "cf_sql_varchar" },
firstName: { value: firstName, cfsqltype: "cf_sql_varchar" },
lastName: { value: lastName, cfsqltype: "cf_sql_varchar" },
isVerified: { value: isVerified ? 1 : 0, cfsqltype: "cf_sql_integer" },
addedOn: { value: now(), cfsqltype: "cf_sql_timestamp" },
promoCode: { value: randRange(1000000, 9999999), cfsqltype: "cf_sql_varchar" }
}, { datasource: "payfrit" });
return userUUID;
}
function seedTestData() {
var created = [];
// Test User 1: Magic phone (always works with OTP 123456)
try {
createTestUser("5555555555", "Magic", "User", true);
arrayAppend(created, "Magic User (5555555555)");
} catch (any e) {
if (e.message contains "Duplicate") {
arrayAppend(created, "Magic User already exists");
} else {
arrayAppend(created, "Magic User failed: " & e.message);
}
}
// Test User 2: Regular verified user
try {
createTestUser("5551234567", "Test", "Customer", true);
arrayAppend(created, "Test Customer (5551234567)");
} catch (any e) {
if (e.message contains "Duplicate") {
arrayAppend(created, "Test Customer already exists");
} else {
arrayAppend(created, "Test Customer failed: " & e.message);
}
}
// Test User 3: Unverified user (for testing signup flow)
try {
createTestUser("5559876543", "", "", false);
arrayAppend(created, "Unverified User (5559876543)");
} catch (any e) {
if (e.message contains "Duplicate") {
arrayAppend(created, "Unverified User already exists");
} else {
arrayAppend(created, "Unverified User failed: " & e.message);
}
}
return created;
}
function resetTestData() {
// Delete test users (by phone prefix 555)
queryTimed("
DELETE FROM Users
WHERE ContactNumber LIKE '555%'
", {}, { datasource: "payfrit" });
return seedTestData();
}
function getTestDataInfo() {
var qUsers = queryTimed("
SELECT ID, ContactNumber, FirstName, LastName,
IsContactVerified, UUID
FROM Users
WHERE ContactNumber LIKE '555%'
ORDER BY ContactNumber
", {}, { datasource: "payfrit" });
var users = [];
for (var row in qUsers) {
arrayAppend(users, {
"phone": row.ContactNumber,
"name": trim(row.FirstName & " " & row.LastName),
"verified": row.IsContactVerified == 1,
"uuid": row.UUID
});
}
return users;
}
try {
requestMethod = cgi.request_method;
if (requestMethod == "GET") {
// Return current test data info
writeOutput(serializeJSON({
"OK": true,
"testUsers": getTestDataInfo(),
"magicOTP": application.MAGIC_OTP_CODE,
"magicPhones": application.MAGIC_PHONE_NUMBERS
}));
} else if (requestMethod == "POST") {
data = readJsonBody();
action = structKeyExists(data, "action") ? lcase(data.action) : "seed";
if (action == "reset") {
created = resetTestData();
writeOutput(serializeJSON({
"OK": true,
"action": "reset",
"created": created,
"testUsers": getTestDataInfo()
}));
} else {
created = seedTestData();
writeOutput(serializeJSON({
"OK": true,
"action": "seed",
"created": created,
"testUsers": getTestDataInfo()
}));
}
} else {
apiAbort({
"OK": false,
"ERROR": "method_not_allowed",
"MESSAGE": "Use GET to view or POST to seed"
});
}
} catch (any e) {
apiAbort({
"OK": false,
"ERROR": "server_error",
"MESSAGE": application.showDetailedErrors ? e.message : "An error occurred",
"DETAIL": application.showDetailedErrors ? e.detail : ""
});
}
</cfscript>