# HG changeset patch # User bsw # Date 1647941744 -3600 # Node ID e593570a23c50aed9c9eca4ecd231cb942535f1e # Parent a01d5c0604de3567cf245972b9592067f7b700b5 More efficient algorithm diff -r a01d5c0604de -r e593570a23c5 lib/token/sync.lua --- a/lib/token/sync.lua Tue Mar 22 10:25:35 2022 +0100 +++ b/lib/token/sync.lua Tue Mar 22 10:35:44 2022 +0100 @@ -22,14 +22,7 @@ local data = json.import(output) - local privileges = Privilege:new_selector() - :add_where{ "unit_id = ?", config.token.unit_id } - :exec() - - for i, privilege in ipairs(privileges) do - privilege:destroy() - end - + local privileged_member_ids = {} for i, entry in ipairs(data.data.balanceNotificationMany) do local member = Member:new_selector() :join("member_profile", nil, "member_profile.member_id = member.id") @@ -37,9 +30,17 @@ :optional_object_mode() :exec() if member then - local privilege = Privilege:new() - privilege.unit_id = config.token.unit_id - privilege.member_id = member.id + privileged_member_ids[member.id] = true + local privilege = Privilege:new_selector() + :add_where{ "unit_id = ?", config.token.unit_id } + :add_where{ "member_id = ?", member.id } + :optional_object_mode() + :exec() + if not privilege then + privilege = Privilege:new() + privilege.unit_id = config.token.unit_id + privilege.member_id = member.id + end privilege.initiative_right = true privilege.voting_right = true privilege.weight = entry.amount @@ -47,4 +48,16 @@ end end -end \ No newline at end of file + local privileges = Privilege:new_selector() + :add_where{ "unit_id = ?", config.token.unit_id } + :exec() + + for i, privilege in ipairs(privileges) do + if not privileged_member_ids[privilege.member_id] then + privilege:destroy() + end + end + + +end +