/** * Create Parent Business (Shell) * * Creates a minimal business record to serve as a parent for other businesses. * No menu items, categories, or hours required. * * POST body: * { * "BusinessName": "Century Casino", * "UserID": 1, * "ChildBusinessIDs": [47, 48] // Optional: link existing businesses as children * } * * Returns the new BusinessID */ function readJsonBody() { var raw = getHttpRequestData().content; if (isNull(raw) || len(trim(raw)) == 0) return {}; try { var data = deserializeJSON(raw); return isStruct(data) ? data : {}; } catch (any e) { return {}; } } response = { "OK": false }; try { data = readJsonBody(); BusinessName = structKeyExists(data, "BusinessName") ? trim(data.BusinessName) : ""; UserID = structKeyExists(data, "UserID") ? val(data.UserID) : 0; ChildBusinessIDs = structKeyExists(data, "ChildBusinessIDs") && isArray(data.ChildBusinessIDs) ? data.ChildBusinessIDs : []; if (!len(BusinessName)) { response["ERROR"] = "missing_name"; response["MESSAGE"] = "BusinessName is required"; writeOutput(serializeJSON(response)); abort; } if (UserID <= 0) { response["ERROR"] = "missing_userid"; response["MESSAGE"] = "UserID is required"; writeOutput(serializeJSON(response)); abort; } // Create minimal address record (just a placeholder) queryExecute(" INSERT INTO Addresses (AddressLine1, AddressUserID, AddressTypeID, AddressAddedOn) VALUES ('Parent Business - No Physical Location', :userID, 2, NOW()) ", { userID: UserID }, { datasource = "payfrit" }); qAddr = queryExecute("SELECT LAST_INSERT_ID() as id", {}, { datasource = "payfrit" }); addressId = qAddr.id; // Create parent business (no menu, no hours, just a shell) queryExecute(" INSERT INTO Businesses (BusinessName, BusinessUserID, BusinessAddressID, BusinessParentBusinessID, BusinessDeliveryZipCodes, BusinessAddedOn) VALUES (:name, :userId, :addressId, NULL, '', NOW()) ", { name: BusinessName, userId: UserID, addressId: addressId }, { datasource = "payfrit" }); qBiz = queryExecute("SELECT LAST_INSERT_ID() as id", {}, { datasource = "payfrit" }); newBusinessID = qBiz.id; // Link address back to business queryExecute(" UPDATE Addresses SET AddressBusinessID = :bizId WHERE AddressID = :addrId ", { bizId: newBusinessID, addrId: addressId }, { datasource = "payfrit" }); // Update child businesses if provided linkedChildren = []; for (childID in ChildBusinessIDs) { childID = val(childID); if (childID > 0) { queryExecute(" UPDATE Businesses SET BusinessParentBusinessID = :parentId WHERE BusinessID = :childId ", { parentId: newBusinessID, childId: childID }, { datasource = "payfrit" }); arrayAppend(linkedChildren, childID); } } response["OK"] = true; response["BusinessID"] = newBusinessID; response["BusinessName"] = BusinessName; response["MESSAGE"] = "Parent business created"; if (arrayLen(linkedChildren) > 0) { response["LinkedChildren"] = linkedChildren; } } catch (any e) { response["ERROR"] = "server_error"; response["MESSAGE"] = e.message; response["DETAIL"] = e.detail; } writeOutput(serializeJSON(response));