mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: Remove hash-like access from service contracts
We decided to keep only one way to access values from a contract. This patch thus removes the hash-like access from contracts.
This commit is contained in:
committed by
Loïc Guitaut
parent
4d0ed2e146
commit
2f334964f2
@@ -50,7 +50,7 @@ module Chat
|
||||
private
|
||||
|
||||
def fetch_channel(params:)
|
||||
::Chat::Channel.includes(:chatable).find_by(id: params[:channel_id])
|
||||
::Chat::Channel.includes(:chatable).find_by(id: params.channel_id)
|
||||
end
|
||||
|
||||
def can_add_users_to_channel(guardian:, channel:)
|
||||
@@ -60,8 +60,8 @@ module Chat
|
||||
|
||||
def fetch_target_users(params:, channel:)
|
||||
::Chat::UsersFromUsernamesAndGroupsQuery.call(
|
||||
usernames: params[:usernames],
|
||||
groups: params[:groups],
|
||||
usernames: params.usernames,
|
||||
groups: params.groups,
|
||||
excluded_user_ids: channel.chatable.direct_message_users.pluck(:user_id),
|
||||
)
|
||||
end
|
||||
|
||||
@@ -45,7 +45,7 @@ module Chat
|
||||
private
|
||||
|
||||
def fetch_channel(params:)
|
||||
::Chat::CategoryChannel.find_by(id: params[:channel_id], auto_join_users: true)
|
||||
::Chat::CategoryChannel.find_by(id: params.channel_id, auto_join_users: true)
|
||||
end
|
||||
|
||||
def create_memberships(channel:, params:)
|
||||
|
||||
@@ -38,7 +38,7 @@ module Chat
|
||||
end
|
||||
|
||||
def fetch_category(params:)
|
||||
Category.find_by(id: params[:category_id])
|
||||
Category.find_by(id: params.category_id)
|
||||
end
|
||||
|
||||
def fetch_category_channel_ids(category:)
|
||||
|
||||
@@ -33,7 +33,7 @@ module Chat
|
||||
end
|
||||
|
||||
def not_everyone_allowed(params:)
|
||||
params[:new_allowed_groups].exclude?(Group::AUTO_GROUPS[:everyone])
|
||||
params.new_allowed_groups.exclude?(Group::AUTO_GROUPS[:everyone])
|
||||
end
|
||||
|
||||
def fetch_users(params:)
|
||||
@@ -46,8 +46,8 @@ module Chat
|
||||
.joins(:user_chat_channel_memberships)
|
||||
.distinct
|
||||
.then do |users|
|
||||
break users if params[:new_allowed_groups].blank?
|
||||
users.where(<<~SQL, params[:new_allowed_groups])
|
||||
break users if params.new_allowed_groups.blank?
|
||||
users.where(<<~SQL, params.new_allowed_groups)
|
||||
users.id NOT IN (
|
||||
SELECT DISTINCT group_users.user_id
|
||||
FROM group_users
|
||||
|
||||
@@ -56,7 +56,7 @@ module Chat
|
||||
.not_staged
|
||||
.includes(:group_users)
|
||||
.where("NOT admin AND NOT moderator")
|
||||
.where(id: params[:destroyed_group_user_ids])
|
||||
.where(id: params.destroyed_group_user_ids)
|
||||
.joins(:user_chat_channel_memberships)
|
||||
.distinct
|
||||
end
|
||||
|
||||
@@ -49,7 +49,7 @@ module Chat
|
||||
end
|
||||
|
||||
def fetch_user(params:)
|
||||
User.find_by(id: params[:user_id])
|
||||
User.find_by(id: params.user_id)
|
||||
end
|
||||
|
||||
def user_not_staff(user:)
|
||||
|
||||
@@ -66,11 +66,11 @@ module Chat
|
||||
end
|
||||
|
||||
def fetch_category(params:)
|
||||
Category.find_by(id: params[:category_id])
|
||||
Category.find_by(id: params.category_id)
|
||||
end
|
||||
|
||||
def category_channel_does_not_exist(category:, params:)
|
||||
!Chat::Channel.exists?(chatable: category, name: params[:name])
|
||||
!Chat::Channel.exists?(chatable: category, name: params.name)
|
||||
end
|
||||
|
||||
def create_channel(category:, params:)
|
||||
|
||||
@@ -64,8 +64,8 @@ module Chat
|
||||
|
||||
def fetch_target_users(guardian:, params:)
|
||||
::Chat::UsersFromUsernamesAndGroupsQuery.call(
|
||||
usernames: [*params[:target_usernames], guardian.user.username],
|
||||
groups: params[:target_groups],
|
||||
usernames: [*params.target_usernames, guardian.user.username],
|
||||
groups: params.target_groups,
|
||||
)
|
||||
end
|
||||
|
||||
@@ -79,9 +79,9 @@ module Chat
|
||||
|
||||
def fetch_or_create_direct_message(target_users:, params:)
|
||||
ids = target_users.map(&:id)
|
||||
is_group = ids.size > 2 || params[:name].present?
|
||||
is_group = ids.size > 2 || params.name.present?
|
||||
|
||||
if params[:upsert] || !is_group
|
||||
if params.upsert || !is_group
|
||||
::Chat::DirectMessage.for_user_ids(ids, group: is_group) ||
|
||||
::Chat::DirectMessage.create(user_ids: ids, group: is_group)
|
||||
else
|
||||
@@ -94,7 +94,7 @@ module Chat
|
||||
end
|
||||
|
||||
def set_optional_name(channel:, params:)
|
||||
channel.update!(params.slice(:name)) if params[:name]&.size&.positive?
|
||||
channel.update!(params.slice(:name)) if params.name&.size&.positive?
|
||||
end
|
||||
|
||||
def update_memberships(channel:, target_users:)
|
||||
|
||||
@@ -90,7 +90,7 @@ module Chat
|
||||
end
|
||||
|
||||
def fetch_channel(params:)
|
||||
Chat::Channel.find_by_id_or_slug(params[:chat_channel_id])
|
||||
Chat::Channel.find_by_id_or_slug(params.chat_channel_id)
|
||||
end
|
||||
|
||||
def enforce_membership(guardian:, channel:, options:)
|
||||
@@ -108,16 +108,16 @@ module Chat
|
||||
end
|
||||
|
||||
def fetch_reply(params:)
|
||||
Chat::Message.find_by(id: params[:in_reply_to_id])
|
||||
Chat::Message.find_by(id: params.in_reply_to_id)
|
||||
end
|
||||
|
||||
def ensure_reply_consistency(channel:, params:, reply:)
|
||||
return true if params[:in_reply_to_id].blank?
|
||||
return true if params.in_reply_to_id.blank?
|
||||
reply&.chat_channel == channel
|
||||
end
|
||||
|
||||
def fetch_thread(params:, reply:, channel:, options:)
|
||||
return Chat::Thread.find_by(id: params[:thread_id]) if params[:thread_id].present?
|
||||
return Chat::Thread.find_by(id: params.thread_id) if params.thread_id.present?
|
||||
return unless reply
|
||||
reply.thread ||
|
||||
reply.build_thread(
|
||||
@@ -129,7 +129,7 @@ module Chat
|
||||
end
|
||||
|
||||
def ensure_valid_thread_for_channel(thread:, params:, channel:)
|
||||
return true if params[:thread_id].blank?
|
||||
return true if params.thread_id.blank?
|
||||
thread&.channel == channel
|
||||
end
|
||||
|
||||
@@ -140,7 +140,7 @@ module Chat
|
||||
|
||||
def fetch_uploads(params:, guardian:)
|
||||
return [] if !SiteSetting.chat_allow_uploads
|
||||
guardian.user.uploads.where(id: params[:upload_ids])
|
||||
guardian.user.uploads.where(id: params.upload_ids)
|
||||
end
|
||||
|
||||
def instantiate_message(channel:, guardian:, params:, uploads:, thread:, reply:, options:)
|
||||
@@ -148,10 +148,10 @@ module Chat
|
||||
user: guardian.user,
|
||||
last_editor: guardian.user,
|
||||
in_reply_to: reply,
|
||||
message: params[:message],
|
||||
message: params.message,
|
||||
uploads: uploads,
|
||||
thread: thread,
|
||||
cooked: ::Chat::Message.cook(params[:message], user_id: guardian.user.id),
|
||||
cooked: ::Chat::Message.cook(params.message, user_id: guardian.user.id),
|
||||
cooked_version: ::Chat::Message::BAKED_VERSION,
|
||||
streaming: options.streaming,
|
||||
)
|
||||
@@ -206,7 +206,7 @@ module Chat
|
||||
end
|
||||
|
||||
def process(channel:, message_instance:, params:, thread:, options:)
|
||||
::Chat::Publisher.publish_new!(channel, message_instance, params[:staged_id])
|
||||
::Chat::Publisher.publish_new!(channel, message_instance, params.staged_id)
|
||||
|
||||
DiscourseEvent.trigger(
|
||||
:chat_message_created,
|
||||
@@ -217,20 +217,20 @@ module Chat
|
||||
thread: thread,
|
||||
thread_replies_count: thread&.replies_count_cache || 0,
|
||||
context: {
|
||||
post_ids: params[:context_post_ids],
|
||||
topic_id: params[:context_topic_id],
|
||||
post_ids: params.context_post_ids,
|
||||
topic_id: params.context_topic_id,
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
if options.process_inline
|
||||
Jobs::Chat::ProcessMessage.new.execute(
|
||||
{ chat_message_id: message_instance.id, staged_id: params[:staged_id] },
|
||||
{ chat_message_id: message_instance.id, staged_id: params.staged_id },
|
||||
)
|
||||
else
|
||||
Jobs.enqueue(
|
||||
Jobs::Chat::ProcessMessage,
|
||||
{ chat_message_id: message_instance.id, staged_id: params[:staged_id] },
|
||||
{ chat_message_id: message_instance.id, staged_id: params.staged_id },
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -40,14 +40,11 @@ module Chat
|
||||
private
|
||||
|
||||
def fetch_channel(params:)
|
||||
::Chat::Channel.find_by(id: params[:channel_id])
|
||||
::Chat::Channel.find_by(id: params.channel_id)
|
||||
end
|
||||
|
||||
def fetch_original_message(channel:, params:)
|
||||
::Chat::Message.find_by(
|
||||
id: params[:original_message_id],
|
||||
chat_channel_id: params[:channel_id],
|
||||
)
|
||||
::Chat::Message.find_by(id: params.original_message_id, chat_channel_id: params.channel_id)
|
||||
end
|
||||
|
||||
def can_view_channel(guardian:, channel:)
|
||||
@@ -64,7 +61,7 @@ module Chat
|
||||
end
|
||||
|
||||
context[:thread] = channel.threads.create(
|
||||
title: params[:title],
|
||||
title: params.title,
|
||||
original_message: original_message,
|
||||
original_message_user: original_message.user,
|
||||
)
|
||||
|
||||
@@ -48,8 +48,8 @@ module Chat
|
||||
|
||||
def fetch_message(params:)
|
||||
Chat::Message.includes(:chat_channel, :revisions).find_by(
|
||||
id: params[:message_id],
|
||||
chat_channel_id: params[:channel_id],
|
||||
id: params.message_id,
|
||||
chat_channel_id: params.channel_id,
|
||||
)
|
||||
end
|
||||
|
||||
@@ -58,7 +58,7 @@ module Chat
|
||||
guardian.can_flag_chat_message?(message) &&
|
||||
guardian.can_flag_message_as?(
|
||||
message,
|
||||
params[:flag_type_id],
|
||||
params.flag_type_id,
|
||||
params.slice(:queue_for_review, :take_action, :is_warning),
|
||||
)
|
||||
end
|
||||
@@ -67,7 +67,7 @@ module Chat
|
||||
Chat::ReviewQueue.new.flag_message(
|
||||
message,
|
||||
guardian,
|
||||
params[:flag_type_id],
|
||||
params.flag_type_id,
|
||||
**params.slice(:message, :is_warning, :take_action, :queue_for_review),
|
||||
)
|
||||
end
|
||||
|
||||
@@ -33,7 +33,7 @@ module Chat
|
||||
private
|
||||
|
||||
def fetch_channel(params:)
|
||||
::Chat::Channel.find_by(id: params[:channel_id])
|
||||
::Chat::Channel.find_by(id: params.channel_id)
|
||||
end
|
||||
|
||||
def can_view_channel(guardian:, channel:)
|
||||
@@ -45,7 +45,7 @@ module Chat
|
||||
.joins(:user_option)
|
||||
.where(user_options: { chat_enabled: true })
|
||||
.not_suspended
|
||||
.where(id: params[:user_ids])
|
||||
.where(id: params.user_ids)
|
||||
.limit(50)
|
||||
end
|
||||
|
||||
@@ -59,7 +59,7 @@ module Chat
|
||||
chat_channel_title: channel.title(invited_user),
|
||||
chat_channel_slug: channel.slug,
|
||||
invited_by_username: guardian.user.username,
|
||||
chat_message_id: params[:message_id],
|
||||
chat_message_id: params.message_id,
|
||||
}.compact
|
||||
|
||||
invited_user.notifications.create(
|
||||
|
||||
@@ -32,7 +32,7 @@ module Chat
|
||||
private
|
||||
|
||||
def fetch_channel(params:)
|
||||
Chat::Channel.find_by(id: params[:channel_id])
|
||||
Chat::Channel.find_by(id: params.channel_id)
|
||||
end
|
||||
|
||||
def leave(channel:, guardian:)
|
||||
|
||||
@@ -57,7 +57,7 @@ module Chat
|
||||
private
|
||||
|
||||
def fetch_channel(params:)
|
||||
::Chat::Channel.includes(:chatable).find_by(id: params[:channel_id])
|
||||
::Chat::Channel.includes(:chatable).find_by(id: params.channel_id)
|
||||
end
|
||||
|
||||
def fetch_membership(channel:, guardian:)
|
||||
@@ -73,10 +73,10 @@ module Chat
|
||||
end
|
||||
|
||||
def determine_target_message_id(params:, membership:)
|
||||
if params[:fetch_from_last_read]
|
||||
if params.fetch_from_last_read
|
||||
context[:target_message_id] = membership&.last_read_message_id
|
||||
else
|
||||
context[:target_message_id] = params[:target_message_id]
|
||||
context[:target_message_id] = params.target_message_id
|
||||
end
|
||||
end
|
||||
|
||||
@@ -103,9 +103,9 @@ module Chat
|
||||
guardian:,
|
||||
target_message_id:,
|
||||
include_thread_messages: !enabled_threads,
|
||||
page_size: params[:page_size] || Chat::MessagesQuery::MAX_PAGE_SIZE,
|
||||
direction: params[:direction],
|
||||
target_date: params[:target_date],
|
||||
page_size: params.page_size || Chat::MessagesQuery::MAX_PAGE_SIZE,
|
||||
direction: params.direction,
|
||||
target_date: params.target_date,
|
||||
)
|
||||
|
||||
context[:can_load_more_past] = messages_data[:can_load_more_past]
|
||||
|
||||
@@ -51,7 +51,7 @@ module Chat
|
||||
private
|
||||
|
||||
def fetch_thread(params:)
|
||||
::Chat::Thread.strict_loading.includes(channel: :chatable).find_by(id: params[:thread_id])
|
||||
::Chat::Thread.strict_loading.includes(channel: :chatable).find_by(id: params.thread_id)
|
||||
end
|
||||
|
||||
def can_view_thread(guardian:, thread:)
|
||||
@@ -63,14 +63,14 @@ module Chat
|
||||
end
|
||||
|
||||
def determine_target_message_id(params:, membership:, guardian:, thread:)
|
||||
if params[:fetch_from_last_message]
|
||||
if params.fetch_from_last_message
|
||||
context[:target_message_id] = thread.last_message_id
|
||||
elsif params[:fetch_from_first_message]
|
||||
elsif params.fetch_from_first_message
|
||||
context[:target_message_id] = thread.original_message_id
|
||||
elsif params[:fetch_from_last_read] || !params[:target_message_id]
|
||||
elsif params.fetch_from_last_read || !params.target_message_id
|
||||
context[:target_message_id] = membership&.last_read_message_id
|
||||
elsif params[:target_message_id]
|
||||
context[:target_message_id] = params[:target_message_id]
|
||||
elsif params.target_message_id
|
||||
context[:target_message_id] = params.target_message_id
|
||||
end
|
||||
end
|
||||
|
||||
@@ -79,7 +79,7 @@ module Chat
|
||||
target_message =
|
||||
::Chat::Message.with_deleted.find_by(
|
||||
id: context.target_message_id,
|
||||
thread_id: params[:thread_id],
|
||||
thread_id: params.thread_id,
|
||||
)
|
||||
return false if target_message.blank?
|
||||
return true if !target_message.trashed?
|
||||
@@ -93,11 +93,11 @@ module Chat
|
||||
guardian: guardian,
|
||||
target_message_id: context.target_message_id,
|
||||
thread_id: thread.id,
|
||||
page_size: params[:page_size] || Chat::MessagesQuery::MAX_PAGE_SIZE,
|
||||
direction: params[:direction],
|
||||
target_date: params[:target_date],
|
||||
page_size: params.page_size || Chat::MessagesQuery::MAX_PAGE_SIZE,
|
||||
direction: params.direction,
|
||||
target_date: params.target_date,
|
||||
include_target_message_id:
|
||||
params[:fetch_from_first_message] || params[:fetch_from_last_message],
|
||||
params.fetch_from_first_message || params.fetch_from_last_message,
|
||||
)
|
||||
|
||||
context[:can_load_more_past] = messages_data[:can_load_more_past]
|
||||
|
||||
@@ -37,9 +37,12 @@ module Chat
|
||||
only_integer: true,
|
||||
},
|
||||
allow_nil: true
|
||||
|
||||
after_validation do
|
||||
self.limit = (limit || THREADS_LIMIT).to_i.clamp(1, THREADS_LIMIT)
|
||||
self.offset = [offset || 0, 0].max
|
||||
end
|
||||
end
|
||||
step :set_limit
|
||||
step :set_offset
|
||||
model :channel
|
||||
policy :threading_enabled_for_channel
|
||||
policy :can_view_channel
|
||||
@@ -51,16 +54,8 @@ module Chat
|
||||
|
||||
private
|
||||
|
||||
def set_limit(params:)
|
||||
context[:limit] = (params[:limit] || THREADS_LIMIT).to_i.clamp(1, THREADS_LIMIT)
|
||||
end
|
||||
|
||||
def set_offset(params:)
|
||||
context[:offset] = [params[:offset] || 0, 0].max
|
||||
end
|
||||
|
||||
def fetch_channel(params:)
|
||||
::Chat::Channel.strict_loading.includes(:chatable).find_by(id: params[:channel_id])
|
||||
::Chat::Channel.strict_loading.includes(:chatable).find_by(id: params.channel_id)
|
||||
end
|
||||
|
||||
def threading_enabled_for_channel(channel:)
|
||||
@@ -71,7 +66,7 @@ module Chat
|
||||
guardian.can_preview_chat_channel?(channel)
|
||||
end
|
||||
|
||||
def fetch_threads(guardian:, channel:)
|
||||
def fetch_threads(guardian:, channel:, params:)
|
||||
::Chat::Thread
|
||||
.includes(
|
||||
:channel,
|
||||
@@ -114,8 +109,8 @@ module Chat
|
||||
.order(
|
||||
"CASE WHEN user_chat_thread_memberships.last_read_message_id IS NULL OR user_chat_thread_memberships.last_read_message_id < chat_threads.last_message_id THEN true ELSE false END DESC, last_message.created_at DESC",
|
||||
)
|
||||
.limit(context.limit)
|
||||
.offset(context.offset)
|
||||
.limit(params.limit)
|
||||
.offset(params.offset)
|
||||
end
|
||||
|
||||
def fetch_tracking(guardian:, threads:)
|
||||
@@ -137,8 +132,8 @@ module Chat
|
||||
context[:participants] = ::Chat::ThreadParticipantQuery.call(thread_ids: threads.map(&:id))
|
||||
end
|
||||
|
||||
def build_load_more_url(channel:)
|
||||
load_more_params = { offset: context.offset + context.limit }.to_query
|
||||
def build_load_more_url(channel:, params:)
|
||||
load_more_params = { offset: params.offset + params.limit }.to_query
|
||||
context[:load_more_url] = ::URI::HTTP.build(
|
||||
path: "/chat/api/channels/#{channel.id}/threads",
|
||||
query: load_more_params,
|
||||
|
||||
@@ -36,7 +36,7 @@ module Chat
|
||||
:channel,
|
||||
original_message_user: :user_status,
|
||||
original_message: :chat_webhook_event,
|
||||
).find_by(id: params[:thread_id], channel_id: params[:channel_id])
|
||||
).find_by(id: params.thread_id, channel_id: params.channel_id)
|
||||
end
|
||||
|
||||
def invalid_access(guardian:, thread:)
|
||||
|
||||
@@ -24,9 +24,12 @@ module Chat
|
||||
params do
|
||||
attribute :limit, :integer
|
||||
attribute :offset, :integer
|
||||
|
||||
after_validation do
|
||||
self.limit = (limit || THREADS_LIMIT).to_i.clamp(1, THREADS_LIMIT)
|
||||
self.offset = [offset || 0, 0].max
|
||||
end
|
||||
end
|
||||
step :set_limit
|
||||
step :set_offset
|
||||
model :threads
|
||||
step :fetch_tracking
|
||||
step :fetch_memberships
|
||||
@@ -35,15 +38,7 @@ module Chat
|
||||
|
||||
private
|
||||
|
||||
def set_limit(params:)
|
||||
context[:limit] = (params[:limit] || THREADS_LIMIT).to_i.clamp(1, THREADS_LIMIT)
|
||||
end
|
||||
|
||||
def set_offset(params:)
|
||||
context[:offset] = [params[:offset] || 0, 0].max
|
||||
end
|
||||
|
||||
def fetch_threads(guardian:)
|
||||
def fetch_threads(guardian:, params:)
|
||||
::Chat::Thread
|
||||
.includes(
|
||||
:channel,
|
||||
@@ -108,8 +103,8 @@ module Chat
|
||||
.order(
|
||||
"CASE WHEN user_chat_thread_memberships.last_read_message_id IS NULL OR user_chat_thread_memberships.last_read_message_id < chat_threads.last_message_id THEN true ELSE false END DESC, last_message.created_at DESC",
|
||||
)
|
||||
.limit(context.limit)
|
||||
.offset(context.offset)
|
||||
.limit(params.limit)
|
||||
.offset(params.offset)
|
||||
end
|
||||
|
||||
def fetch_tracking(guardian:, threads:)
|
||||
@@ -131,8 +126,8 @@ module Chat
|
||||
context[:participants] = ::Chat::ThreadParticipantQuery.call(thread_ids: threads.map(&:id))
|
||||
end
|
||||
|
||||
def build_load_more_url
|
||||
load_more_params = { limit: context.limit, offset: context.offset + context.limit }.to_query
|
||||
def build_load_more_url(params:)
|
||||
load_more_params = { limit: params.limit, offset: params.offset + params.limit }.to_query
|
||||
|
||||
context[:load_more_url] = ::URI::HTTP.build(
|
||||
path: "/chat/api/me/threads",
|
||||
|
||||
@@ -38,7 +38,7 @@ module Chat
|
||||
private
|
||||
|
||||
def fetch_thread(params:)
|
||||
Chat::Thread.find_by(id: params[:thread_id], channel_id: params[:channel_id])
|
||||
Chat::Thread.find_by(id: params.thread_id, channel_id: params.channel_id)
|
||||
end
|
||||
|
||||
def can_view_channel(guardian:, thread:)
|
||||
|
||||
@@ -40,7 +40,7 @@ module Chat
|
||||
Chat::Message
|
||||
.with_deleted
|
||||
.includes(chat_channel: :chatable)
|
||||
.find_by(id: params[:message_id], chat_channel_id: params[:channel_id])
|
||||
.find_by(id: params.message_id, chat_channel_id: params.channel_id)
|
||||
end
|
||||
|
||||
def invalid_access(guardian:, message:)
|
||||
|
||||
@@ -40,33 +40,33 @@ module Chat
|
||||
end
|
||||
|
||||
def fetch_users(guardian:, params:)
|
||||
return unless params[:include_users]
|
||||
return unless params.include_users
|
||||
return unless guardian.can_create_direct_message?
|
||||
search_users(params, guardian)
|
||||
end
|
||||
|
||||
def fetch_groups(guardian:, params:)
|
||||
return unless params[:include_groups]
|
||||
return unless params.include_groups
|
||||
return unless guardian.can_create_direct_message?
|
||||
search_groups(params, guardian)
|
||||
end
|
||||
|
||||
def fetch_category_channels(guardian:, params:)
|
||||
return unless params[:include_category_channels]
|
||||
return unless params.include_category_channels
|
||||
return unless SiteSetting.enable_public_channels
|
||||
search_category_channels(params, guardian)
|
||||
end
|
||||
|
||||
def fetch_direct_message_channels(guardian:, params:, users:)
|
||||
return unless params[:include_direct_message_channels]
|
||||
return unless params.include_direct_message_channels
|
||||
return unless guardian.can_create_direct_message?
|
||||
search_direct_message_channels(guardian, params, users)
|
||||
end
|
||||
|
||||
def search_users(params, guardian)
|
||||
user_search = ::UserSearch.new(params[:term], limit: SEARCH_RESULT_LIMIT)
|
||||
user_search = ::UserSearch.new(params.term, limit: SEARCH_RESULT_LIMIT)
|
||||
|
||||
if params[:term].blank?
|
||||
if params.term.blank?
|
||||
user_search = user_search.scoped_users
|
||||
else
|
||||
user_search = user_search.search
|
||||
@@ -78,11 +78,11 @@ module Chat
|
||||
user_search = user_search.real(allowed_bot_user_ids: allowed_bot_user_ids)
|
||||
user_search = user_search.includes(:user_option)
|
||||
|
||||
if params[:excluded_memberships_channel_id]
|
||||
if params.excluded_memberships_channel_id
|
||||
user_search =
|
||||
user_search.where(
|
||||
"NOT EXISTS (SELECT 1 FROM user_chat_channel_memberships WHERE user_id = users.id AND chat_channel_id = ?)",
|
||||
params[:excluded_memberships_channel_id],
|
||||
params.excluded_memberships_channel_id,
|
||||
)
|
||||
end
|
||||
|
||||
@@ -95,7 +95,7 @@ module Chat
|
||||
.includes(users: :user_option)
|
||||
.where(
|
||||
"groups.name ILIKE :term_like OR groups.full_name ILIKE :term_like",
|
||||
term_like: "%#{params[:term]}%",
|
||||
term_like: "%#{params.term}%",
|
||||
)
|
||||
.limit(SEARCH_RESULT_LIMIT)
|
||||
end
|
||||
@@ -104,7 +104,7 @@ module Chat
|
||||
::Chat::ChannelFetcher.secured_public_channel_search(
|
||||
guardian,
|
||||
status: :open,
|
||||
filter: params[:term],
|
||||
filter: params.term,
|
||||
filter_on_category_name: false,
|
||||
match_filter_on_starts_with: false,
|
||||
limit: SEARCH_RESULT_LIMIT,
|
||||
@@ -116,13 +116,13 @@ module Chat
|
||||
::Chat::ChannelFetcher.secured_direct_message_channels_search(
|
||||
guardian.user.id,
|
||||
guardian,
|
||||
filter: params[:term],
|
||||
filter: params.term,
|
||||
match_filter_on_starts_with: false,
|
||||
limit: SEARCH_RESULT_LIMIT,
|
||||
) || []
|
||||
|
||||
# skip 1:1s when search returns users
|
||||
if params[:include_users] && users.present?
|
||||
if params.include_users && users.present?
|
||||
channels.reject! do |channel|
|
||||
other_user_ids = channel.allowed_user_ids - [guardian.user.id]
|
||||
other_user_ids.size <= 1
|
||||
|
||||
@@ -29,7 +29,7 @@ module Chat
|
||||
private
|
||||
|
||||
def fetch_message(params:)
|
||||
::Chat::Message.find_by(id: params[:message_id])
|
||||
::Chat::Message.find_by(id: params.message_id)
|
||||
end
|
||||
|
||||
def enforce_membership(guardian:, message:)
|
||||
|
||||
@@ -18,7 +18,12 @@ module Chat
|
||||
|
||||
DELETE_CHANNEL_LOG_KEY = "chat_channel_delete"
|
||||
|
||||
model :channel, :fetch_channel
|
||||
params do
|
||||
attribute :channel_id, :integer
|
||||
|
||||
validates :channel_id, presence: true
|
||||
end
|
||||
model :channel
|
||||
policy :invalid_access
|
||||
transaction do
|
||||
step :prevents_slug_collision
|
||||
@@ -30,7 +35,7 @@ module Chat
|
||||
private
|
||||
|
||||
def fetch_channel(params:)
|
||||
Chat::Channel.find_by(id: params[:channel_id])
|
||||
Chat::Channel.find_by(id: params.channel_id)
|
||||
end
|
||||
|
||||
def invalid_access(guardian:, channel:)
|
||||
|
||||
@@ -40,8 +40,8 @@ module Chat
|
||||
|
||||
def fetch_message(params:)
|
||||
Chat::Message.includes(chat_channel: :chatable).find_by(
|
||||
id: params[:message_id],
|
||||
chat_channel_id: params[:channel_id],
|
||||
id: params.message_id,
|
||||
chat_channel_id: params.channel_id,
|
||||
)
|
||||
end
|
||||
|
||||
|
||||
@@ -40,8 +40,8 @@ module Chat
|
||||
|
||||
def fetch_messages(params:)
|
||||
Chat::Message.includes(chat_channel: :chatable).where(
|
||||
id: params[:message_ids],
|
||||
chat_channel_id: params[:channel_id],
|
||||
id: params.message_ids,
|
||||
chat_channel_id: params.channel_id,
|
||||
)
|
||||
end
|
||||
|
||||
@@ -90,7 +90,7 @@ module Chat
|
||||
messages.each do |message|
|
||||
DiscourseEvent.trigger(:chat_message_trashed, message, message.chat_channel, guardian.user)
|
||||
end
|
||||
Chat::Publisher.publish_bulk_delete!(messages.first.chat_channel, params[:message_ids])
|
||||
Chat::Publisher.publish_bulk_delete!(messages.first.chat_channel, params.message_ids)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -31,7 +31,7 @@ module Chat
|
||||
private
|
||||
|
||||
def fetch_channel(params:)
|
||||
Chat::Channel.find_by(id: params[:channel_id])
|
||||
Chat::Channel.find_by(id: params.channel_id)
|
||||
end
|
||||
|
||||
def unfollow(channel:, guardian:)
|
||||
|
||||
@@ -16,28 +16,30 @@ module Chat
|
||||
# @option params [String] :status
|
||||
# @return [Service::Base::Context]
|
||||
|
||||
model :channel
|
||||
params do
|
||||
attribute :channel_id, :integer
|
||||
attribute :status, :string
|
||||
|
||||
validates :channel_id, presence: true
|
||||
validates :status, inclusion: { in: Chat::Channel.editable_statuses.keys }
|
||||
end
|
||||
model :channel
|
||||
policy :check_channel_permission
|
||||
step :change_status
|
||||
|
||||
private
|
||||
|
||||
def fetch_channel(params:)
|
||||
Chat::Channel.find_by(id: params[:channel_id])
|
||||
Chat::Channel.find_by(id: params.channel_id)
|
||||
end
|
||||
|
||||
def check_channel_permission(guardian:, channel:, params:)
|
||||
guardian.can_preview_chat_channel?(channel) &&
|
||||
guardian.can_change_channel_status?(channel, params[:status].to_sym)
|
||||
guardian.can_change_channel_status?(channel, params.status.to_sym)
|
||||
end
|
||||
|
||||
def change_status(channel:, params:, guardian:)
|
||||
channel.public_send("#{params[:status]}!", guardian.user)
|
||||
channel.public_send("#{params.status}!", guardian.user)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -79,7 +79,7 @@ module Chat
|
||||
chatable: [:topic_only_relative_url, direct_message_users: [user: :user_option]],
|
||||
],
|
||||
user: :user_status,
|
||||
).find_by(id: params[:message_id])
|
||||
).find_by(id: params.message_id)
|
||||
end
|
||||
|
||||
def fetch_membership(guardian:, message:)
|
||||
@@ -88,7 +88,7 @@ module Chat
|
||||
|
||||
def fetch_uploads(params:, guardian:)
|
||||
return if !SiteSetting.chat_allow_uploads
|
||||
guardian.user.uploads.where(id: params[:upload_ids])
|
||||
guardian.user.uploads.where(id: params.upload_ids)
|
||||
end
|
||||
|
||||
def can_modify_channel_message(guardian:, message:)
|
||||
@@ -100,11 +100,11 @@ module Chat
|
||||
end
|
||||
|
||||
def modify_message(params:, message:, guardian:, uploads:)
|
||||
message.message = params[:message]
|
||||
message.message = params.message
|
||||
message.last_editor_id = guardian.user.id
|
||||
message.cook
|
||||
|
||||
return if uploads&.size != params[:upload_ids].to_a.size
|
||||
return if uploads&.size != params.upload_ids.to_a.size
|
||||
|
||||
new_upload_ids = uploads.map(&:id)
|
||||
existing_upload_ids = message.upload_ids
|
||||
|
||||
@@ -36,7 +36,7 @@ module Chat
|
||||
private
|
||||
|
||||
def fetch_thread(params:)
|
||||
Chat::Thread.find_by(id: params[:thread_id])
|
||||
Chat::Thread.find_by(id: params.thread_id)
|
||||
end
|
||||
|
||||
def can_view_channel(guardian:, thread:)
|
||||
|
||||
@@ -45,7 +45,7 @@ module Chat
|
||||
private
|
||||
|
||||
def fetch_thread(params:)
|
||||
Chat::Thread.find_by(id: params[:thread_id], channel_id: params[:channel_id])
|
||||
Chat::Thread.find_by(id: params.thread_id, channel_id: params.channel_id)
|
||||
end
|
||||
|
||||
def can_view_channel(guardian:, thread:)
|
||||
@@ -62,7 +62,7 @@ module Chat
|
||||
membership = thread.add(guardian.user)
|
||||
membership.update!(last_read_message_id: thread.last_message_id)
|
||||
end
|
||||
membership.update!(notification_level: params[:notification_level])
|
||||
membership.update!(notification_level: params.notification_level)
|
||||
context[:membership] = membership
|
||||
end
|
||||
end
|
||||
|
||||
@@ -36,7 +36,7 @@ module Chat
|
||||
private
|
||||
|
||||
def fetch_channel(params:)
|
||||
::Chat::Channel.find_by(id: params[:channel_id])
|
||||
::Chat::Channel.find_by(id: params.channel_id)
|
||||
end
|
||||
|
||||
def fetch_membership(guardian:, channel:)
|
||||
@@ -48,7 +48,7 @@ module Chat
|
||||
end
|
||||
|
||||
def fetch_message(channel:, params:)
|
||||
::Chat::Message.with_deleted.find_by(chat_channel_id: channel.id, id: params[:message_id])
|
||||
::Chat::Message.with_deleted.find_by(chat_channel_id: channel.id, id: params.message_id)
|
||||
end
|
||||
|
||||
def ensure_message_id_recency(message:, membership:)
|
||||
|
||||
@@ -37,7 +37,7 @@ module Chat
|
||||
private
|
||||
|
||||
def fetch_thread(params:)
|
||||
::Chat::Thread.find_by(id: params[:thread_id], channel_id: params[:channel_id])
|
||||
::Chat::Thread.find_by(id: params.thread_id, channel_id: params.channel_id)
|
||||
end
|
||||
|
||||
def invalid_access(guardian:, thread:)
|
||||
@@ -50,7 +50,7 @@ module Chat
|
||||
|
||||
def fetch_message(params:, thread:)
|
||||
::Chat::Message.with_deleted.find_by(
|
||||
id: params[:message_id] || thread.last_message_id,
|
||||
id: params.message_id || thread.last_message_id,
|
||||
thread: thread,
|
||||
chat_channel: thread.channel,
|
||||
)
|
||||
|
||||
@@ -39,7 +39,7 @@ module Chat
|
||||
private
|
||||
|
||||
def fetch_channel(params:)
|
||||
Chat::Channel.find_by(id: params[:channel_id])
|
||||
Chat::Channel.find_by(id: params.channel_id)
|
||||
end
|
||||
|
||||
def can_upsert_draft(guardian:, channel:)
|
||||
@@ -47,26 +47,26 @@ module Chat
|
||||
end
|
||||
|
||||
def check_thread_exists(params:, channel:)
|
||||
return if params[:thread_id].blank?
|
||||
fail!("Thread not found") if !channel.threads.exists?(id: params[:thread_id])
|
||||
return if params.thread_id.blank?
|
||||
fail!("Thread not found") if !channel.threads.exists?(id: params.thread_id)
|
||||
end
|
||||
|
||||
def upsert_draft(params:, guardian:)
|
||||
if params[:data].present?
|
||||
if params.data.present?
|
||||
draft =
|
||||
Chat::Draft.find_or_initialize_by(
|
||||
user_id: guardian.user.id,
|
||||
chat_channel_id: params[:channel_id],
|
||||
thread_id: params[:thread_id],
|
||||
chat_channel_id: params.channel_id,
|
||||
thread_id: params.thread_id,
|
||||
)
|
||||
draft.data = params[:data]
|
||||
draft.data = params.data
|
||||
draft.save!
|
||||
else
|
||||
# when data is empty, we destroy the draft
|
||||
Chat::Draft.where(
|
||||
user: guardian.user,
|
||||
chat_channel_id: params[:channel_id],
|
||||
thread_id: params[:thread_id],
|
||||
chat_channel_id: params.channel_id,
|
||||
thread_id: params.thread_id,
|
||||
).destroy_all
|
||||
end
|
||||
end
|
||||
|
||||
@@ -30,7 +30,7 @@ RSpec.describe ::Chat::LookupChannelThreads do
|
||||
let(:limit) { nil }
|
||||
|
||||
it "defaults to a max value" do
|
||||
expect(result.limit).to eq(described_class::THREADS_LIMIT)
|
||||
expect(result.params.limit).to eq(described_class::THREADS_LIMIT)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -44,7 +44,7 @@ RSpec.describe ::Chat::LookupChannelThreads do
|
||||
let(:limit) { 0 }
|
||||
|
||||
it "defaults to a max value" do
|
||||
expect(result.limit).to eq(1)
|
||||
expect(result.params.limit).to eq(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -57,7 +57,7 @@ RSpec.describe ::Chat::LookupChannelThreads do
|
||||
let(:offset) { nil }
|
||||
|
||||
it "defaults to zero" do
|
||||
expect(result.offset).to eq(0)
|
||||
expect(result.params.offset).to eq(0)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -65,7 +65,7 @@ RSpec.describe ::Chat::LookupChannelThreads do
|
||||
let(:offset) { -99 }
|
||||
|
||||
it "defaults to a min value" do
|
||||
expect(result.offset).to eq(0)
|
||||
expect(result.params.offset).to eq(0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -47,10 +47,10 @@ RSpec.describe Chat::SearchChatable do
|
||||
|
||||
it "cleans the term" do
|
||||
params[:term] = "#bob"
|
||||
expect(result.params[:term]).to eq("bob")
|
||||
expect(result.params.term).to eq("bob")
|
||||
|
||||
params[:term] = "@bob"
|
||||
expect(result.params[:term]).to eq("bob")
|
||||
expect(result.params.term).to eq("bob")
|
||||
end
|
||||
|
||||
it "fetches user memberships" do
|
||||
|
||||
@@ -1,30 +1,40 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
RSpec.describe Chat::TrashChannel do
|
||||
subject(:result) { described_class.call(params:, **dependencies) }
|
||||
|
||||
fab!(:current_user) { Fabricate(:admin) }
|
||||
fab!(:channel) { Fabricate(:chat_channel) }
|
||||
|
||||
let(:params) { { channel_id: } }
|
||||
let(:dependencies) { { guardian: } }
|
||||
let(:guardian) { Guardian.new(current_user) }
|
||||
let(:channel_id) { channel.id }
|
||||
|
||||
context "when channel_id is not provided" do
|
||||
let(:channel_id) { nil }
|
||||
|
||||
it { is_expected.to fail_to_find_a_model(:channel) }
|
||||
describe described_class::Contract, type: :model do
|
||||
it { is_expected.to validate_presence_of(:channel_id) }
|
||||
end
|
||||
|
||||
context "when channel_id is provided" do
|
||||
describe ".call" do
|
||||
subject(:result) { described_class.call(params:, **dependencies) }
|
||||
|
||||
fab!(:current_user) { Fabricate(:admin) }
|
||||
fab!(:channel) { Fabricate(:chat_channel) }
|
||||
|
||||
let(:params) { { channel_id: } }
|
||||
let(:dependencies) { { guardian: } }
|
||||
let(:guardian) { Guardian.new(current_user) }
|
||||
let(:channel_id) { channel.id }
|
||||
|
||||
context "when data is invalid" do
|
||||
let(:channel_id) { nil }
|
||||
|
||||
it { is_expected.to fail_a_contract }
|
||||
end
|
||||
|
||||
context "when model is not found" do
|
||||
let(:channel_id) { 0 }
|
||||
|
||||
it { is_expected.to fail_to_find_a_model(:channel) }
|
||||
end
|
||||
|
||||
context "when user is not allowed to perform the action" do
|
||||
let!(:current_user) { Fabricate(:user) }
|
||||
|
||||
it { is_expected.to fail_a_policy(:invalid_access) }
|
||||
end
|
||||
|
||||
context "when user is allowed to perform the action" do
|
||||
context "when everything’s ok" do
|
||||
it { is_expected.to run_successfully }
|
||||
|
||||
it "trashes the channel" do
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
RSpec.describe(Chat::UpdateChannelStatus) do
|
||||
describe described_class::Contract, type: :model do
|
||||
it { is_expected.to validate_presence_of(:channel_id) }
|
||||
it do
|
||||
is_expected.to validate_inclusion_of(:status).in_array(Chat::Channel.editable_statuses.keys)
|
||||
end
|
||||
@@ -19,8 +20,8 @@ RSpec.describe(Chat::UpdateChannelStatus) do
|
||||
let(:status) { "open" }
|
||||
let(:channel_id) { channel.id }
|
||||
|
||||
context "when no channel_id is given" do
|
||||
let(:channel_id) { nil }
|
||||
context "when model is not found" do
|
||||
let(:channel_id) { 0 }
|
||||
|
||||
it { is_expected.to fail_to_find_a_model(:channel) }
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user