Update all SQL queries, query result references, and ColdFusion code to match
the renamed database schema. Tables use plural CamelCase, PKs are all `ID`,
column prefixes stripped (e.g. BusinessName→Name, UserFirstName→FirstName).
Key changes:
- Strip table-name prefixes from all column references (Businesses, Users,
Addresses, Hours, Menus, Categories, Items, Stations, Orders,
OrderLineItems, Tasks, TaskCategories, TaskRatings, QuickTaskTemplates,
ScheduledTaskDefinitions, ChatMessages, Beacons, ServicePoints, Employees,
VisitorTrackings, ApiPerfLogs, tt_States, tt_Days, tt_AddressTypes,
tt_OrderTypes, tt_TaskTypes)
- Rename PK references from {TableName}ID to ID in all queries
- Rewrite 7 admin beacon files to use ServicePoints.BeaconID instead of
dropped lt_Beacon_Businesses_ServicePoints link table
- Rewrite beacon assignment files (list, save, delete) for new schema
- Fix FK references incorrectly changed to ID (OrderLineItems.OrderID,
Categories.MenuID, Tasks.CategoryID, ServicePoints.BeaconID)
- Update Addresses: AddressLat→Latitude, AddressLng→Longitude
- Update Users: UserPassword→Password, UserIsEmailVerified→IsEmailVerified,
UserIsActive→IsActive, UserBalance→Balance, etc.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
73 lines
2 KiB
Text
73 lines
2 KiB
Text
<cfsetting showdebugoutput="false">
|
|
<cfsetting enablecfoutputonly="true">
|
|
<cfcontent type="application/json; charset=utf-8" reset="true">
|
|
|
|
<cfscript>
|
|
function headerValue(name) {
|
|
// Use servlet request object to get headers (CGI scope doesn't expose custom HTTP headers in Lucee)
|
|
try {
|
|
req = getPageContext().getRequest();
|
|
val = req.getHeader(arguments.name);
|
|
if (!isNull(val)) return trim(val);
|
|
} catch (any e) {
|
|
// Fall back to CGI scope
|
|
k = "HTTP_" & ucase(reReplace(arguments.name, "[^A-Za-z0-9]", "_", "all"));
|
|
if (structKeyExists(cgi, k)) return trim(cgi[k]);
|
|
}
|
|
return "";
|
|
}
|
|
|
|
userToken = headerValue("X-User-Token");
|
|
|
|
result = {
|
|
"receivedToken": userToken,
|
|
"tokenLength": len(userToken),
|
|
"tokenPrefix": len(userToken) > 8 ? left(userToken, 8) : userToken
|
|
};
|
|
|
|
if (len(userToken)) {
|
|
try {
|
|
qTok = queryExecute(
|
|
"SELECT ID, Token FROM UserTokens WHERE Token = ? LIMIT 1",
|
|
[ { value = userToken, cfsqltype = "cf_sql_varchar" } ],
|
|
{ datasource = "payfrit" }
|
|
);
|
|
result.dbLookupRecords = qTok.recordCount;
|
|
if (qTok.recordCount > 0) {
|
|
result.foundUserId = qTok.ID;
|
|
}
|
|
|
|
// Also check with LIKE to see if partial match exists
|
|
qPartial = queryExecute(
|
|
"SELECT ID, Token FROM UserTokens WHERE Token LIKE ? LIMIT 5",
|
|
[ { value = left(userToken, 8) & "%", cfsqltype = "cf_sql_varchar" } ],
|
|
{ datasource = "payfrit" }
|
|
);
|
|
result.partialMatches = qPartial.recordCount;
|
|
|
|
} catch (any e) {
|
|
result.error = e.message;
|
|
}
|
|
}
|
|
|
|
// Also list recent tokens
|
|
try {
|
|
qRecent = queryExecute(
|
|
"SELECT ID, LEFT(Token, 8) as TokenPrefix, LENGTH(Token) as TokenLen FROM UserTokens ORDER BY ID DESC LIMIT 5",
|
|
[],
|
|
{ datasource = "payfrit" }
|
|
);
|
|
result.recentTokens = [];
|
|
for (row in qRecent) {
|
|
arrayAppend(result.recentTokens, {
|
|
"userId": row.ID,
|
|
"prefix": row.TokenPrefix,
|
|
"length": row.TokenLen
|
|
});
|
|
}
|
|
} catch (any e) {
|
|
result.recentTokensError = e.message;
|
|
}
|
|
|
|
writeOutput(serializeJSON(result));
|
|
</cfscript>
|