forked from OpenNeo/impress
Add basic item JSON response (with trade values + counts)
This commit is contained in:
parent
aa45ea17b3
commit
4e00f5d1af
3 changed files with 43 additions and 6 deletions
|
|
@ -3,9 +3,12 @@ class ItemTradesController < ApplicationController
|
|||
@item = Item.find params[:item_id]
|
||||
@type = type_from_params
|
||||
|
||||
@item_trades = @item.closet_hangers.trading.includes(:user, :list).
|
||||
user_is_active.order('users.last_trade_activity_at DESC').
|
||||
to_trades(current_user, request.remote_ip)
|
||||
@item_trades = @item.visible_trades(
|
||||
scope: ClosetHanger.includes(:user, :list).
|
||||
order('users.last_trade_activity_at DESC'),
|
||||
user: current_user,
|
||||
remote_ip: request.remote_ip
|
||||
)
|
||||
@trades = @item_trades[@type]
|
||||
|
||||
if user_signed_in?
|
||||
|
|
|
|||
|
|
@ -80,8 +80,10 @@ class ItemsController < ApplicationController
|
|||
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
@trades = @item.closet_hangers.trading.user_is_active.
|
||||
to_trades(current_user, request.remote_ip)
|
||||
@trades = @item.visible_trades(
|
||||
user: current_user,
|
||||
remote_ip: request.remote_ip
|
||||
)
|
||||
|
||||
@contributors_with_counts = @item.contributors_with_counts
|
||||
|
||||
|
|
@ -107,6 +109,15 @@ class ItemsController < ApplicationController
|
|||
includes(:species).merge(Species.alphabetical)
|
||||
end
|
||||
|
||||
format.json do
|
||||
render json: @item.as_json(
|
||||
include_trade_counts: true,
|
||||
include_nc_trade_value: true,
|
||||
current_user: current_user,
|
||||
remote_ip: request.remote_ip
|
||||
)
|
||||
end
|
||||
|
||||
format.gif do
|
||||
expires_in 1.month
|
||||
redirect_to @item.thumbnail_url, allow_other_host: true
|
||||
|
|
|
|||
|
|
@ -444,11 +444,34 @@ class Item < ApplicationRecord
|
|||
created_at || Time.new(2010)
|
||||
end
|
||||
|
||||
# Returns the visible trades for this item, filtered by user visibility.
|
||||
# Accepts an optional scope to add additional query constraints (e.g., includes, order).
|
||||
def visible_trades(scope: nil, user: nil, remote_ip: nil)
|
||||
base = closet_hangers.trading.user_is_active
|
||||
base = base.merge(scope) if scope
|
||||
base.to_trades(user, remote_ip)
|
||||
end
|
||||
|
||||
def as_json(options={})
|
||||
super({
|
||||
result = super({
|
||||
only: [:id, :name, :description, :thumbnail_url, :rarity_index],
|
||||
methods: [:zones_restrict],
|
||||
}.merge(options))
|
||||
|
||||
if options[:include_trade_counts]
|
||||
trades = visible_trades(
|
||||
user: options[:current_user],
|
||||
remote_ip: options[:remote_ip]
|
||||
)
|
||||
result['num_trades_offering'] = trades[:offering].size
|
||||
result['num_trades_seeking'] = trades[:seeking].size
|
||||
end
|
||||
|
||||
if options[:include_nc_trade_value]
|
||||
result['nc_trade_value'] = nc_trade_value
|
||||
end
|
||||
|
||||
result
|
||||
end
|
||||
|
||||
def compatible_body_ids(use_cached: true)
|
||||
|
|
|
|||
Loading…
Reference in a new issue