JSON-APIリソースをサービス オブジェクトに適用するのに苦労しています。これが私のラフドラフトです。
class V1::AccountCreateController < JSONAPI::ResourceController
def create
# Form object for the parameter validation
form = AccountCreateCustomerForm.new customer_params
form.validate!
# Use my service object instead of JR's 1:1 mapping to the ActiveRecord model to create it.
account = AccountCreateService.call(form.attributes)
if account.errors.blank?
# selialize the result and rednder
serializer = JSONAPI::ResourceSerializer.new(resource_klass, ...)
render json: serializer.serialize_to_hash(resource_klass.new(account)), status: 201
else
render render json: 'error message', status: 422
end
end
end
これは実際に機能します。しかし、私はそれがきれいだとは思わない。
JSON-API リソースはサービス オブジェクトで使用することは想定されていないと思います。
ローカルデータベースだけでなく、データ処理のためにサードパーティ API (Stripe) を投稿する必要があります。これにより、堅牢でテスト可能な支払いシステムの開発が容易になりました。(コールバックはありません。)
しかし、JSON-API ではサービス オブジェクトを扱うのはかなり困難です。(Create/Update/Destroy アクションの場合)
これを回避するためのアイデアはありますか?
いくつかの例も投稿していただけると本当に助かります。
PSフォームオブジェクトにはドライバリデーションを使用しています。