Class: DbdocEngine::SchemaRbImportService

Inherits:
Object
  • Object
show all
Defined in:
app/services/dbdoc_engine/schema_rb_import_service.rb

Constant Summary collapse

DEFAULT_GROUP_NAME =
"Imported Schema".freeze
DEFAULT_GROUP_COLOR =
"#6c757d".freeze
SKIP_TABLES =
%w[
  ar_internal_metadata
  schema_migrations
  active_storage_blobs
  active_storage_attachments
  active_storage_variant_records
  action_text_rich_texts
  solid_queue_blocked_executions
  solid_queue_claimed_executions
  solid_queue_failed_executions
  solid_queue_jobs
  solid_queue_pauses
  solid_queue_processes
  solid_queue_ready_executions
  solid_queue_recurring_executions
  solid_queue_recurring_tasks
  solid_queue_scheduled_executions
  solid_queue_semaphores
  solid_cache_entries
  solid_cable_messages
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(schema_content, imported_by:) ⇒ SchemaRbImportService

Returns a new instance of SchemaRbImportService.



27
28
29
30
# File 'app/services/dbdoc_engine/schema_rb_import_service.rb', line 27

def initialize(schema_content, imported_by:)
  @schema_content = schema_content
  @imported_by = imported_by
end

Instance Method Details

#import! ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'app/services/dbdoc_engine/schema_rb_import_service.rb', line 32

def import!
  parsed = SchemaRbParserService.new(@schema_content).parse
  tables_data = parsed[:tables].reject { |t| SKIP_TABLES.include?(t[:table_name]) }

  raise "No tables found in the schema file." if tables_data.empty?

  total_columns = 0

  ActiveRecord::Base.transaction do
    clear_existing_data

    suppress_changelog_callbacks do
      group = create_default_group
      total_columns = bulk_import_tables_and_columns(tables_data, group)
    end

    log_import_summary(tables_data.size, total_columns)
  end

  { status: "ok", tables_count: tables_data.size }
rescue => e
  { status: "error", error: e.message }
end