190 lines
5.8 KiB
Ruby
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 # multi_user
|
|
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
|
|
|