lib/wolf_core/infrastructure/fkm_operations.rb



module WolfCore
  module FkmOperations
    include WolfCore::HttpOperations
    include WolfCore::LoggingUtils

    def get_foreign_key_destination_id(tenant:, source:, source_id:, destination:)
      foreign_keys = get_foreign_keys(tenant: tenant, source: source, source_id: source_id)
      foreign_key = foreign_keys.find { |fk| fk['destination'] == destination }
      foreign_key&.dig('destination_id')
    end

    def get_foreign_keys(tenant:, source:, source_id:)
      response = http_get(
        url: "#{ENV['FKM_URL']}/Prod/lookup?tenant=#{tenant}&source=#{source}&source_id=#{source_id}"
      )
      response = parse_http_response(response)
      log_object 'get_foreign_keys response is'
      log_object response
      validate_http_response(response: response, message: 'Error getting foreign keys')
      response.body
    end

    def get_foreign_keys_by_destination(tenant:, destination:, destination_id:)
      response = http_get(
        url: "#{ENV['FKM_URL']}/Prod/lookup?tenant=#{tenant}&destination=#{destination}&destination_id=#{destination_id}"
      )
      response = parse_http_response(response)
      log_object 'get_foreign_keys_by_destination response is'
      log_object response
      validate_http_response(response: response, message: 'Error getting foreign keys by destination id')
      response.body
    end

    def create_foreign_key(tenant:, source:, source_id:, destination:, destination_id:)
      response = http_post(
        url: "#{ENV['FKM_URL']}/Prod/create",
        body: {
          tenant: tenant,
          source: source,
          source_id: source_id,
          destination: destination,
          destination_id: destination_id
        }
      )
      response = parse_http_response(response)
      log_object 'create_foreign_key response is'
      log_object response
      validate_http_response(response: response, message: 'Error creating foreign key')
      parse_http_response(response).body
    end

    # def find_or_create_foreign_key(tenant:, source:, source_id:, destination:, destination_id:)
    #   destination_id = get_foreign_key_destination_id(
    #     tenant: tenant, source: source, source_id: source_id,
    #     destination: destination
    #   )
    #   return Result.success(data: { operation: :find }) if destination_id.present?
    #   create_foreign_key(
    #     tenant: tenant, source: source, source_id: source_id,
    #     destination: destination, destination_id: destination_id
    #   )
    #   Result.success(data: { operation: :create })
    # end
  end
end