Fact.Genesis.TheCreator (Fact v0.3.1)

View Source

The divine module that brings a Fact database into existence.

Fact.Genesis.TheCreator is responsible for taking a DatabaseCreated.V1 event and actually creating the on-disk database via let_there_be_light/1.

Responsibilities:

  • Initialize the storage paths for records and indices
  • Create necessary directories and a .gitignore file
  • Write the genesis event to the record file
  • Append the genesis event to the ledger file
  • Generate event IDs and populate the event schema

Summary

Functions

let_there_be_light(event)

(since 0.1.0)
@spec let_there_be_light(%Fact.Genesis.Event.DatabaseCreated.V1{
  database_id: term(),
  database_name: term(),
  elixir_version: term(),
  erts_version: term(),
  event_id: term(),
  event_schema: term(),
  fact_version: term(),
  index_checkpoint_file_decoder: term(),
  index_checkpoint_file_encoder: term(),
  index_checkpoint_file_name: term(),
  index_checkpoint_file_reader: term(),
  index_checkpoint_file_writer: term(),
  index_file_decoder: term(),
  index_file_encoder: term(),
  index_file_name: term(),
  index_file_reader: term(),
  index_file_writer: term(),
  ledger_file_decoder: term(),
  ledger_file_encoder: term(),
  ledger_file_name: term(),
  ledger_file_reader: term(),
  ledger_file_writer: term(),
  lock_file_decoder: term(),
  lock_file_encoder: term(),
  lock_file_name: term(),
  lock_file_reader: term(),
  lock_file_writer: term(),
  os_version: term(),
  otp_version: term(),
  record_file_decoder: term(),
  record_file_encoder: term(),
  record_file_name: term(),
  record_file_reader: term(),
  record_file_writer: term(),
  storage: term()
}) :: :ok

Creates a Fact database from the Fact.Genesis.Event.DatabaseCreated.V1 event.

It initializes storage, and appends the event as the first record of every database.