mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 07:53:49 +08:00
FIX: Always serialize the correct attributes for DirectoryItems (#13510)
This commit is contained in:

committed by
GitHub

parent
1702922a7c
commit
60a76737dc
@ -28,7 +28,8 @@ class DirectoryItemsController < ApplicationController
|
|||||||
|
|
||||||
order = params[:order] || DirectoryColumn.automatic_column_names.first
|
order = params[:order] || DirectoryColumn.automatic_column_names.first
|
||||||
dir = params[:asc] ? 'ASC' : 'DESC'
|
dir = params[:asc] ? 'ASC' : 'DESC'
|
||||||
if DirectoryColumn.active_column_names.include?(order.to_sym)
|
active_directory_column_names = DirectoryColumn.active_column_names
|
||||||
|
if active_directory_column_names.include?(order.to_sym)
|
||||||
result = result.order("directory_items.#{order} #{dir}, directory_items.id")
|
result = result.order("directory_items.#{order} #{dir}, directory_items.id")
|
||||||
elsif params[:order] === 'username'
|
elsif params[:order] === 'username'
|
||||||
result = result.order("users.#{order} #{dir}, directory_items.id")
|
result = result.order("users.#{order} #{dir}, directory_items.id")
|
||||||
@ -108,6 +109,8 @@ class DirectoryItemsController < ApplicationController
|
|||||||
serializer_opts[:plugin_column_ids] = params[:plugin_column_ids]&.split("|")&.map(&:to_i)
|
serializer_opts[:plugin_column_ids] = params[:plugin_column_ids]&.split("|")&.map(&:to_i)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
serializer_opts[:attributes] = active_directory_column_names
|
||||||
|
|
||||||
serialized = serialize_data(result, DirectoryItemSerializer, serializer_opts)
|
serialized = serialize_data(result, DirectoryItemSerializer, serializer_opts)
|
||||||
render_json_dump(directory_items: serialized,
|
render_json_dump(directory_items: serialized,
|
||||||
meta: {
|
meta: {
|
||||||
|
@ -30,17 +30,11 @@ class EditDirectoryColumnsController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
update_directory_item_serializer_attributes
|
|
||||||
|
|
||||||
render json: success_json
|
render json: success_json
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def update_directory_item_serializer_attributes
|
|
||||||
::DirectoryItemSerializer.attributes(*DirectoryColumn.active_column_names)
|
|
||||||
end
|
|
||||||
|
|
||||||
def ensure_user_fields_have_columns
|
def ensure_user_fields_have_columns
|
||||||
user_fields_without_column =
|
user_fields_without_column =
|
||||||
UserField.left_outer_joins(:directory_column)
|
UserField.left_outer_joins(:directory_column)
|
||||||
|
@ -25,21 +25,27 @@ class DirectoryItemSerializer < ApplicationSerializer
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
attributes :id,
|
|
||||||
:time_read
|
|
||||||
|
|
||||||
has_one :user, embed: :objects, serializer: UserSerializer
|
has_one :user, embed: :objects, serializer: UserSerializer
|
||||||
attributes *DirectoryColumn.active_column_names
|
|
||||||
|
attributes :id
|
||||||
|
|
||||||
def id
|
def id
|
||||||
object.user_id
|
object.user_id
|
||||||
end
|
end
|
||||||
|
|
||||||
def time_read
|
private
|
||||||
object.user_stat.time_read
|
|
||||||
end
|
|
||||||
|
|
||||||
def include_time_read?
|
def attributes
|
||||||
object.period_type == DirectoryItem.period_types[:all]
|
hash = super
|
||||||
|
|
||||||
|
@options[:attributes].each do |attr|
|
||||||
|
hash.merge!("#{attr}": object[attr])
|
||||||
|
end
|
||||||
|
|
||||||
|
if object.period_type == DirectoryItem.period_types[:all]
|
||||||
|
hash.merge!(time_read: object.user_stat.time_read)
|
||||||
|
end
|
||||||
|
|
||||||
|
hash
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
class DirectorySerializer < ApplicationSerializer
|
|
||||||
attributes :id
|
|
||||||
has_many :directory_items, serializer: DirectoryItemSerializer, embed: :objects
|
|
||||||
|
|
||||||
def id
|
|
||||||
object.filter
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
36
spec/serializers/directory_item_serializer_spec.rb
Normal file
36
spec/serializers/directory_item_serializer_spec.rb
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe DirectoryItemSerializer do
|
||||||
|
fab!(:user) { Fabricate(:user) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
DirectoryItem.refresh!
|
||||||
|
end
|
||||||
|
|
||||||
|
let :serializer do
|
||||||
|
directory_item = DirectoryItem.find_by(user: user, period_type: DirectoryItem.period_types[:all])
|
||||||
|
DirectoryItemSerializer.new(directory_item, { attributes: DirectoryColumn.active_column_names })
|
||||||
|
end
|
||||||
|
|
||||||
|
it "Serializes attributes for enabled directory_columns" do
|
||||||
|
DirectoryColumn.update_all(enabled: true)
|
||||||
|
|
||||||
|
payload = serializer.as_json
|
||||||
|
expect(payload[:directory_item].keys).to include(*DirectoryColumn.pluck(:name).map(&:to_sym))
|
||||||
|
end
|
||||||
|
|
||||||
|
it "Doesn't serialize attributes for disabled directory columns" do
|
||||||
|
DirectoryColumn.update_all(enabled: false)
|
||||||
|
directory_column = DirectoryColumn.first
|
||||||
|
directory_column.update(enabled: true)
|
||||||
|
|
||||||
|
payload = serializer.as_json
|
||||||
|
expect(payload[:directory_item].keys.count).to eq(4)
|
||||||
|
expect(payload[:directory_item]).to have_key(directory_column.name.to_sym)
|
||||||
|
expect(payload[:directory_item]).to have_key(:id)
|
||||||
|
expect(payload[:directory_item]).to have_key(:user)
|
||||||
|
expect(payload[:directory_item]).to have_key(:time_read)
|
||||||
|
end
|
||||||
|
end
|
Reference in New Issue
Block a user