| @@ -1,115 +1,115 @@ | |||
| class ApplicationService | |||
| include Callable | |||
| Error = Class.new(StandardError) | |||
| def regix_emoji content | |||
| " " if content.blank? | |||
| regex = /[^a-zA-Z0-9\u4E00-\u9FFF]/ | |||
| content.gsub(regex, '') | |||
| end | |||
| private | |||
| def strip(str) | |||
| str.to_s.strip.presence | |||
| end | |||
| def str_to_boolean str | |||
| ActiveModel::Type::Boolean.new.cast str | |||
| end | |||
| # author: zxh | |||
| # blockchain创建项目相关api | |||
| def invoke_blockchain_api(uri, params) | |||
| begin | |||
| uri = URI.parse(URI.encode(uri.strip)) | |||
| res = Net::HTTP.start(uri.host, uri.port) do |http| | |||
| req = Net::HTTP::Post.new(uri) | |||
| req['Content-Type'] = 'application/json' | |||
| req.body = params | |||
| http.request(req) | |||
| end | |||
| if res.code.to_i != 200 | |||
| puts '区块链接口请求失败.' | |||
| return false | |||
| else | |||
| res_body = JSON.parse(res.body) | |||
| if res_body.has_key?("status") && res_body["status"] == 0 | |||
| else | |||
| puts '区块链接口请求出错.' | |||
| return false | |||
| end | |||
| end | |||
| return true | |||
| rescue Exception => e | |||
| puts '区块链接口请求失败.' | |||
| return false | |||
| end | |||
| end | |||
| # params: params from index.js page | |||
| def create_repo_on_blockchain(params, project) | |||
| username = params['user_id'].to_s | |||
| token_name = project.id.to_s | |||
| total_supply = params['blockchain_token_all'].to_i | |||
| token_balance = [[username, (total_supply * params['blockchain_init_token'].to_i / 100).to_i]] | |||
| param = { | |||
| "request-type": "create repo", | |||
| "username": username, | |||
| "token_name": token_name, | |||
| "total_supply": total_supply, | |||
| "token_balance": token_balance | |||
| }.to_json | |||
| invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) | |||
| end | |||
| def transfer_balance_on_blockchain(payer, payee, token_name, amount) | |||
| param = { | |||
| "request-type": "transfer amount", | |||
| "payer": payer, | |||
| "payee": payee, | |||
| "token_name": token_name, | |||
| "amount": amount | |||
| }.to_json | |||
| results = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) | |||
| return results | |||
| end | |||
| def lock_balance_on_blockchain(username, tokenname, amount) | |||
| param = { | |||
| "request-type": "lock user balance", | |||
| "username": username, | |||
| "token_name": tokenname, | |||
| "amount": amount | |||
| }.to_json | |||
| results = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) | |||
| return results | |||
| end | |||
| def unlock_balance_on_blockchain(username, tokenname, amount) | |||
| param = { | |||
| "request-type": "unlock user balance", | |||
| "username": username, | |||
| "token_name": tokenname, | |||
| "amount": amount | |||
| }.to_json | |||
| results = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) | |||
| return results | |||
| end | |||
| def phone_mail_type value | |||
| value =~ /^1\d{10}$/ ? 1 : 0 | |||
| end | |||
| end | |||
| class ApplicationService | |||
| include Callable | |||
| Error = Class.new(StandardError) | |||
| def regix_emoji content | |||
| " " if content.blank? | |||
| regex = /[^a-zA-Z0-9\u4E00-\u9FFF]/ | |||
| content.gsub(regex, '') | |||
| end | |||
| private | |||
| def strip(str) | |||
| str.to_s.strip.presence | |||
| end | |||
| def str_to_boolean str | |||
| ActiveModel::Type::Boolean.new.cast str | |||
| end | |||
| # author: zxh | |||
| # blockchain创建项目相关api | |||
| def invoke_blockchain_api(uri, params) | |||
| begin | |||
| uri = URI.parse(URI.encode(uri.strip)) | |||
| res = Net::HTTP.start(uri.host, uri.port) do |http| | |||
| req = Net::HTTP::Post.new(uri) | |||
| req['Content-Type'] = 'application/json' | |||
| req.body = params | |||
| http.request(req) | |||
| end | |||
| if res.code.to_i != 200 | |||
| puts '区块链接口请求失败.' | |||
| return false | |||
| else | |||
| res_body = JSON.parse(res.body) | |||
| if res_body.has_key?("status") && res_body["status"] == 0 | |||
| else | |||
| puts '区块链接口请求出错.' | |||
| return false | |||
| end | |||
| end | |||
| return true | |||
| rescue Exception => e | |||
| puts '区块链接口请求失败.' | |||
| return false | |||
| end | |||
| end | |||
| # params: params from index.js page | |||
| def create_repo_on_blockchain(params, project) | |||
| username = params['user_id'].to_s | |||
| token_name = project.id.to_s | |||
| total_supply = params['blockchain_token_all'].to_i | |||
| token_balance = [[username, (total_supply * params['blockchain_init_token'].to_i / 100).to_i]] | |||
| param = { | |||
| "request-type": "create repo", | |||
| "username": username, | |||
| "token_name": token_name, | |||
| "total_supply": total_supply, | |||
| "token_balance": token_balance | |||
| }.to_json | |||
| invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) | |||
| end | |||
| def transfer_balance_on_blockchain(payer, payee, token_name, amount) | |||
| param = { | |||
| "request-type": "transfer amount", | |||
| "payer": payer, | |||
| "payee": payee, | |||
| "token_name": token_name, | |||
| "amount": amount | |||
| }.to_json | |||
| results = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) | |||
| return results | |||
| end | |||
| def lock_balance_on_blockchain(username, tokenname, amount) | |||
| param = { | |||
| "request-type": "lock user balance", | |||
| "username": username, | |||
| "token_name": tokenname, | |||
| "amount": amount | |||
| }.to_json | |||
| results = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) | |||
| return results | |||
| end | |||
| def unlock_balance_on_blockchain(username, tokenname, amount) | |||
| param = { | |||
| "request-type": "unlock user balance", | |||
| "username": username, | |||
| "token_name": tokenname, | |||
| "amount": amount | |||
| }.to_json | |||
| results = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) | |||
| return results | |||
| end | |||
| def phone_mail_type value | |||
| value =~ /^1\d{10}$/ ? 1 : 0 | |||
| end | |||
| end | |||