discourse/plugins/chat/config/routes.rb
Joffrey JAFFEUX c8fff19b99
DEV: removes the notion of staged thread (#23612)
While very fast and powerful staged threads forces a lot of gymnastic and edge cases. This patch adds a new service `Chat::CreateThread` and uses it to create a thread unconditionally when a user replies to a message in a threading enabled channel. If the user actually doesn’t send a message we will have a thread with no messages which has no important impact and could even be periodically cleaned if necessary.

Note that this commit also moves message actions to .gjs as it was the original goal of this PR to correctly check for staged thread to show the menu or not.
2023-09-15 18:09:45 +02:00

110 lines
4.9 KiB
Ruby

# frozen_string_literal: true
Chat::Engine.routes.draw do
namespace :api, defaults: { format: :json } do
get "/chatables" => "chatables#index"
get "/channels" => "channels#index"
get "/channels/me" => "current_user_channels#index"
post "/channels" => "channels#create"
put "/channels/read/" => "reads#update_all"
put "/channels/:channel_id/read/:message_id" => "reads#update"
delete "/channels/:channel_id" => "channels#destroy"
put "/channels/:channel_id" => "channels#update"
get "/channels/:channel_id" => "channels#show"
put "/channels/:channel_id/status" => "channels_status#update"
get "/channels/:channel_id/messages" => "channel_messages#index"
post "/channels/:channel_id/messages/moves" => "channels_messages_moves#create"
post "/channels/:channel_id/archives" => "channels_archives#create"
get "/channels/:channel_id/memberships" => "channels_memberships#index"
delete "/channels/:channel_id/memberships/me" => "channels_current_user_membership#destroy"
post "/channels/:channel_id/memberships/me" => "channels_current_user_membership#create"
put "/channels/:channel_id/notifications-settings/me" =>
"channels_current_user_notifications_settings#update"
# Category chatables controller hints. Only used by staff members, we don't want to leak category permissions.
get "/category-chatables/:id/permissions" => "category_chatables#permissions",
:format => :json,
:constraints => StaffConstraint.new
# Hints for JIT warnings.
get "/mentions/groups" => "hints#check_group_mentions", :format => :json
get "/channels/:channel_id/threads" => "channel_threads#index"
post "/channels/:channel_id/threads" => "channel_threads#create"
put "/channels/:channel_id/threads/:thread_id" => "channel_threads#update"
get "/channels/:channel_id/threads/:thread_id" => "channel_threads#show"
get "/channels/:channel_id/threads/:thread_id/messages" => "channel_thread_messages#index"
put "/channels/:channel_id/threads/:thread_id/read" => "thread_reads#update"
put "/channels/:channel_id/threads/:thread_id/notifications-settings/me" =>
"channel_threads_current_user_notifications_settings#update"
# TODO (martin) Remove this when we refactor the DM channel creation to happen
# via message creation in a different API controller.
post "/direct-message-channels" => "direct_messages#create"
put "/channels/:channel_id/messages/:message_id/restore" => "channel_messages#restore"
delete "/channels/:channel_id/messages/:message_id" => "channel_messages#destroy"
get "/channels/:channel_id/summarize" => "summaries#get_summary"
end
namespace :admin, defaults: { format: :json, constraints: StaffConstraint.new } do
post "export/messages" => "export#export_messages"
end
# direct_messages_controller routes
get "/direct_messages" => "direct_messages#index"
# incoming_webhooks_controller routes
post "/hooks/:key" => "incoming_webhooks#create_message"
# incoming_webhooks_controller routes
post "/hooks/:key/slack" => "incoming_webhooks#create_message_slack_compatible"
# chat_controller routes
get "/" => "chat#respond"
get "/browse" => "chat#respond"
get "/browse/all" => "chat#respond"
get "/browse/closed" => "chat#respond"
get "/browse/open" => "chat#respond"
get "/browse/archived" => "chat#respond"
post "/enable" => "chat#enable_chat"
post "/disable" => "chat#disable_chat"
post "/dismiss-retention-reminder" => "chat#dismiss_retention_reminder"
get "/message/:message_id" => "chat#message_link"
put ":chat_channel_id/edit/:message_id" => "chat#edit_message"
put ":chat_channel_id/react/:message_id" => "chat#react"
put "/:chat_channel_id/:message_id/rebake" => "chat#rebake"
post "/:chat_channel_id/:message_id/flag" => "chat#flag"
post "/:chat_channel_id/quote" => "chat#quote_messages"
put "/user_chat_enabled/:user_id" => "chat#set_user_chat_status"
put "/:chat_channel_id/invite" => "chat#invite_users"
post "/drafts" => "chat#set_draft"
post "/:chat_channel_id" => "api/channel_messages#create"
put "/flag" => "chat#flag"
get "/emojis" => "emojis#index"
base_c_route = "/c/:channel_title/:channel_id"
get base_c_route => "chat#respond", :as => "channel"
get "#{base_c_route}/:message_id" => "chat#respond"
%w[info info/about info/members info/settings].each do |route|
get "#{base_c_route}/#{route}" => "chat#respond"
end
# /channel -> /c redirects
get "/channel/:channel_id", to: redirect("/chat/c/-/%{channel_id}")
get "#{base_c_route}/t/:thread_id" => "chat#respond"
get "#{base_c_route}/t/:thread_id/:message_id" => "chat#respond"
base_channel_route = "/channel/:channel_id/:channel_title"
redirect_base = "/chat/c/%{channel_title}/%{channel_id}"
get base_channel_route, to: redirect(redirect_base)
%w[info info/about info/members info/settings].each do |route|
get "#{base_channel_route}/#{route}", to: redirect("#{redirect_base}/#{route}")
end
end