From 3e923b99b1f429c4827a354c523236330e13777b Mon Sep 17 00:00:00 2001 From: Ollie Date: Sun, 20 Sep 2026 11:36:00 +0100 Subject: [PATCH] Restore the pruned database migration files Restore the pruned database migration files to make discovery of past migrations easier. The generated schema file will still be used on installs where no migrations have been executed. In 1cd71f4, the `php artisan schema:dump --prune` command was run, to squash database migrations into a schema file[1]. This was done as part of the Laravel 10.x -> 11.x migration, in order to avoid having to update any existing migrations that use the `->change()` method[2]. The `--prune` option removes all existing migrations that are squashed into the schema file. This option is not required by the 11.x migration docs[2], and makes it harder to view historical migrations. From the Laravel 11.x docs on Squashing Migrations[1]: > Now, when you attempt to migrate your database and no other migrations have been executed, Laravel will first execute the SQL statements in the schema file of the database connection you are using. After executing the schema file's SQL statements, Laravel will execute any remaining migrations that were not part of the schema dump. Therefore, this only has an impact on local development/CI, and there is no issue with having both the migration and schema files present in the repo. [1]: https://laravel.com/framework/docs/11.x/migrations#squashing-migrations [2]: https://laravel.com/framework/docs/11.x/upgrade#modifying-columns Bug: T440599 --- .../2018_11_17_124956_create_users_table.php | 33 ++++++++++++ ...018_11_17_133622_create_wiki_dbs_table.php | 43 +++++++++++++++ .../2018_11_17_133627_create_wikis_table.php | 33 ++++++++++++ ..._08_14_111000_create_invitations_table.php | 29 +++++++++++ ...8_14_155900_create_wiki_managers_table.php | 31 +++++++++++ ..._create_user_verification_tokens_table.php | 30 +++++++++++ ..._08_31_163057_create_failed_jobs_table.php | 32 ++++++++++++ ...09_02_000000_create_wiki_domains_table.php | 34 ++++++++++++ ...0_create_queryservice_namespaces_table.php | 35 +++++++++++++ ...0_19_164400_create_wiki_settings_table.php | 30 +++++++++++ ...004100_create_event_page_updates_table.php | 28 ++++++++++ ...9_10_20_101600_create_qs_batches_table.php | 26 ++++++++++ ...06_173300_create_password_resets_table.php | 33 ++++++++++++ ...2020_12_08_192540_drop_interests_table.php | 14 +++++ ...4722_modify_wiki_settings_value_length.php | 29 +++++++++++ ...2_modify_oauth_clients_secret_nullable.php | 23 ++++++++ ...7_194100_modify_oauth_clients_provider.php | 28 ++++++++++ ...21_095824_create_wiki_site_stats_table.php | 48 +++++++++++++++++ ..._08_29_145247_create_job_batches_table.php | 36 +++++++++++++ ...751_create_wiki_lifecycle_events_table.php | 33 ++++++++++++ ...5_153643_qs_batches_add_pending_column.php | 33 ++++++++++++ ...e_wiki_notification_sent_records_table.php | 35 +++++++++++++ ..._084718_event_page_update_title_length.php | 33 ++++++++++++ ..._21_091331_create_qs_checkpoints_table.php | 44 ++++++++++++++++ ...6_165700_enforce_site_stats_constraint.php | 34 ++++++++++++ ...4_05_15_042959_add_admin_role_to_users.php | 26 ++++++++++ ..._05_15_043447_add_wiki_deletion_reason.php | 25 +++++++++ ...00_enforce_lifecycle_events_constraint.php | 52 +++++++++++++++++++ ...74114_create_wiki_entity_imports_table.php | 32 ++++++++++++ ...move_and_rebuild_wiki_lifecycle_events.php | 22 ++++++++ .../2025_01_28_144045_wiki_daily_metric.php | 29 +++++++++++ ...3_14_220054_create_wiki_profiles_table.php | 32 ++++++++++++ ...add_columns_to_wiki_daily_metric_table.php | 26 ++++++++++ ...085142_wiki_profiles_audience_nullable.php | 28 ++++++++++ ...of_triples_to_wiki_daily_metrics_table.php | 25 +++++++++ ...user_count_to_wiki_daily_metrics_table.php | 27 ++++++++++ ..._103841_create_complaint_records_table.php | 29 +++++++++++ ..._item_count_to_wiki_daily_merics_table.php | 25 +++++++++ ...rties_count_to_wiki_daily_merics_table.php | 25 +++++++++ ...xemes_count_to_wiki_daily_merics_table.php | 25 +++++++++ ...hemas_count_to_wiki_daily_merics_table.php | 25 +++++++++ .../2025_09_29_194758_tou_acceptances.php | 29 +++++++++++ .../2025_10_14_091126_tou_versions.php | 26 ++++++++++ ...total_user_count_to_wiki_daily_metrics.php | 25 +++++++++ ...reate_knowledge_equity_responses_table.php | 35 +++++++++++++ 45 files changed, 1375 insertions(+) create mode 100644 database/migrations/2018_11_17_124956_create_users_table.php create mode 100644 database/migrations/2018_11_17_133622_create_wiki_dbs_table.php create mode 100644 database/migrations/2018_11_17_133627_create_wikis_table.php create mode 100644 database/migrations/2019_08_14_111000_create_invitations_table.php create mode 100644 database/migrations/2019_08_14_155900_create_wiki_managers_table.php create mode 100644 database/migrations/2019_08_19_225500_create_user_verification_tokens_table.php create mode 100644 database/migrations/2019_08_31_163057_create_failed_jobs_table.php create mode 100644 database/migrations/2019_09_02_000000_create_wiki_domains_table.php create mode 100644 database/migrations/2019_10_18_170700_create_queryservice_namespaces_table.php create mode 100644 database/migrations/2019_10_19_164400_create_wiki_settings_table.php create mode 100644 database/migrations/2019_10_20_004100_create_event_page_updates_table.php create mode 100644 database/migrations/2019_10_20_101600_create_qs_batches_table.php create mode 100644 database/migrations/2020_04_06_173300_create_password_resets_table.php create mode 100644 database/migrations/2020_12_08_192540_drop_interests_table.php create mode 100644 database/migrations/2021_03_23_134722_modify_wiki_settings_value_length.php create mode 100644 database/migrations/2021_03_27_134722_modify_oauth_clients_secret_nullable.php create mode 100644 database/migrations/2021_03_27_194100_modify_oauth_clients_provider.php create mode 100644 database/migrations/2023_08_21_095824_create_wiki_site_stats_table.php create mode 100644 database/migrations/2023_08_29_145247_create_job_batches_table.php create mode 100644 database/migrations/2023_09_19_094751_create_wiki_lifecycle_events_table.php create mode 100644 database/migrations/2023_10_25_153643_qs_batches_add_pending_column.php create mode 100644 database/migrations/2023_10_31_204320_create_wiki_notification_sent_records_table.php create mode 100644 database/migrations/2023_11_06_084718_event_page_update_title_length.php create mode 100644 database/migrations/2023_11_21_091331_create_qs_checkpoints_table.php create mode 100644 database/migrations/2024_04_16_165700_enforce_site_stats_constraint.php create mode 100644 database/migrations/2024_05_15_042959_add_admin_role_to_users.php create mode 100644 database/migrations/2024_05_15_043447_add_wiki_deletion_reason.php create mode 100644 database/migrations/2024_06_19_110900_enforce_lifecycle_events_constraint.php create mode 100644 database/migrations/2024_06_24_074114_create_wiki_entity_imports_table.php create mode 100644 database/migrations/2024_08_01_193038_remove_and_rebuild_wiki_lifecycle_events.php create mode 100755 database/migrations/2025_01_28_144045_wiki_daily_metric.php create mode 100644 database/migrations/2025_03_14_220054_create_wiki_profiles_table.php create mode 100644 database/migrations/2025_03_24_143626_add_columns_to_wiki_daily_metric_table.php create mode 100644 database/migrations/2025_03_25_085142_wiki_profiles_audience_nullable.php create mode 100755 database/migrations/2025_04_15_075639_add_number_of_triples_to_wiki_daily_metrics_table.php create mode 100755 database/migrations/2025_05_19_142457_add_monthly_user_count_to_wiki_daily_metrics_table.php create mode 100644 database/migrations/2025_07_18_103841_create_complaint_records_table.php create mode 100644 database/migrations/2025_07_30_104606_add_item_count_to_wiki_daily_merics_table.php create mode 100644 database/migrations/2025_07_30_104622_add_properties_count_to_wiki_daily_merics_table.php create mode 100644 database/migrations/2025_07_30_104657_add_lexemes_count_to_wiki_daily_merics_table.php create mode 100644 database/migrations/2025_07_30_104719_add_entity_schemas_count_to_wiki_daily_merics_table.php create mode 100644 database/migrations/2025_09_29_194758_tou_acceptances.php create mode 100644 database/migrations/2025_10_14_091126_tou_versions.php create mode 100644 database/migrations/2025_12_07_204557_add_total_user_count_to_wiki_daily_metrics.php create mode 100644 database/migrations/2026_03_06_160019_create_knowledge_equity_responses_table.php diff --git a/database/migrations/2018_11_17_124956_create_users_table.php b/database/migrations/2018_11_17_124956_create_users_table.php new file mode 100644 index 000000000..05c0d827f --- /dev/null +++ b/database/migrations/2018_11_17_124956_create_users_table.php @@ -0,0 +1,33 @@ +increments('id'); + $table->string('email')->unique(); + $table->string('password'); + // remeber_token needed https://stackoverflow.com/questions/24954537/is-it-compulsory-to-use-remember-token-field + $table->string('remember_token', 100)->nullable(); + $table->boolean('verified')->default(0); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::dropIfExists('users'); + } +} diff --git a/database/migrations/2018_11_17_133622_create_wiki_dbs_table.php b/database/migrations/2018_11_17_133622_create_wiki_dbs_table.php new file mode 100644 index 000000000..dcc5218bb --- /dev/null +++ b/database/migrations/2018_11_17_133622_create_wiki_dbs_table.php @@ -0,0 +1,43 @@ +increments('id'); + + $table->string('name', 100); + $table->string('prefix', 100); + $table->string('user', 100); + $table->string('password', 100); + + // Require the dbname and prefix to be unique... + $table->unique(['name', 'prefix']); + + $table->string('version', 20); + // Index needed so that we can easily query what needs to be updated + $table->index('version'); + + $table->integer('wiki_id')->nullable()->unsigned()->unique(); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::dropIfExists('wiki_dbs'); + } +} diff --git a/database/migrations/2018_11_17_133627_create_wikis_table.php b/database/migrations/2018_11_17_133627_create_wikis_table.php new file mode 100644 index 000000000..f10d8f299 --- /dev/null +++ b/database/migrations/2018_11_17_133627_create_wikis_table.php @@ -0,0 +1,33 @@ +increments('id'); + + $table->string('domain')->unique(); + $table->string('sitename'); + + $table->softDeletes(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::dropIfExists('wikis'); + } +} diff --git a/database/migrations/2019_08_14_111000_create_invitations_table.php b/database/migrations/2019_08_14_111000_create_invitations_table.php new file mode 100644 index 000000000..8cd54d833 --- /dev/null +++ b/database/migrations/2019_08_14_111000_create_invitations_table.php @@ -0,0 +1,29 @@ +increments('id'); + $table->string('code')->unique(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::dropIfExists('invitations'); + } +} diff --git a/database/migrations/2019_08_14_155900_create_wiki_managers_table.php b/database/migrations/2019_08_14_155900_create_wiki_managers_table.php new file mode 100644 index 000000000..ccd862889 --- /dev/null +++ b/database/migrations/2019_08_14_155900_create_wiki_managers_table.php @@ -0,0 +1,31 @@ +increments('id'); + $table->integer('user_id'); + $table->integer('wiki_id'); + $table->timestamps(); + $table->unique(['user_id', 'wiki_id']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::dropIfExists('wiki_managers'); + } +} diff --git a/database/migrations/2019_08_19_225500_create_user_verification_tokens_table.php b/database/migrations/2019_08_19_225500_create_user_verification_tokens_table.php new file mode 100644 index 000000000..00e35526e --- /dev/null +++ b/database/migrations/2019_08_19_225500_create_user_verification_tokens_table.php @@ -0,0 +1,30 @@ +increments('id'); + $table->integer('user_id'); + $table->string('token', 100)->unique(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::dropIfExists('user_verification_tokens'); + } +} diff --git a/database/migrations/2019_08_31_163057_create_failed_jobs_table.php b/database/migrations/2019_08_31_163057_create_failed_jobs_table.php new file mode 100644 index 000000000..a33022953 --- /dev/null +++ b/database/migrations/2019_08_31_163057_create_failed_jobs_table.php @@ -0,0 +1,32 @@ +bigIncrements('id'); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::dropIfExists('failed_jobs'); + } +} diff --git a/database/migrations/2019_09_02_000000_create_wiki_domains_table.php b/database/migrations/2019_09_02_000000_create_wiki_domains_table.php new file mode 100644 index 000000000..874b4117d --- /dev/null +++ b/database/migrations/2019_09_02_000000_create_wiki_domains_table.php @@ -0,0 +1,34 @@ +increments('id'); + + $table->string('domain')->unique(); + // The wiki_id that the domain was initially created for + // domains can not be reused.. (for now) + $table->integer('wiki_id')->nullable()->unsigned(); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::dropIfExists('wiki_domains'); + } +} diff --git a/database/migrations/2019_10_18_170700_create_queryservice_namespaces_table.php b/database/migrations/2019_10_18_170700_create_queryservice_namespaces_table.php new file mode 100644 index 000000000..2b5ac78bd --- /dev/null +++ b/database/migrations/2019_10_18_170700_create_queryservice_namespaces_table.php @@ -0,0 +1,35 @@ +increments('id'); + + $table->string('namespace', 100)->unique(); + // $table->string('internalHost', 100)->unique(); + $table->string('backend', 100); + + $table->integer('wiki_id')->nullable()->unsigned()->unique(); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::dropIfExists('queryservice_namespaces'); + } +} diff --git a/database/migrations/2019_10_19_164400_create_wiki_settings_table.php b/database/migrations/2019_10_19_164400_create_wiki_settings_table.php new file mode 100644 index 000000000..2807f4f8b --- /dev/null +++ b/database/migrations/2019_10_19_164400_create_wiki_settings_table.php @@ -0,0 +1,30 @@ +increments('id'); + $table->string('name', 100); + $table->string('value', 200); + $table->integer('wiki_id')->nullable()->unsigned(); + + $table->index('wiki_id'); + $table->unique(['wiki_id', 'name']); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::dropIfExists('wiki_settings'); + } +} diff --git a/database/migrations/2019_10_20_004100_create_event_page_updates_table.php b/database/migrations/2019_10_20_004100_create_event_page_updates_table.php new file mode 100644 index 000000000..65813872e --- /dev/null +++ b/database/migrations/2019_10_20_004100_create_event_page_updates_table.php @@ -0,0 +1,28 @@ +increments('id'); + $table->integer('wiki_id'); + // 14 allows 100 billion as an entity id.. + $table->string('title', 14); + $table->integer('namespace'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::dropIfExists('event_page_updates'); + } +} diff --git a/database/migrations/2019_10_20_101600_create_qs_batches_table.php b/database/migrations/2019_10_20_101600_create_qs_batches_table.php new file mode 100644 index 000000000..e3c8918e6 --- /dev/null +++ b/database/migrations/2019_10_20_101600_create_qs_batches_table.php @@ -0,0 +1,26 @@ +increments('id'); + $table->integer('eventFrom'); + $table->integer('eventTo'); + $table->integer('wiki_id'); + $table->text('entityIds'); + $table->boolean('done'); + + $table->index('done'); + + $table->timestamps(); + }); + } + + public function down() { + Schema::dropIfExists('qs_batches'); + } +} diff --git a/database/migrations/2020_04_06_173300_create_password_resets_table.php b/database/migrations/2020_04_06_173300_create_password_resets_table.php new file mode 100644 index 000000000..5b37e2464 --- /dev/null +++ b/database/migrations/2020_04_06_173300_create_password_resets_table.php @@ -0,0 +1,33 @@ +string('email')->index(); + $table->string('token')->index(); + $table->timestamp('created_at'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::drop('password_resets'); + } +} diff --git a/database/migrations/2020_12_08_192540_drop_interests_table.php b/database/migrations/2020_12_08_192540_drop_interests_table.php new file mode 100644 index 000000000..1d76ae6de --- /dev/null +++ b/database/migrations/2020_12_08_192540_drop_interests_table.php @@ -0,0 +1,14 @@ +text('value')->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::table('wiki_settings', function (Blueprint $table) { + $table->string('value', 200)->change(); + }); + } +} diff --git a/database/migrations/2021_03_27_134722_modify_oauth_clients_secret_nullable.php b/database/migrations/2021_03_27_134722_modify_oauth_clients_secret_nullable.php new file mode 100644 index 000000000..a2149cc19 --- /dev/null +++ b/database/migrations/2021_03_27_134722_modify_oauth_clients_secret_nullable.php @@ -0,0 +1,23 @@ +string('secret', 100)->nullable()->change(); + }); + } + + public function down() { + Schema::table('oauth_clients', function (Blueprint $table) { + $table->string('secret', 100)->nullable(false)->change(); + }); + } +} diff --git a/database/migrations/2021_03_27_194100_modify_oauth_clients_provider.php b/database/migrations/2021_03_27_194100_modify_oauth_clients_provider.php new file mode 100644 index 000000000..366b63a6b --- /dev/null +++ b/database/migrations/2021_03_27_194100_modify_oauth_clients_provider.php @@ -0,0 +1,28 @@ +string('provider')->after('secret')->nullable(); + }); + } + } + + public function down() { + Schema::table('oauth_clients', function ($table) { + $table->dropColumn('provider'); + }); + } +} diff --git a/database/migrations/2023_08_21_095824_create_wiki_site_stats_table.php b/database/migrations/2023_08_21_095824_create_wiki_site_stats_table.php new file mode 100644 index 000000000..d9a4998ad --- /dev/null +++ b/database/migrations/2023_08_21_095824_create_wiki_site_stats_table.php @@ -0,0 +1,48 @@ +id(); + $table->timestamps(); + + $table->unsignedBigInteger('pages')->default(0); + $table->unsignedBigInteger('articles')->default(0); + $table->unsignedBigInteger('edits')->default(0); + $table->unsignedBigInteger('images')->default(0); + $table->unsignedBigInteger('users')->default(0); + $table->unsignedBigInteger('activeusers')->default(0); + $table->unsignedBigInteger('admins')->default(0); + $table->unsignedBigInteger('jobs')->default(0); + $table->unsignedBigInteger('cirrussearch-article-words')->default(0); + + $table->unsignedInteger('wiki_id'); + $table->foreign('wiki_id')->references('id')->on('wikis'); + }); + + Schema::table('wikis', function (Blueprint $table) { + $table->text('description')->nullable(); + $table->boolean('is_featured')->default(false); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::dropIfExists('wiki_site_stats'); + Schema::dropColumns('wikis', ['description', 'is_featured']); + } +} diff --git a/database/migrations/2023_08_29_145247_create_job_batches_table.php b/database/migrations/2023_08_29_145247_create_job_batches_table.php new file mode 100644 index 000000000..8b858e013 --- /dev/null +++ b/database/migrations/2023_08_29_145247_create_job_batches_table.php @@ -0,0 +1,36 @@ +string('id')->primary(); + $table->string('name'); + $table->integer('total_jobs'); + $table->integer('pending_jobs'); + $table->integer('failed_jobs'); + $table->text('failed_job_ids'); + $table->mediumText('options')->nullable(); + $table->integer('cancelled_at')->nullable(); + $table->integer('created_at'); + $table->integer('finished_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::dropIfExists('job_batches'); + } +} diff --git a/database/migrations/2023_09_19_094751_create_wiki_lifecycle_events_table.php b/database/migrations/2023_09_19_094751_create_wiki_lifecycle_events_table.php new file mode 100644 index 000000000..28cf70c50 --- /dev/null +++ b/database/migrations/2023_09_19_094751_create_wiki_lifecycle_events_table.php @@ -0,0 +1,33 @@ +id(); + $table->timestamps(); + $table->timestampTz('first_edited')->nullable(); + $table->timestampTz('last_edited')->nullable(); + + $table->unsignedInteger('wiki_id'); + $table->foreign('wiki_id')->references('id')->on('wikis'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::dropIfExists('wiki_lifecycle_events'); + } +} diff --git a/database/migrations/2023_10_25_153643_qs_batches_add_pending_column.php b/database/migrations/2023_10_25_153643_qs_batches_add_pending_column.php new file mode 100644 index 000000000..b986bf1ac --- /dev/null +++ b/database/migrations/2023_10_25_153643_qs_batches_add_pending_column.php @@ -0,0 +1,33 @@ +timestampTz('pending_since')->nullable()->default(null); + $table->unsignedInteger('processing_attempts')->default(0); + $table->boolean('failed')->default(false); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::table('qs_batches', function (Blueprint $table) { + $table->dropColumn('pending_since'); + $table->dropColumn('processing_attempts'); + $table->dropColumn('failed'); + }); + } +} diff --git a/database/migrations/2023_10_31_204320_create_wiki_notification_sent_records_table.php b/database/migrations/2023_10_31_204320_create_wiki_notification_sent_records_table.php new file mode 100644 index 000000000..e3f87c95d --- /dev/null +++ b/database/migrations/2023_10_31_204320_create_wiki_notification_sent_records_table.php @@ -0,0 +1,35 @@ +foreign('wiki_id')->references('id')->on('wikis'); + + $table->id(); + $table->timestamps(); + + $table->integer('wiki_id')->unsigned(); + $table->integer('user_id')->unsigned(); + + $table->string('notification_type'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::dropIfExists('wiki_notification_sent_records'); + } +} diff --git a/database/migrations/2023_11_06_084718_event_page_update_title_length.php b/database/migrations/2023_11_06_084718_event_page_update_title_length.php new file mode 100644 index 000000000..2243f8e3f --- /dev/null +++ b/database/migrations/2023_11_06_084718_event_page_update_title_length.php @@ -0,0 +1,33 @@ +text('title')->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + EventPageUpdate::query()->get()->each(function (EventPageUpdate $eventPageUpdate) { + $eventPageUpdate->update(['title' => substr($eventPageUpdate->title, 0, 14)]); + }); + Schema::table('event_page_updates', function (Blueprint $table) { + $table->string('title', 14)->change(); + }); + } +} diff --git a/database/migrations/2023_11_21_091331_create_qs_checkpoints_table.php b/database/migrations/2023_11_21_091331_create_qs_checkpoints_table.php new file mode 100644 index 000000000..70b51f9af --- /dev/null +++ b/database/migrations/2023_11_21_091331_create_qs_checkpoints_table.php @@ -0,0 +1,44 @@ +integer('id')->unsigned()->primary(); + $table->integer('checkpoint')->unsigned(); + $table->timestamps(); + }); + + Schema::table('qs_batches', function (Blueprint $table) { + $table->dropColumn('eventFrom'); + $table->dropColumn('eventTo'); + }); + + QsCheckpoint::init(); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + Schema::dropIfExists('qs_checkpoints'); + + Schema::table('qs_batches', function (Blueprint $table) { + $table->integer('eventFrom')->default(0); + $table->integer('eventTo')->default(0); + }); + } +} diff --git a/database/migrations/2024_04_16_165700_enforce_site_stats_constraint.php b/database/migrations/2024_04_16_165700_enforce_site_stats_constraint.php new file mode 100644 index 000000000..33e428dd3 --- /dev/null +++ b/database/migrations/2024_04_16_165700_enforce_site_stats_constraint.php @@ -0,0 +1,34 @@ +unique('wiki_id'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + // foreign key constraints need to be disabled as per https://github.com/laravel/framework/issues/13873 + Schema::disableForeignKeyConstraints(); + Schema::table('wiki_site_stats', function (Blueprint $table) { + // The column name HAS to be wrapped in an array so Laravel can + // figure out the relation name. + $table->dropUnique(['wiki_id']); + }); + Schema::enableForeignKeyConstraints(); + } +} diff --git a/database/migrations/2024_05_15_042959_add_admin_role_to_users.php b/database/migrations/2024_05_15_042959_add_admin_role_to_users.php new file mode 100644 index 000000000..f6623fbf2 --- /dev/null +++ b/database/migrations/2024_05_15_042959_add_admin_role_to_users.php @@ -0,0 +1,26 @@ + 0 for admins + Schema::table('users', function (Blueprint $table) { + $table->integer('is_admin')->default(false); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('is_admin'); + }); + } +}; diff --git a/database/migrations/2024_05_15_043447_add_wiki_deletion_reason.php b/database/migrations/2024_05_15_043447_add_wiki_deletion_reason.php new file mode 100644 index 000000000..4a972b044 --- /dev/null +++ b/database/migrations/2024_05_15_043447_add_wiki_deletion_reason.php @@ -0,0 +1,25 @@ +string('wiki_deletion_reason')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + Schema::table('wikis', function (Blueprint $table) { + $table->dropColumn('wiki_deletion_reason'); + }); + } +}; diff --git a/database/migrations/2024_06_19_110900_enforce_lifecycle_events_constraint.php b/database/migrations/2024_06_19_110900_enforce_lifecycle_events_constraint.php new file mode 100644 index 000000000..34f52e0cc --- /dev/null +++ b/database/migrations/2024_06_19_110900_enforce_lifecycle_events_constraint.php @@ -0,0 +1,52 @@ +get(); + // Albeit `createOrUpdate` was used when creating lifecycle events + // was used, multiple copies per wiki were created. To clean up before + // enforcing a unique constraint on database level, this migration + // deletes all duplicate rows, keeping the latest one only. + foreach ($allWikis as $wiki) { + $latestLifecycleEvent = WikiLifecycleEvents::where(['wiki_id' => $wiki->id]) + ->latest() + ->take(1) + ->pluck('id'); + WikiLifecycleEvents::where(['wiki_id' => $wiki->id]) + ->whereNotIn('id', $latestLifecycleEvent) + ->delete(); + } + // Now that there is a single row per wiki, we can enforce the unique + // constraint on database level. + Schema::table('wiki_lifecycle_events', function (Blueprint $table) { + $table->unique('wiki_id'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() { + // foreign key constraints need to be disabled as per https://github.com/laravel/framework/issues/13873 + Schema::disableForeignKeyConstraints(); + Schema::table('wiki_lifecycle_events', function (Blueprint $table) { + // The column name HAS to be wrapped in an array so Laravel can + // figure out the relation name. + $table->dropUnique(['wiki_id']); + }); + Schema::enableForeignKeyConstraints(); + } +} diff --git a/database/migrations/2024_06_24_074114_create_wiki_entity_imports_table.php b/database/migrations/2024_06_24_074114_create_wiki_entity_imports_table.php new file mode 100644 index 000000000..0da7cfbcd --- /dev/null +++ b/database/migrations/2024_06_24_074114_create_wiki_entity_imports_table.php @@ -0,0 +1,32 @@ +id(); + $table->timestamps(); + + $table->unsignedInteger('wiki_id'); + $table->foreign('wiki_id')->references('id')->on('wikis'); + + $table->enum('status', ['pending', 'failed', 'success']); + $table->timestamp('started_at')->nullable(); + $table->timestamp('finished_at')->nullable(); + $table->json('payload')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + Schema::dropIfExists('wiki_entity_imports'); + } +}; diff --git a/database/migrations/2024_08_01_193038_remove_and_rebuild_wiki_lifecycle_events.php b/database/migrations/2024_08_01_193038_remove_and_rebuild_wiki_lifecycle_events.php new file mode 100644 index 000000000..5dd6aa52f --- /dev/null +++ b/database/migrations/2024_08_01_193038_remove_and_rebuild_wiki_lifecycle_events.php @@ -0,0 +1,22 @@ +delete(); + UpdateWikiSiteStatsJob::dispatch(); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + // + } +}; diff --git a/database/migrations/2025_01_28_144045_wiki_daily_metric.php b/database/migrations/2025_01_28_144045_wiki_daily_metric.php new file mode 100755 index 000000000..c13553f8f --- /dev/null +++ b/database/migrations/2025_01_28_144045_wiki_daily_metric.php @@ -0,0 +1,29 @@ +string('id')->primary(); + $table->string('wiki_id'); + $table->integer('pages'); + $table->boolean('is_deleted'); + $table->date('date'); + $table->timestamps(); // Created at & Updated at + $table->unique(['wiki_id', 'date']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + Schema::dropIfExists('wiki_daily_metrics'); + } +}; diff --git a/database/migrations/2025_03_14_220054_create_wiki_profiles_table.php b/database/migrations/2025_03_14_220054_create_wiki_profiles_table.php new file mode 100644 index 000000000..0ef49e6a8 --- /dev/null +++ b/database/migrations/2025_03_14_220054_create_wiki_profiles_table.php @@ -0,0 +1,32 @@ +id(); + $table->unsignedInteger('wiki_id'); + $table->foreign('wiki_id')->references('id')->on('wikis'); + $table->enum('purpose', ['data_hub', 'data_lab', 'tool_lab', 'test_drive', 'decide_later', 'other']); + $table->string('purpose_other')->nullable(); + $table->enum('audience', ['narrow', 'wide', 'other']); + $table->string('audience_other')->nullable(); + $table->enum('temporality', ['permanent', 'temporary', 'decide_later', 'other']); + $table->string('temporality_other')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + Schema::dropIfExists('wiki_profiles'); + } +}; diff --git a/database/migrations/2025_03_24_143626_add_columns_to_wiki_daily_metric_table.php b/database/migrations/2025_03_24_143626_add_columns_to_wiki_daily_metric_table.php new file mode 100644 index 000000000..3f9022ca4 --- /dev/null +++ b/database/migrations/2025_03_24_143626_add_columns_to_wiki_daily_metric_table.php @@ -0,0 +1,26 @@ +integer('daily_actions')->nullable(); + $table->integer('weekly_actions')->nullable(); + $table->integer('monthly_actions')->nullable(); + $table->integer('quarterly_actions')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + Schema::table('wiki_daily_metric', function (Blueprint $table) {}); + } +}; diff --git a/database/migrations/2025_03_25_085142_wiki_profiles_audience_nullable.php b/database/migrations/2025_03_25_085142_wiki_profiles_audience_nullable.php new file mode 100644 index 000000000..374d6af1d --- /dev/null +++ b/database/migrations/2025_03_25_085142_wiki_profiles_audience_nullable.php @@ -0,0 +1,28 @@ +integer('number_of_triples')->nullable()->default(null); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + Schema::table('wiki_daily_metrics', function (Blueprint $table) { + $table->dropColumn('number_of_triples'); + }); + } +}; diff --git a/database/migrations/2025_05_19_142457_add_monthly_user_count_to_wiki_daily_metrics_table.php b/database/migrations/2025_05_19_142457_add_monthly_user_count_to_wiki_daily_metrics_table.php new file mode 100755 index 000000000..4bc7fbea0 --- /dev/null +++ b/database/migrations/2025_05_19_142457_add_monthly_user_count_to_wiki_daily_metrics_table.php @@ -0,0 +1,27 @@ +integer('monthly_casual_users')->nullable(); + $table->integer('monthly_active_users')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + Schema::table('wiki_daily_metrics', function (Blueprint $table) { + $table->dropColumn('monthly_casual_users'); + $table->dropColumn('monthly_active_users'); + }); + } +}; diff --git a/database/migrations/2025_07_18_103841_create_complaint_records_table.php b/database/migrations/2025_07_18_103841_create_complaint_records_table.php new file mode 100644 index 000000000..01a2b19e9 --- /dev/null +++ b/database/migrations/2025_07_18_103841_create_complaint_records_table.php @@ -0,0 +1,29 @@ +id(); + $table->timestamps(); + $table->timestamp('dispatched_at')->nullable(); + $table->string('name')->nullable(); + $table->string('mail_address')->nullable(); + $table->text('reason'); + $table->text('offending_urls'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + Schema::dropIfExists('complaint_records'); + } +}; diff --git a/database/migrations/2025_07_30_104606_add_item_count_to_wiki_daily_merics_table.php b/database/migrations/2025_07_30_104606_add_item_count_to_wiki_daily_merics_table.php new file mode 100644 index 000000000..d81f26cf1 --- /dev/null +++ b/database/migrations/2025_07_30_104606_add_item_count_to_wiki_daily_merics_table.php @@ -0,0 +1,25 @@ +integer('item_count')->nullable()->default(null); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + Schema::table('wiki_daily_metrics', function (Blueprint $table) { + $table->dropColumn('item_count'); + }); + } +}; diff --git a/database/migrations/2025_07_30_104622_add_properties_count_to_wiki_daily_merics_table.php b/database/migrations/2025_07_30_104622_add_properties_count_to_wiki_daily_merics_table.php new file mode 100644 index 000000000..df1cc2dd0 --- /dev/null +++ b/database/migrations/2025_07_30_104622_add_properties_count_to_wiki_daily_merics_table.php @@ -0,0 +1,25 @@ +integer('property_count')->nullable()->default(null); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + Schema::table('wiki_daily_metrics', function (Blueprint $table) { + $table->dropColumn('property_count'); + }); + } +}; diff --git a/database/migrations/2025_07_30_104657_add_lexemes_count_to_wiki_daily_merics_table.php b/database/migrations/2025_07_30_104657_add_lexemes_count_to_wiki_daily_merics_table.php new file mode 100644 index 000000000..dbf01a7a5 --- /dev/null +++ b/database/migrations/2025_07_30_104657_add_lexemes_count_to_wiki_daily_merics_table.php @@ -0,0 +1,25 @@ +integer('lexeme_count')->nullable()->default(null); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + Schema::table('wiki_daily_metrics', function (Blueprint $table) { + $table->dropColumn('lexeme_count'); + }); + } +}; diff --git a/database/migrations/2025_07_30_104719_add_entity_schemas_count_to_wiki_daily_merics_table.php b/database/migrations/2025_07_30_104719_add_entity_schemas_count_to_wiki_daily_merics_table.php new file mode 100644 index 000000000..60180aaa6 --- /dev/null +++ b/database/migrations/2025_07_30_104719_add_entity_schemas_count_to_wiki_daily_merics_table.php @@ -0,0 +1,25 @@ +integer('entity_schema_count')->nullable()->default(null); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + Schema::table('wiki_daily_metrics', function (Blueprint $table) { + $table->dropColumn('entity_schema_count'); + }); + } +}; diff --git a/database/migrations/2025_09_29_194758_tou_acceptances.php b/database/migrations/2025_09_29_194758_tou_acceptances.php new file mode 100644 index 000000000..4912197e2 --- /dev/null +++ b/database/migrations/2025_09_29_194758_tou_acceptances.php @@ -0,0 +1,29 @@ +id(); + $table->unsignedInteger('user_id'); + $table->string('tou_version', 10); + $table->timestamp('tou_accepted_at'); + $table->timestamps(); + $table->unique(['user_id', 'tou_version']); + $table->foreign('user_id')->references('id')->on('users')->cascadeOnDelete(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + Schema::dropIfExists('tou_acceptances'); + } +}; diff --git a/database/migrations/2025_10_14_091126_tou_versions.php b/database/migrations/2025_10_14_091126_tou_versions.php new file mode 100644 index 000000000..a558408a8 --- /dev/null +++ b/database/migrations/2025_10_14_091126_tou_versions.php @@ -0,0 +1,26 @@ +id(); + $table->string('version')->unique(); + $table->boolean('active')->default(false); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + Schema::dropIfExists('tou_versions'); + } +}; diff --git a/database/migrations/2025_12_07_204557_add_total_user_count_to_wiki_daily_metrics.php b/database/migrations/2025_12_07_204557_add_total_user_count_to_wiki_daily_metrics.php new file mode 100644 index 000000000..efddf0a42 --- /dev/null +++ b/database/migrations/2025_12_07_204557_add_total_user_count_to_wiki_daily_metrics.php @@ -0,0 +1,25 @@ +integer('total_user_count')->nullable()->default(null); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + Schema::table('wiki_daily_metrics', function (Blueprint $table) { + $table->dropColumn('total_user_count'); + }); + } +}; diff --git a/database/migrations/2026_03_06_160019_create_knowledge_equity_responses_table.php b/database/migrations/2026_03_06_160019_create_knowledge_equity_responses_table.php new file mode 100644 index 000000000..6163b4e89 --- /dev/null +++ b/database/migrations/2026_03_06_160019_create_knowledge_equity_responses_table.php @@ -0,0 +1,35 @@ +id(); + $table->timestamps(); + $table->unsignedInteger('wiki_id'); + $table + ->foreign('wiki_id') + ->references('id') + ->on('wikis') + // Explicitly use the eloquent default options. + // restrict rather than cascading chosen to not result in unexpectedly deleting Knowledge Equity Responses when we delete a wiki + ->restrictOnDelete() + ->restrictOnUpdate(); + $table->enum('selectedOption', ['yes', 'no', 'unsure', 'unsaid']); + $table->string('freeTextResponse', 3000)->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void { + Schema::dropIfExists('knowledge_equity_responses'); + } +};