Module: BetterService::Concerns::Serviceable::RepositoryAware

Extended by:
ActiveSupport::Concern
Defined in:
lib/better_service/concerns/serviceable/repository_aware.rb

Overview

RepositoryAware - DSL for declaring repository dependencies in services

This concern provides a clean way to declare repository dependencies in service classes, promoting the repository pattern and enforcing separation between business logic and data access.

Examples:

Basic usage

class Products::CreateService < Products::BaseService
  include BetterService::Concerns::Serviceable::RepositoryAware

  performed_action :created
  with_transaction true

  repository :product

  process_with do |data|
    { resource: product_repository.create!(params) }
  end
end

With custom class name

class Bookings::AcceptService < Bookings::BaseService
  include BetterService::Concerns::Serviceable::RepositoryAware

  repository :booking, class_name: "Bookings::BookingRepository"
  repository :user, class_name: "Users::UserRepository", as: :user_repo

  search_with do
    { booking: booking_repository.search({ id_eq: params[:id] }, limit: 1) }
  end
end

Multiple repositories shorthand

class Dashboard::IndexService < Dashboard::BaseService
  include BetterService::Concerns::Serviceable::RepositoryAware

  performed_action :listed

  repositories :user, :booking, :payment
end