forge/arma/server/addons/org/functions/fnc_initPayloadBuilder.sqf
Jacob Schmidt 445a114c1c Refactor org and store services around shared payloads
- Add shared store payload handling in server and extension code
- Remove obsolete org member and treasury service split
- Update client repositories and portal UI/store hydration
2026-04-02 13:56:49 -05:00

214 lines
8.5 KiB
Plaintext

#include "..\script_component.hpp"
/*
* File: fnc_initPayloadBuilder.sqf
* Author: IDSolutions
* Date: 2026-04-02
* Public: No
*
* Description:
* Initializes the org payload builder for portal/read-model shaping.
* Keeps hydrate construction out of OrgStore so the store can focus on
* extension-backed org operations and actor coordination.
*/
#pragma hemtt ignore_variables ["_self"]
GVAR(OrgPayloadBuilder) = createHashMapObject [[
["#type", "OrgPayloadBuilder"],
["resolveOrgForUid", compileFinal {
params [["_uid", "", [""]]];
if (_uid isEqualTo "") exitWith { createHashMap };
private _orgID = GVAR(OrgStore) call ["resolveOrgIdForUid", [_uid]];
private _org = GVAR(OrgStore) call ["loadById", [_orgID]];
if (_org isEqualTo createHashMap) then {
_org = GVAR(OrgStore) call ["init", [_uid]];
};
_org
}],
["resolveOwnerName", compileFinal {
params [["_ownerUid", "", [""]], ["_uid", "", [""]], ["_playerName", "", [""]], ["_membersRaw", createHashMap, [createHashMap]]];
private _ownerName = ["", "Server"] select (toLowerANSI _ownerUid isEqualTo "server");
{
private _memberData = _y;
private _memberUid = _memberData getOrDefault ["uid", ""];
if (_memberUid isEqualTo _ownerUid && { _ownerName isEqualTo "" }) exitWith {
_ownerName = _memberData getOrDefault ["name", "Unknown"];
};
} forEach _membersRaw;
if (_ownerName isEqualTo "" && { _ownerUid isEqualTo _uid }) then { _ownerName = _playerName; };
if (_ownerName isEqualTo "" && { _ownerUid isNotEqualTo "" }) then { _ownerName = "Unknown Owner"; };
if !(_ownerName isEqualType "") then { _ownerName = str _ownerName; };
_ownerName
}],
["buildMembersList", compileFinal {
params [["_membersRaw", createHashMap, [createHashMap]], ["_uid", "", [""]], ["_ownerUid", "", [""]]];
private _sessionRole = "Member";
private _membersList = [];
{
private _memberData = _y;
private _memberName = _memberData getOrDefault ["name", "Unknown"];
private _memberUid = _memberData getOrDefault ["uid", ""];
if (_memberUid isEqualTo _uid) then { _sessionRole = "Member"; };
if (_memberUid isEqualTo _ownerUid) then { _sessionRole = ["Member", "Leader"] select (_ownerUid isEqualTo _uid); };
_membersList pushBack [
["uid", _memberUid],
["name", _memberName]
];
} forEach _membersRaw;
createHashMapFromArray [
["members", _membersList],
["sessionRole", _sessionRole]
]
}],
["resolveDisplayName", compileFinal {
params [["_className", "", [""]], ["_configRoots", [], [[]]]];
if (_className isEqualTo "") exitWith { "" };
private _displayName = _className;
{
private _cfg = _x >> _className;
if (isClass _cfg) exitWith {
private _resolvedName = getText (_cfg >> "displayName");
if (_resolvedName isNotEqualTo "") then { _displayName = _resolvedName; };
};
} forEach _configRoots;
_displayName
}],
["buildAssetsList", compileFinal {
params [["_assetsRaw", createHashMap, [createHashMap]]];
private _assetsList = [];
{
private _category = _x;
{
private _assetData = _y;
private _className = _assetData getOrDefault ["classname", ""];
private _displayName = _self call ["resolveDisplayName", [_className, [
configFile >> "CfgWeapons",
configFile >> "CfgMagazines",
configFile >> "CfgVehicles",
configFile >> "CfgGlasses"
]]];
_assetsList pushBack [
["name", _displayName],
["type", _assetData getOrDefault ["type", _category]],
["quantity", str (_assetData getOrDefault ["quantity", 0])]
];
} forEach _y;
} forEach _assetsRaw;
_assetsList
}],
["buildFleetList", compileFinal {
params [["_fleetRaw", createHashMap, [createHashMap]]];
private _fleetList = [];
{
private _vehicleData = _y;
_fleetList pushBack [
["name", _vehicleData getOrDefault ["name", "Unknown Vehicle"]],
["type", _vehicleData getOrDefault ["type", "other"]],
["status", _vehicleData getOrDefault ["status", "Unknown"]],
["damage", _vehicleData getOrDefault ["damage", "0%"]]
];
} forEach _fleetRaw;
_fleetList
}],
["buildCreditLinesList", compileFinal {
params [["_creditLinesRaw", createHashMap, [createHashMap]]];
private _creditLinesList = [];
{
private _creditLineData = _y;
_creditLinesList pushBack [
["uid", _creditLineData getOrDefault ["uid", _x]],
["member", _creditLineData getOrDefault ["name", "Unknown Member"]],
["amount", _creditLineData getOrDefault ["amount", 0]]
];
} forEach _creditLinesRaw;
_creditLinesList
}],
["buildPortalPayload", compileFinal {
params [["_uid", "", [""]]];
if (_uid isEqualTo "") exitWith { createHashMap };
private _player = [_uid] call EFUNC(common,getPlayer);
if (isNull _player) exitWith { createHashMap };
private _actor = EGVAR(actor,Registry) getOrDefault [_uid, createHashMap];
private _orgID = _actor getOrDefault ["organization", "default"];
if (_orgID isEqualTo "") then { _orgID = "default"; };
private _org = _self call ["resolveOrgForUid", [_uid]];
if (_org isEqualTo createHashMap) exitWith { createHashMap };
private _verifiedOrg = GVAR(OrgStore) call ["ensureMember", [_orgID, _uid, GVAR(OrgStore) call ["resolveActorName", [_uid, _player, _actor]]]];
if (_verifiedOrg isNotEqualTo createHashMap) then { _org = _verifiedOrg; };
private _name = _org getOrDefault ["name", ""];
private _id = _org getOrDefault ["id", _orgID];
private _ownerUid = _org getOrDefault ["owner", ""];
private _funds = _org getOrDefault ["funds", 0];
private _reputation = _org getOrDefault ["reputation", 0];
private _creditLinesRaw = _org getOrDefault ["credit_lines", createHashMap];
private _assetsRaw = _org getOrDefault ["assets", createHashMap];
private _fleetRaw = _org getOrDefault ["fleet", createHashMap];
private _membersRaw = _org getOrDefault ["members", createHashMap];
private _isDefaultOrg = (_org getOrDefault ["default", false])
|| { toLowerANSI _id isEqualTo "default" }
|| { toLowerANSI _ownerUid isEqualTo "server" };
private _playerName = name _player;
private _playerVar = vehicleVarName _player;
private _sessionIsCeo = _isDefaultOrg && { _playerVar isEqualTo "ceo" };
private _memberShape = _self call ["buildMembersList", [_membersRaw, _uid, _ownerUid]];
private _sessionRole = _memberShape getOrDefault ["sessionRole", "Member"];
private _ownerName = _self call ["resolveOwnerName", [_ownerUid, _uid, _playerName, _membersRaw]];
if (_ownerUid isEqualTo _uid) then { _sessionRole = "Leader"; };
createHashMapFromArray [
["session", createHashMapFromArray [
["actorName", _playerName],
["actorUid", _uid],
["role", _sessionRole],
["ceo", _sessionIsCeo]
]],
["portalData", createHashMapFromArray [
["org", createHashMapFromArray [
["name", _name],
["tag", _id],
["owner", _ownerName],
["ownerUid", _ownerUid],
["isDefault", _isDefaultOrg]
]],
["funds", _funds],
["reputation", _reputation],
["creditLines", _self call ["buildCreditLinesList", [_creditLinesRaw]]],
["members", _memberShape getOrDefault ["members", []]],
["fleet", _self call ["buildFleetList", [_fleetRaw]]],
["assets", _self call ["buildAssetsList", [_assetsRaw]]],
["activity", []]
]]
]
}]
]];
GVAR(OrgPayloadBuilder)