DEV: Drop WithServiceHelper

This patch removes the `with_service` helper from the code base.
Instead, we can pass a block with actions directly to the `.call` method
of a service.

This simplifies how to use services:
- use `.call` without a block to run the service and get its result
  object.
- use `.call` with a block of actions to run the service and execute
  arbitrary code depending on the service outcome.

It also means a service is now “self-contained” and can be used anywhere
without having to include a helper or whatever.
This commit is contained in:
Loïc Guitaut
2024-09-03 18:30:22 +02:00
committed by Loïc Guitaut
parent c76ff5c994
commit e94707acdf
39 changed files with 99 additions and 167 deletions

View File

@ -119,7 +119,7 @@ class Admin::UsersController < Admin::StaffController
end
def suspend
with_service(SuspendUser, user: @user) do
SuspendUser.call(user: @user) do
on_success do
render_json_dump(
suspension: {
@ -131,9 +131,7 @@ class Admin::UsersController < Admin::StaffController
},
)
end
on_failed_policy(:can_suspend) { raise Discourse::InvalidAccess.new }
on_failed_policy(:not_suspended_already) do
suspend_record = @user.suspend_record
message =
@ -149,7 +147,6 @@ class Admin::UsersController < Admin::StaffController
)
render json: failed_json.merge(message: message), status: 409
end
on_failed_contract do |contract|
render json: failed_json.merge(errors: contract.errors.full_messages), status: 400
end
@ -328,7 +325,7 @@ class Admin::UsersController < Admin::StaffController
end
def silence
with_service(SilenceUser, user: @user) do
SilenceUser.call(user: @user) do
on_success do
render_json_dump(
silence: {
@ -340,9 +337,7 @@ class Admin::UsersController < Admin::StaffController
},
)
end
on_failed_policy(:can_silence) { raise Discourse::InvalidAccess.new }
on_failed_policy(:not_silenced_already) do
silenced_record = @user.silenced_record
message =
@ -358,7 +353,6 @@ class Admin::UsersController < Admin::StaffController
)
render json: failed_json.merge(message: message), status: 409
end
on_failed_contract do |contract|
render json: failed_json.merge(errors: contract.errors.full_messages), status: 400
end