Skip to content

Commit

Permalink
Merge pull request #1487 from nervosnetwork/develop
Browse files Browse the repository at this point in the history
Deploy to testnet
  • Loading branch information
rabbitz authored Nov 6, 2023
2 parents 1ef0d40 + 67bfec1 commit 5003653
Show file tree
Hide file tree
Showing 10 changed files with 108 additions and 11 deletions.
4 changes: 3 additions & 1 deletion app/controllers/api/v1/daily_statistics_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ class DailyStatisticsController < ApplicationController
def show
daily_statistics = DailyStatistic.order(created_at_unixtimestamp: :asc).valid_indicators

render json: rendered_json(daily_statistics)
if stale?(daily_statistics, public: true)
render json: rendered_json(daily_statistics)
end
end

private
Expand Down
2 changes: 2 additions & 0 deletions app/controllers/api/v1/monetary_data_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ class MonetaryDataController < ApplicationController
before_action :validate_query_params, only: :show

def show
expires_in 1.hour, public: true, stale_while_revalidate: 10.minutes, stale_if_error: 1.hour

monetary_data = MonetaryData.new

render json: MonetaryDataSerializer.new(monetary_data, params: { indicator: params[:id] })
Expand Down
11 changes: 11 additions & 0 deletions app/controllers/api/v1/udt_queries_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
module Api
module V1
class UdtQueriesController < ApplicationController
def index
udts = Udt.query_by_name_or_symbl(params[:q].downcase)

render json: UdtSerializer.new(udts, { fields: { udt: [:full_name, :symbol, :type_hash, :icon_file] } })
end
end
end
end
7 changes: 7 additions & 0 deletions app/models/ckb_transaction.rb
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ class CkbTransaction < ApplicationRecord

after_commit :flush_cache
before_destroy :recover_dead_cell
before_destroy :log_deletion_chain

def self.cached_find(query_key)
Rails.cache.realize([name, query_key], race_condition_ttl: 3.seconds) do
Expand Down Expand Up @@ -434,6 +435,12 @@ def cellbase_display_inputs
def recover_dead_cell
inputs.update_all(status: "live", consumed_by_id: nil, consumed_block_timestamp: nil)
end

def log_deletion_chain
unless tx_pending?
Rails.logger.info "Deleting #{self.class.name} with ID #{id} using #{caller}: #{as_json}"
end
end
end

# == Schema Information
Expand Down
2 changes: 1 addition & 1 deletion app/models/daily_statistic.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class DailyStatistic < ApplicationRecord

attr_accessor :from_scratch

scope :valid_indicators, -> { select(VALID_INDICATORS - %w(burnt liquidity created_at updated_at) + %w(id)) }
scope :valid_indicators, -> { select(VALID_INDICATORS - %w(burnt liquidity created_at) + %w(id updated_at)) }
scope :recent, -> { order("created_at_unixtimestamp desc nulls last") }
scope :recent_year, -> {
where("created_at_unixtimestamp >= ? and created_at_unixtimestamp < ?", Time.current.beginning_of_year.to_i, Time.current.to_i)
Expand Down
4 changes: 4 additions & 0 deletions app/models/udt.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ class Udt < ApplicationRecord
validates :total_amount, numericality: { greater_than_or_equal_to: 0 }
validates :email, format: { with: /\A(.+)@(.+)\z/, message: "Not a valid email" }, allow_nil: true

scope :query_by_name_or_symbl, ->(search) {
where("lower(full_name) LIKE ? or lower(symbol) LIKE ?", "%#{search}%", "%#{search}%")
}

attribute :code_hash, :ckb_hash

has_and_belongs_to_many :ckb_transactions, join_table: :udt_transactions
Expand Down
16 changes: 8 additions & 8 deletions config/initializers/cors.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins "https://explorer.nervos.org",
"https://explorer-testnet.nervos.org",
"https://aggron.explorer.nervos.org",
"https://pudge.explorer.nervos.org",
"https://staging.explorer.nervos.org",
/\Ahttps:\/\/ckb-explorer-.*-magickbase.vercel.app\z/,
"http://localhost:3000",
(ENV["STAGING_DOMAIN"]).to_s
resource "*", headers: :any, methods: [:get, :post, :head, :options]
"https://explorer-testnet.nervos.org",
"https://aggron.explorer.nervos.org",
"https://pudge.explorer.nervos.org",
"https://staging.explorer.nervos.org",
/\Ahttps:\/\/ckb-explorer-.*-magickbase.vercel.app\z/,
"http://localhost:3000",
(ENV["STAGING_DOMAIN"]).to_s
resource "*", headers: :any, methods: [:get, :post, :put, :head, :options]
end
end
2 changes: 2 additions & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
resources :cell_output_type_scripts, only: :show
resources :cell_output_data, only: :show
resources :suggest_queries, only: :index
resources :udt_queries, only: :index
resources :statistics, only: %i(index show)
resources :statistics, only: %i(index show)
resources :nets, only: %i(index show)
resources :statistic_info_charts, only: :index
Expand Down
69 changes: 69 additions & 0 deletions test/controllers/api/v1/udt_queries_controller_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
require "test_helper"

module Api
module V1
class UdtQueriesControllerTest < ActionDispatch::IntegrationTest
test "should return empty array" do
valid_get api_v1_udt_queries_url, params: { q: "CKB" }

response_json = { data: [] }.to_json

assert_response :success
assert_equal "application/vnd.api+json", response.media_type
assert_equal response_json, response.body
end

test "should query by symbol" do
udt = create(:udt, full_name: "Nervos Token", symbol: "CKB")

valid_get api_v1_udt_queries_url, params: { q: "CKB" }

response_json = UdtSerializer.new([udt],
{
fields: {
udt: [
:full_name, :symbol, :type_hash,
:icon_file
] } }).serialized_json

assert_response :success
assert_equal response_json, response.body
end

test "should query by name" do
udt = create(:udt, full_name: "Nervos Token", symbol: "CKB")

valid_get api_v1_udt_queries_url, params: { q: "nervos" }

response_json = UdtSerializer.new([udt],
{
fields: {
udt: [
:full_name, :symbol, :type_hash,
:icon_file
] } }).serialized_json

assert_response :success
assert_equal response_json, response.body
end

test "should query by symbol and name" do
udt1 = create(:udt, full_name: "Nervos Token", symbol: "CKB")
udt2 = create(:udt, full_name: "Nervos CKB", symbol: "NCKB")

valid_get api_v1_udt_queries_url, params: { q: "CKB" }

response_json = UdtSerializer.new([udt1, udt2],
{
fields: {
udt: [
:full_name, :symbol, :type_hash,
:icon_file
] } }).serialized_json

assert_response :success
assert_equal response_json, response.body
end
end
end
end
2 changes: 1 addition & 1 deletion test/models/daily_statistic_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ class DailyStatisticTest < ActiveSupport::TestCase
test "valid_indicators should only return valid indicators" do
create(:daily_statistic)
attrs = DailyStatistic.valid_indicators.first.attribute_names + %w(burnt liquidity)
assert_equal (DailyStatistic::VALID_INDICATORS + %w(id)).sort, attrs.sort
assert_equal (DailyStatistic::VALID_INDICATORS + %w(id updated_at)).sort, attrs.sort
end
end

0 comments on commit 5003653

Please sign in to comment.