fic_tracker/lib/fic_tracker/migrations/001_create_base.rb

190 lines
5.8 KiB
Ruby

# 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