Class: VendorsService::GoogleReserve::DescriptionGeneratorService

Inherits:
ApplicationService show all
Includes:
ElasticAPM::SpanHelpers
Defined in:
app/services/vendors_service/google_reserve/description_generator_service.rb

Overview

Service to generate AI-powered package descriptions for Google Reserve packages.

Takes a restaurant package ID as input and generates a comprehensive description using AI based on package details, restaurant info, benefits, and booking rules. The service only generates and returns descriptions - database updates are handled by the caller.

Restaurant description logic matches the API serializer format but returns plain text without HTML tags for AI processing.

Examples:

Direct usage

result = VendorsService::GoogleReserve::DescriptionGeneratorService.new(restaurant_package_id).call
if result.success?
  puts result.data[:description]
  puts result.message # "AI description generated successfully"
else
  puts result.errors.join(", ")   # Error messages array
  puts result.message # "Failed to generate AI description"
end

Usage in PackageService

ai_result = VendorsService::GoogleReserve::DescriptionGeneratorService.new(restaurant_package_id).call
if ai_result.success?
  ai_generated_description = ai_result.data&.dig(:description)
  # Handle the generated description
else
  error_details = ai_result.errors&.join(', ') || ai_result.message
  raise error_details.to_s
end

Controller usage

def generate_ai_description
  result = VendorsService::GoogleReserve::DescriptionGeneratorService.new(params[:restaurant_package_id]).call

  if result.success?
    render json: { description: result.data[:description], message: result.message }
  else
    render json: { errors: result.errors, message: result.message }, status: :unprocessable_entity
  end
end

Instance Attribute Summary collapse

Attributes inherited from ApplicationService

#object

Instance Method Summary collapse

Methods inherited from ApplicationService

#execute, #execute!

Constructor Details

#initialize(restaurant_package_id) ⇒ ServiceResult

Generates AI description for a Google Reserve package.

Parameters:

  • restaurant_package_id (Integer)

    The restaurant package ID



53
54
55
56
57
# File 'app/services/vendors_service/google_reserve/description_generator_service.rb', line 53

def initialize(restaurant_package_id)
  super()
  @restaurant_package_id = restaurant_package_id
  @openrouter_client = OpenrouterClient.new
end

Instance Attribute Details

#openrouter_clientObject (readonly)

Returns the value of attribute openrouter_client.



46
47
48
# File 'app/services/vendors_service/google_reserve/description_generator_service.rb', line 46

def openrouter_client
  @openrouter_client
end

#packageObject (readonly)

Returns the value of attribute package.



46
47
48
# File 'app/services/vendors_service/google_reserve/description_generator_service.rb', line 46

def package
  @package
end

#restaurantObject (readonly)

Returns the value of attribute restaurant.



46
47
48
# File 'app/services/vendors_service/google_reserve/description_generator_service.rb', line 46

def restaurant
  @restaurant
end

#restaurant_packageObject (readonly)

Returns the value of attribute restaurant_package.



46
47
48
# File 'app/services/vendors_service/google_reserve/description_generator_service.rb', line 46

def restaurant_package
  @restaurant_package
end

#restaurant_package_idObject (readonly)

Returns the value of attribute restaurant_package_id.



46
47
48
# File 'app/services/vendors_service/google_reserve/description_generator_service.rb', line 46

def restaurant_package_id
  @restaurant_package_id
end

Instance Method Details

#callObject



59
60
61
62
63
64
# File 'app/services/vendors_service/google_reserve/description_generator_service.rb', line 59

def call
  load_data
  generate_description
rescue StandardError => e
  handle_error(e)
end