Beacon save: auto-create service point and lt_ link, app is authoritative
- When saving a beacon, automatically create service point with same name - Create lt_Beacon_Businesses_ServicePoints link record - If UUID already exists, update instead of creating duplicate - App is authoritative: reassigns beacon/servicepoint/lt_ to current business Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
31e71068d1
commit
0dc64b7868
1 changed files with 93 additions and 12 deletions
|
|
@ -62,36 +62,84 @@ if (structKeyExists(data, "IsActive")) {
|
||||||
else if (isNumeric(data.IsActive)) isActive = int(data.IsActive);
|
else if (isNumeric(data.IsActive)) isActive = int(data.IsActive);
|
||||||
else if (isSimpleValue(data.IsActive)) isActive = (lcase(trim(toString(data.IsActive))) EQ "true" ? 1 : 0);
|
else if (isSimpleValue(data.IsActive)) isActive = (lcase(trim(toString(data.IsActive))) EQ "true" ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// App is authoritative: if UUID exists, treat as update (overwrite)
|
||||||
|
if (beaconId EQ 0 && len(uuid) GT 0) {
|
||||||
|
qExisting = queryExecute(
|
||||||
|
"SELECT BeaconID FROM Beacons WHERE BeaconUUID = ? LIMIT 1",
|
||||||
|
[ { value=uuid, cfsqltype="cf_sql_varchar" } ],
|
||||||
|
{ datasource="payfrit" }
|
||||||
|
);
|
||||||
|
if (qExisting.recordCount GT 0) {
|
||||||
|
beaconId = qExisting.BeaconID;
|
||||||
|
}
|
||||||
|
}
|
||||||
</cfscript>
|
</cfscript>
|
||||||
|
|
||||||
<cfif beaconId GT 0>
|
<cfif beaconId GT 0>
|
||||||
<!--- Update, scoped to this business --->
|
<!--- Update - app is authoritative, reassign to current business --->
|
||||||
<cfquery datasource="payfrit">
|
<cfquery datasource="payfrit">
|
||||||
UPDATE Beacons
|
UPDATE Beacons
|
||||||
SET
|
SET
|
||||||
|
BeaconBusinessID = <cfqueryparam cfsqltype="cf_sql_integer" value="#request.BusinessID#">,
|
||||||
BeaconName = <cfqueryparam cfsqltype="cf_sql_varchar" value="#beaconName#">,
|
BeaconName = <cfqueryparam cfsqltype="cf_sql_varchar" value="#beaconName#">,
|
||||||
BeaconUUID = <cfqueryparam cfsqltype="cf_sql_varchar" value="#uuid#" null="#(len(uuid) EQ 0)#">,
|
BeaconUUID = <cfqueryparam cfsqltype="cf_sql_varchar" value="#uuid#" null="#(len(uuid) EQ 0)#">,
|
||||||
BeaconIsActive = <cfqueryparam cfsqltype="cf_sql_tinyint" value="#isActive#">
|
BeaconIsActive = <cfqueryparam cfsqltype="cf_sql_tinyint" value="#isActive#">
|
||||||
WHERE BeaconID = <cfqueryparam cfsqltype="cf_sql_integer" value="#beaconId#">
|
WHERE BeaconID = <cfqueryparam cfsqltype="cf_sql_integer" value="#beaconId#">
|
||||||
AND BeaconBusinessID = <cfqueryparam cfsqltype="cf_sql_integer" value="#request.BusinessID#">
|
|
||||||
</cfquery>
|
</cfquery>
|
||||||
|
|
||||||
<!--- confirm it exists/belongs to business --->
|
<!--- Update associated service point if it exists, also reassign to current business --->
|
||||||
<cfquery name="qCheck" datasource="payfrit">
|
<cfquery name="qLink" datasource="payfrit">
|
||||||
SELECT BeaconID
|
SELECT ServicePointID FROM lt_Beacon_Businesses_ServicePoints
|
||||||
FROM Beacons
|
|
||||||
WHERE BeaconID = <cfqueryparam cfsqltype="cf_sql_integer" value="#beaconId#">
|
WHERE BeaconID = <cfqueryparam cfsqltype="cf_sql_integer" value="#beaconId#">
|
||||||
AND BeaconBusinessID = <cfqueryparam cfsqltype="cf_sql_integer" value="#request.BusinessID#">
|
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
</cfquery>
|
</cfquery>
|
||||||
|
<cfif qLink.recordCount GT 0>
|
||||||
<cfif qCheck.recordCount EQ 0>
|
<cfquery datasource="payfrit">
|
||||||
<cfoutput>#serializeJSON({ OK=false, ERROR="not_found", MESSAGE="Beacon not found or doesn't belong to this business" })#</cfoutput>
|
UPDATE ServicePoints
|
||||||
<cfabort>
|
SET ServicePointName = <cfqueryparam cfsqltype="cf_sql_varchar" value="#beaconName#">,
|
||||||
|
ServicePointBusinessID = <cfqueryparam cfsqltype="cf_sql_integer" value="#request.BusinessID#">
|
||||||
|
WHERE ServicePointID = <cfqueryparam cfsqltype="cf_sql_integer" value="#qLink.ServicePointID#">
|
||||||
|
</cfquery>
|
||||||
|
<!--- Update lt_ link business as well --->
|
||||||
|
<cfquery datasource="payfrit">
|
||||||
|
UPDATE lt_Beacon_Businesses_ServicePoints
|
||||||
|
SET BusinessID = <cfqueryparam cfsqltype="cf_sql_integer" value="#request.BusinessID#">
|
||||||
|
WHERE BeaconID = <cfqueryparam cfsqltype="cf_sql_integer" value="#beaconId#">
|
||||||
|
</cfquery>
|
||||||
|
<cfelse>
|
||||||
|
<!--- No service point exists yet, create one --->
|
||||||
|
<cfquery datasource="payfrit">
|
||||||
|
INSERT INTO ServicePoints (
|
||||||
|
ServicePointBusinessID,
|
||||||
|
ServicePointName,
|
||||||
|
ServicePointTypeID,
|
||||||
|
ServicePointIsActive
|
||||||
|
) VALUES (
|
||||||
|
<cfqueryparam cfsqltype="cf_sql_integer" value="#request.BusinessID#">,
|
||||||
|
<cfqueryparam cfsqltype="cf_sql_varchar" value="#beaconName#">,
|
||||||
|
1,
|
||||||
|
1
|
||||||
|
)
|
||||||
|
</cfquery>
|
||||||
|
<cfquery name="qSpId" datasource="payfrit">
|
||||||
|
SELECT LAST_INSERT_ID() AS ServicePointID
|
||||||
|
</cfquery>
|
||||||
|
<cfquery datasource="payfrit">
|
||||||
|
INSERT INTO lt_Beacon_Businesses_ServicePoints (
|
||||||
|
BusinessID,
|
||||||
|
BeaconID,
|
||||||
|
ServicePointID
|
||||||
|
) VALUES (
|
||||||
|
<cfqueryparam cfsqltype="cf_sql_integer" value="#request.BusinessID#">,
|
||||||
|
<cfqueryparam cfsqltype="cf_sql_integer" value="#beaconId#">,
|
||||||
|
<cfqueryparam cfsqltype="cf_sql_integer" value="#qSpId.ServicePointID#">
|
||||||
|
)
|
||||||
|
</cfquery>
|
||||||
</cfif>
|
</cfif>
|
||||||
|
|
||||||
<cfelse>
|
<cfelse>
|
||||||
<!--- Insert --->
|
<!--- Insert beacon --->
|
||||||
<cfquery datasource="payfrit">
|
<cfquery datasource="payfrit">
|
||||||
INSERT INTO Beacons (
|
INSERT INTO Beacons (
|
||||||
BeaconBusinessID,
|
BeaconBusinessID,
|
||||||
|
|
@ -110,6 +158,39 @@ if (structKeyExists(data, "IsActive")) {
|
||||||
SELECT LAST_INSERT_ID() AS BeaconID
|
SELECT LAST_INSERT_ID() AS BeaconID
|
||||||
</cfquery>
|
</cfquery>
|
||||||
<cfset beaconId = qId.BeaconID>
|
<cfset beaconId = qId.BeaconID>
|
||||||
|
|
||||||
|
<!--- Auto-create service point with same name --->
|
||||||
|
<cfquery datasource="payfrit">
|
||||||
|
INSERT INTO ServicePoints (
|
||||||
|
ServicePointBusinessID,
|
||||||
|
ServicePointName,
|
||||||
|
ServicePointTypeID,
|
||||||
|
ServicePointIsActive
|
||||||
|
) VALUES (
|
||||||
|
<cfqueryparam cfsqltype="cf_sql_integer" value="#request.BusinessID#">,
|
||||||
|
<cfqueryparam cfsqltype="cf_sql_varchar" value="#beaconName#">,
|
||||||
|
1,
|
||||||
|
1
|
||||||
|
)
|
||||||
|
</cfquery>
|
||||||
|
|
||||||
|
<cfquery name="qSpId" datasource="payfrit">
|
||||||
|
SELECT LAST_INSERT_ID() AS ServicePointID
|
||||||
|
</cfquery>
|
||||||
|
<cfset servicePointId = qSpId.ServicePointID>
|
||||||
|
|
||||||
|
<!--- Create the lt_ link --->
|
||||||
|
<cfquery datasource="payfrit">
|
||||||
|
INSERT INTO lt_Beacon_Businesses_ServicePoints (
|
||||||
|
BusinessID,
|
||||||
|
BeaconID,
|
||||||
|
ServicePointID
|
||||||
|
) VALUES (
|
||||||
|
<cfqueryparam cfsqltype="cf_sql_integer" value="#request.BusinessID#">,
|
||||||
|
<cfqueryparam cfsqltype="cf_sql_integer" value="#beaconId#">,
|
||||||
|
<cfqueryparam cfsqltype="cf_sql_integer" value="#servicePointId#">
|
||||||
|
)
|
||||||
|
</cfquery>
|
||||||
</cfif>
|
</cfif>
|
||||||
|
|
||||||
<!--- Return saved row --->
|
<!--- Return saved row --->
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue