Merge remote-tracking branch 'origin/main' into feature/351

このコミットが含まれているのは:
2026-06-22 12:39:17 +09:00
コミット 469228a6ed
162個のファイルの変更16567行の追加1180行の削除
+10
ファイルの表示
@@ -0,0 +1,10 @@
class CreateTheatreProgrammes < ActiveRecord::Migration[8.0]
def change
create_table :theatre_programmes, primary_key: [:theatre_id, :position] do |t|
t.references :theatre, null: false, foreign_key: true
t.integer :position, null: false
t.references :post, null: false, foreign_key: true
t.datetime :created_at, null: false
end
end
end
+36
ファイルの表示
@@ -0,0 +1,36 @@
class CreateTheatreSkipVotesAndEvents < ActiveRecord::Migration[8.0]
def change
create_table :theatre_skip_votes, primary_key: [:theatre_id, :post_id, :user_id] do |t|
t.references :theatre, null: false, foreign_key: true
t.references :post, null: false, foreign_key: true
t.references :user, null: false, foreign_key: true
t.timestamps
end
create_table :theatre_skip_events do |t|
t.references :theatre, null: false, foreign_key: true
t.references :post, null: false, foreign_key: true
t.references :skipped_by_user, null: false, foreign_key: { to_table: :users }
t.integer :programme_position
t.datetime :created_at, null: false
end
create_table :theatre_skip_event_voters, primary_key: [:theatre_skip_event_id, :user_id] do |t|
t.references :theatre_skip_event, null: false, foreign_key: true
t.references :user, null: false, foreign_key: true
end
create_table :theatre_skip_event_tags, primary_key: [:theatre_skip_event_id, :tag_id] do |t|
t.references :theatre_skip_event, null: false, foreign_key: true
t.references :tag, null: false, foreign_key: true
end
add_index :theatre_skip_events, [:theatre_id, :created_at]
add_index :theatre_skip_votes, [:theatre_id, :post_id, :created_at],
name: 'idx_theatre_skip_votes_theatre_post_created'
add_index :theatre_skip_event_voters, [:user_id, :theatre_skip_event_id],
name: 'idx_theatre_skip_event_voters_user_event'
add_index :theatre_skip_event_tags, [:tag_id, :theatre_skip_event_id],
name: 'idx_theatre_skip_event_tags_tag_event'
end
end
+18
ファイルの表示
@@ -0,0 +1,18 @@
class CreateGekanatorGames < ActiveRecord::Migration[8.0]
def change
create_table :gekanator_games do |t|
t.references :user, null: false, foreign_key: true
t.references :guessed_post, null: false, foreign_key: { to_table: :posts }
t.references :correct_post, null: false, foreign_key: { to_table: :posts }
t.boolean :won, null: false
t.integer :question_count, null: false
t.json :answers, null: false
t.timestamps
end
add_check_constraint :gekanator_games,
'question_count >= 0',
name: 'chk_gekanator_games_question_count_nonnegative'
end
end
+14
ファイルの表示
@@ -0,0 +1,14 @@
class CreateGekanatorQuestionSuggestions < ActiveRecord::Migration[8.0]
def change
create_table :gekanator_question_suggestions do |t|
t.references :gekanator_game,
null: false,
foreign_key: { on_delete: :cascade }
t.references :user, null: false, foreign_key: true
t.text :question_text, null: false
t.boolean :processed, null: false, default: false
t.timestamps
end
end
end
@@ -0,0 +1,5 @@
class AddAnswerToGekanatorQuestionSuggestions < ActiveRecord::Migration[8.0]
def change
add_column :gekanator_question_suggestions, :answer, :string, null: false
end
end
+19
ファイルの表示
@@ -0,0 +1,19 @@
class CreateGekanatorQuestions < ActiveRecord::Migration[8.0]
def change
create_table :gekanator_questions do |t|
t.string :text, null: false
t.string :kind, null: false
t.json :condition, null: false
t.string :source, null: false, default: 'ai_generated'
t.string :status, null: false, default: 'pending'
t.float :priority_weight, null: false, default: 1.0
t.references :gekanator_question_suggestion,
null: true,
foreign_key: true
t.references :created_by,
null: true,
foreign_key: { to_table: :users }
t.timestamps
end
end
end
+13
ファイルの表示
@@ -0,0 +1,13 @@
class CreateGekanatorAiRuns < ActiveRecord::Migration[8.0]
def change
create_table :gekanator_ai_runs do |t|
t.string :model, null: false
t.integer :input_tokens, null: false, default: 0
t.integer :output_tokens, null: false, default: 0
t.decimal :estimated_cost_jpy, precision: 8, scale: 3, null: false, default: 0
t.string :status, null: false, default: 'pending'
t.references :gekanator_question_suggestion, null: false, foreign_key: true
t.timestamps
end
end
end
+19
ファイルの表示
@@ -0,0 +1,19 @@
class CreateGekanatorQuestionExamples < ActiveRecord::Migration[8.0]
def change
create_table :gekanator_question_examples do |t|
t.references :gekanator_question, null: false, foreign_key: true
t.references :post, null: false, foreign_key: true
t.references :user, null: false, foreign_key: true
t.references :gekanator_game, null: true, foreign_key: true
t.string :answer, null: false
t.string :source, null: false, default: 'post_game_extra'
t.float :weight, null: false, default: 1.0
t.timestamps
end
add_index :gekanator_question_examples,
[:gekanator_question_id, :post_id, :user_id],
unique: true,
name: 'idx_gekanator_question_examples_on_question_post_user'
end
end
@@ -0,0 +1,40 @@
class AddAnswerStatisticsToGekanatorQuestionExamples < ActiveRecord::Migration[8.0]
class MigrationGekanatorQuestionExample < ApplicationRecord
self.table_name = 'gekanator_question_examples'
end
def up
add_column :gekanator_question_examples,
:answer_counts,
:json,
null: true
add_column :gekanator_question_examples,
:sample_count,
:integer,
null: false,
default: 1
MigrationGekanatorQuestionExample.reset_column_information
MigrationGekanatorQuestionExample.find_each do |example|
counts = {
'yes' => 0,
'no' => 0,
'partial' => 0,
'probably_no' => 0,
'unknown' => 0
}
counts[example.answer] = 1 if counts.key?(example.answer)
example.update_columns(
answer_counts: counts,
sample_count: 1)
end
change_column_null :gekanator_question_examples, :answer_counts, false
end
def down
remove_column :gekanator_question_examples, :sample_count
remove_column :gekanator_question_examples, :answer_counts
end
end
+20
ファイルの表示
@@ -0,0 +1,20 @@
class AddDeprecatedAtToTags < ActiveRecord::Migration[8.0]
def up
add_column :tags, :deprecated_at, :datetime, after: :category
add_column :tag_versions, :deprecated_at, :datetime, after: :parent_tag_ids
add_index :tags, :deprecated_at
add_check_constraint :tags, "deprecated_at IS NULL OR category <> 'nico'",
name: 'chk_tags_deprecated_at_not_nico'
end
def down
remove_check_constraint :tags, name: 'chk_tags_deprecated_at_not_nico'
remove_index :tags, :deprecated_at
remove_column :tag_versions, :deprecated_at, :datetime
remove_column :tags, :deprecated_at
end
end