payfrit-works/api/dev/seedData.cfm
John Mizerek 16f63bebe5 Fix seedData.cfm: remove UserEmail column reference
Users table doesn't have email column.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-26 12:44:53 -08:00

206 lines
6 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");
queryExecute("
INSERT INTO Users (
UserContactNumber,
UserUUID,
UserFirstName,
UserLastName,
UserIsContactVerified,
UserIsEmailVerified,
UserIsActive,
UserAddedOn,
UserPassword,
UserPromoCode,
UserMobileVerifyCode
) 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)
queryExecute("
DELETE FROM Users
WHERE UserContactNumber LIKE '555%'
", {}, { datasource: "payfrit" });
return seedTestData();
}
function getTestDataInfo() {
var qUsers = queryExecute("
SELECT UserID, UserContactNumber, UserFirstName, UserLastName,
UserIsContactVerified, UserUUID
FROM Users
WHERE UserContactNumber LIKE '555%'
ORDER BY UserContactNumber
", {}, { datasource: "payfrit" });
var users = [];
for (var row in qUsers) {
arrayAppend(users, {
"phone": row.UserContactNumber,
"name": trim(row.UserFirstName & " " & row.UserLastName),
"verified": row.UserIsContactVerified == 1,
"uuid": row.UserUUID
});
}
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>