mirror of
https://github.com/System-End/hackatime.git
synced 2026-04-20 00:35:22 +00:00
Leaderboard should handle missing slack_uid
This commit is contained in:
parent
293a6efae0
commit
5ce6176951
2 changed files with 52 additions and 3 deletions
|
|
@ -0,0 +1,48 @@
|
|||
class SwitchLeaderboardEntriesToUserId < ActiveRecord::Migration[8.0]
|
||||
def up
|
||||
# Add user_id column
|
||||
add_column :leaderboard_entries, :user_id, :bigint
|
||||
|
||||
# Add foreign key constraint
|
||||
add_foreign_key :leaderboard_entries, :users
|
||||
|
||||
# Migrate existing data
|
||||
execute <<-SQL
|
||||
UPDATE leaderboard_entries le
|
||||
SET user_id = u.id
|
||||
FROM users u
|
||||
WHERE le.slack_uid = u.slack_uid
|
||||
SQL
|
||||
|
||||
# Add null constraint after data is migrated
|
||||
change_column_null :leaderboard_entries, :user_id, false
|
||||
|
||||
# Update unique index to use user_id instead of slack_uid
|
||||
remove_index :leaderboard_entries, name: "idx_leaderboard_entries_on_leaderboard_and_user"
|
||||
add_index :leaderboard_entries, [ :leaderboard_id, :user_id ], unique: true, name: "idx_leaderboard_entries_on_leaderboard_and_user"
|
||||
|
||||
# Remove slack_uid column
|
||||
remove_column :leaderboard_entries, :slack_uid
|
||||
end
|
||||
|
||||
def down
|
||||
# Add back slack_uid column
|
||||
add_column :leaderboard_entries, :slack_uid, :string
|
||||
|
||||
# Migrate data back
|
||||
execute <<-SQL
|
||||
UPDATE leaderboard_entries le
|
||||
SET slack_uid = u.slack_uid
|
||||
FROM users u
|
||||
WHERE le.user_id = u.id
|
||||
SQL
|
||||
|
||||
# Remove user_id column and its foreign key
|
||||
remove_foreign_key :leaderboard_entries, :users
|
||||
remove_column :leaderboard_entries, :user_id
|
||||
|
||||
# Restore original index
|
||||
remove_index :leaderboard_entries, name: "idx_leaderboard_entries_on_leaderboard_and_user"
|
||||
add_index :leaderboard_entries, [ :leaderboard_id, :slack_uid ], unique: true, name: "idx_leaderboard_entries_on_leaderboard_and_user"
|
||||
end
|
||||
end
|
||||
7
db/schema.rb
generated
7
db/schema.rb
generated
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema[8.0].define(version: 2025_03_12_172534) do
|
||||
ActiveRecord::Schema[8.0].define(version: 2025_03_13_205725) do
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "pg_catalog.plpgsql"
|
||||
|
||||
|
|
@ -155,12 +155,12 @@ ActiveRecord::Schema[8.0].define(version: 2025_03_12_172534) do
|
|||
|
||||
create_table "leaderboard_entries", force: :cascade do |t|
|
||||
t.bigint "leaderboard_id", null: false
|
||||
t.string "slack_uid", null: false
|
||||
t.integer "total_seconds", default: 0, null: false
|
||||
t.integer "rank"
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.index ["leaderboard_id", "slack_uid"], name: "idx_leaderboard_entries_on_leaderboard_and_user", unique: true
|
||||
t.bigint "user_id", null: false
|
||||
t.index ["leaderboard_id", "user_id"], name: "idx_leaderboard_entries_on_leaderboard_and_user", unique: true
|
||||
t.index ["leaderboard_id"], name: "index_leaderboard_entries_on_leaderboard_id"
|
||||
end
|
||||
|
||||
|
|
@ -258,6 +258,7 @@ ActiveRecord::Schema[8.0].define(version: 2025_03_12_172534) do
|
|||
add_foreign_key "email_addresses", "users"
|
||||
add_foreign_key "heartbeats", "users"
|
||||
add_foreign_key "leaderboard_entries", "leaderboards"
|
||||
add_foreign_key "leaderboard_entries", "users"
|
||||
add_foreign_key "project_repo_mappings", "users"
|
||||
add_foreign_key "sign_in_tokens", "users"
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue