# frozen_string_literal: true Sequel.migration do change do create_table(:meta) do String :key, null: false, primary_key: true String :value, null: true end create_table(:cache) do String :key, null: false, primary_key: true File :value, null: true Boolean :expired, null: false, default: false DateTime :expire_at, null: true, default: nil end create_table(:authors) do primary_key :id String :slug, null: false String :backend_name, null: false index %i[slug backend_name], unique: true String :name, null: true, default: nil String :url, null: true, default: nil String :image, null: true, default: nil DateTime :last_metadata_refresh, null: true, default: nil # JSON String :data, null: false, text: true, default: '{}' end create_table(:authors_stories) do primary_key :id foreign_key :author_id, :authors, on_delete: :cascade, on_update: :cascade foreign_key :story_id, :stories, on_delete: :cascade, on_update: :cascade index %i[author_id story_id], unique: true end create_table(:chapters) do primary_key :id foreign_key :story_id, :stories, on_delete: :cascade, on_update: :cascade Integer :index, null: false String :slug, null: false index %i[story_id index], unique: true index %i[story_id slug], unique: true String :etag, null: true, default: nil String :name, null: true, default: nil String :url, null: true, default: nil DateTime :published_at, null: true, default: nil DateTime :updated_at, null: true, default: nil DateTime :last_refresh, null: true, default: nil # JSON String :data, null: false, text: true, default: '{}' end create_table(:collections) do primary_key :id String :slug, null: false String :backend_name, null: false index %i[slug backend_name], unique: true String :type, null: false String :name, null: true, default: nil String :url, null: true, default: nil Integer :story_count, null: false, default: 0 Boolean :completed, null: false, default: false DateTime :last_refresh, null: true, default: nil # JSON String :data, null: false, text: true, default: '{}' end create_table(:collection_stories) do primary_key :id foreign_key :collection_id, :collections, on_delete: :cascade, on_update: :cascade foreign_key :story_id, :stories, on_delete: :cascade, on_update: :cascade index %i[collection_id story_id], unique: true Integer :index, null: true, default: nil end create_table(:stories) do primary_key :id String :slug, null: false String :backend_name, null: false index %i[slug backend_name], unique: true String :name, null: false String :filename, null: true, default: nil String :synopsis, null: false, text: true String :language, null: true, default: 'en' String :url, null: true, default: nil String :image, null: true, default: nil Integer :chapter_count, null: false, default: 0 Integer :word_count, null: false, default: 0 Boolean :completed, null: false, default: false DateTime :published_at, null: false, default: Sequel::CURRENT_TIMESTAMP DateTime :updated_at, null: false, default: Sequel::CURRENT_TIMESTAMP DateTime :last_metadata_refresh, null: true, default: nil DateTime :last_content_refresh, null: true, default: nil DateTime :last_accessed, null: false, default: Sequel::CURRENT_TIMESTAMP # JSON String :tags, null: false, text: true, default: '[]' String :data, null: false, text: true, default: '{}' end if false create_table(:users) do primary_key :id String :username, null: false String :email, null: true, default: nil String :mxid, null: true, default: nil # JSON String :data, null: false, text: true, default: '{}' end create_table(:user_backend_auth) do foreign_key :user_id, :users, on_delete: :cascade, on_update: :cascade String :backend_name, null: false # JSON String :authdata, null: false, text: true, default: '{}' end create_table(:user_history) do primary_key :id foreign_key :user_id, :users, on_delete: :cascade, on_update: :cascade String :slug, null: false String :backend_name, null: false index %i[user_id slug backend_name], unique: true Integer :chapter_index, null: false, default: 0 # XPATH selector for furthest page element that was reached String :chapter_cursor, null: true, default: nil # JSON String :data, null: true, text: true, default: '{}' end create_table(:user_sessions) do primary_key :id foreign_key :user_id, :users, on_delete: :cascade, on_update: :cascade String :auth_token, null: false String :refresh_token, null: false DateTime :session_lifetime, null: true, default: nil DateTime :last_sync, null: false, default: Sequel::CURRENT_TIMESTAMP # JSON String :data, null: false, text: true, default: '{}' end create_table(:user_tracked) do primary_key :id foreign_key :user_id, :users, on_delete: :cascade, on_update: :cascade foreign_key :story_id, :stories, on_delete: :cascade, on_update: :cascade index %i[user_id story_id], unique: true Integer :chapter_index, null: false, default: 0 # XPATH selector for furthest page element that was reached String :chapter_cursor, null: true, default: nil # JSON String :data, null: false, text: true, default: '{}' end end end end