liquid_feedback_frontend

annotate lib/token/sync.lua @ 1852:e593570a23c5

More efficient algorithm
author bsw
date Tue Mar 22 10:35:44 2022 +0100 (2022-03-22)
parents a01d5c0604de
children
rev   line source
bsw@1850 1 function _G.sync_token()
bsw@1850 2 local request = [[
bsw@1850 3 {
bsw@1850 4 "query": "query balanceNotificationMany($tokenSymbol: String) {
bsw@1850 5 balanceNotificationMany(filter: { token_symbol: $tokenSymbol }) {
bsw@1850 6 _id
bsw@1850 7 account_pk
bsw@1850 8 name
bsw@1850 9 token_symbol
bsw@1850 10 amount
bsw@1850 11 contractAddress
bsw@1850 12 owner
bsw@1850 13 }
bsw@1850 14 }",
bsw@1850 15 "variables": {
bsw@1850 16 "tokenSymbol": "]] .. config.token.token_name .. [["
bsw@1850 17 }
bsw@1850 18 }
bsw@1850 19 ]]
bsw@1850 20
bsw@1850 21 local output, err, status = extos.pfilter(request, "curl", "--insecure", "-X", "POST", "-H", "Content-Type: application/json", "-H", "X-REQUEST-TYPE: GraphQL", "-d", "@-", config.token.graphql_url)
bsw@1850 22
bsw@1850 23 local data = json.import(output)
bsw@1850 24
bsw@1852 25 local privileged_member_ids = {}
bsw@1850 26 for i, entry in ipairs(data.data.balanceNotificationMany) do
bsw@1850 27 local member = Member:new_selector()
bsw@1850 28 :join("member_profile", nil, "member_profile.member_id = member.id")
bsw@1850 29 :add_where{ "member_profile.profile->>'" .. config.token.key_profile_field .."' = ?", entry.account_pk }
bsw@1850 30 :optional_object_mode()
bsw@1850 31 :exec()
bsw@1850 32 if member then
bsw@1852 33 privileged_member_ids[member.id] = true
bsw@1852 34 local privilege = Privilege:new_selector()
bsw@1852 35 :add_where{ "unit_id = ?", config.token.unit_id }
bsw@1852 36 :add_where{ "member_id = ?", member.id }
bsw@1852 37 :optional_object_mode()
bsw@1852 38 :exec()
bsw@1852 39 if not privilege then
bsw@1852 40 privilege = Privilege:new()
bsw@1852 41 privilege.unit_id = config.token.unit_id
bsw@1852 42 privilege.member_id = member.id
bsw@1852 43 end
bsw@1850 44 privilege.initiative_right = true
bsw@1850 45 privilege.voting_right = true
bsw@1850 46 privilege.weight = entry.amount
bsw@1850 47 privilege:save()
bsw@1850 48 end
bsw@1850 49 end
bsw@1850 50
bsw@1852 51 local privileges = Privilege:new_selector()
bsw@1852 52 :add_where{ "unit_id = ?", config.token.unit_id }
bsw@1852 53 :exec()
bsw@1852 54
bsw@1852 55 for i, privilege in ipairs(privileges) do
bsw@1852 56 if not privileged_member_ids[privilege.member_id] then
bsw@1852 57 privilege:destroy()
bsw@1852 58 end
bsw@1852 59 end
bsw@1852 60
bsw@1852 61
bsw@1852 62 end
bsw@1852 63

Impressum / About Us