diff --git a/db/migrations/001_invoices.rb b/db/migrations/001_invoices.rb new file mode 100644 index 0000000..81b58ce --- /dev/null +++ b/db/migrations/001_invoices.rb @@ -0,0 +1,23 @@ +Sequel.migration do + change do + create_table(:invoices) do + column :uuid, :uuid, primary_key: true + String :number, null: false, unique: true + String :client_name, null: false + String :client_email, null: false + String :client_address, text: true + String :currency, null: false, size: 3 + BigDecimal :gel_rate, size: [12, 4], null: false + BigDecimal :subtotal, size: [14, 2], null: false + column :items, :jsonb, null: false + Date :issued_on, null: false + Date :due_on, null: false + DateTime :paid_at + String :pdf_key, null: false + String :notes, text: true + DateTime :created_at, null: false + end + + run "CREATE INDEX invoices_created_at_idx ON invoices (created_at DESC)" + end +end diff --git a/lib/db.rb b/lib/db.rb new file mode 100644 index 0000000..7f87eeb --- /dev/null +++ b/lib/db.rb @@ -0,0 +1,22 @@ +require 'sequel' + +module DB + module_function + + def connect! + @connection ||= Sequel.connect( + ENV.fetch('DATABASE_URL'), + max_connections: 5, + logger: ($env == 'development' ? $logger : nil) + ) + end + + def connection + @connection or raise 'DB not connected — call DB.connect! first' + end + + def migrate! + Sequel.extension :migration + Sequel::Migrator.run(connection, File.join($root, 'db', 'migrations')) + end +end