| 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 
 |